工程笔记 · 车辆动力学 · 2026 年 9 月 23 日
车辆悬挂与轮胎物理
车轮怎样找到地面、支撑车身、把扭矩变成加速度,又怎样失去抓地力?从共同的数学基础,读懂三套游戏车辆实现。
这是一篇实现原理笔记,不是同等条件下的操控性能评测。标为教学模型的方程只用于解释;对具体实现的描述来自文末列明的代码。不在本文转载商业插件源码。
车辆模拟到底需要算什么?
一个刚体车身能够下落、弹跳和碰撞,但还不足以解释驾驶。对每个车轮,都要判断是否接地,计算悬挂提供的法向载荷、轮胎的纵向与横向力,以及改变车轮自转的反作用扭矩。力作用在质心以外,因此还会引起俯仰、侧倾和偏航。
有用的抽象是一个刚体车身,加上四组接触和车轮模型。轮胎摩擦并不简单地与油门成正比:载荷、路面、滑移和轮胎模型限制了它能传递的力。悬挂的重要作用之一正是决定轮胎载荷,因此不能只看弹簧运动来判断物理效果。
位置 p、朝向 q、线速度与角速度 v、ω,以及每个轮子的转速和悬挂行程。
路面可以推动车轮,但不能把它吸进路面;法向载荷不能为负。
转向改变轮胎局部坐标系;发动机和刹车改变轮上扭矩,继而改变滑移和轮胎力。
本文讨论可操控车辆的动力学,不模拟每块橡胶胎面花纹的详细变形。
从一次地面检测到一个受力车轮
令 aᵢ 为第 i 个轮子的车身连接点,dᵢ 为悬挂方向,R 为轮胎半径,hᵢ 为地面检测的命中点。沿 dᵢ 投射射线或形状,可以估计轮心位置与当前悬挂长度 ℓᵢ。压缩量是 xᵢ = clamp(ℓ₀ − ℓᵢ, 0, 行程),其中 ℓ₀ 是未压缩长度。这一步得到的只是几何长度,还不是力。
射线适合平整路面,便宜且稳定,但细线可能错过轮胎边缘碰到的路沿。球形或其他形状扫描覆盖更大的范围,代价更高,仍不等于可变形轮胎。另一条路线是真实刚体车轮:碰撞体与约束决定接触,而非人为合成一个接触斑。画出来的轮胎网格和实际用于检测接触的几何必须分清。
为什么施力位置很重要?
上式在惯性(世界)坐标系中写平移;下式在随车身旋转的坐标系中写转动,两行不是一条乘积。m 是质量,a = dv/dt 是质心的线加速度,ω̇ = dω/dt 是车身坐标系中的角加速度,I 是惯量张量。式中的加速度、力、力臂与角运动量均为向量。
第一步:为什么是 m a = ΣF + mg?
从质量恒定的车身动量 P = m v 出发,其中 v 是质心速度。牛顿第二定律说动量随时间的变化等于外力合力,因此 dP/dt = m dv/dt = m a。把重力单独写出来,就得到 m a = Σᵢ Fᵢ + m g。这里 Fᵢ 是除重力外的外力,可以包括悬挂传给车身的力、轮胎模型施加的力和空气阻力;轮胎力是否直接作用于车身取决于采用的车轮模型。g 是向下的加速度向量,不能再把重力算进求和。若世界 z 轴向上,竖直分量便是 m az = Σᵢ Fi,z − mg,这里等号最后的 g 才指正的大小 9.81 m/s²。
第二步:偏离质心的力为什么使车身转动?
以质心为取力矩的原点,rᵢ 从质心指向第 i 个力的实际作用点;该处的力 Fᵢ 产生 rᵢ × Fᵢ,大小为 |rᵢ||Fᵢ| sin θ。只有垂直于力方向的力臂有效。举例:从车尾看,令 x 向右、z 向上,右轮处 r = (0.8, 0, 0) m,向上增加的力 F = (0, 0, 1,000) N,则 r × F = (0, −800, 0) N·m。负号来自坐标约定,侧倾力矩大小是 800 N·m。若还有不由这些力臂表示的直接力偶,就另加 τⱼ。左右两轮的垂向力可以一增一减,使向上合力保持不变,却仍产生侧倾力矩。若车轮是独立刚体,rᵢ 应指向悬挂将力传给车身的位置;在简化的合成车轮模型中,它也可能是选定的等效接触施力点。不能把不同刚体上的受力点混为一谈。
第三步:ω × (Iω) 从哪里来?
车身绕质心的角动量是 H = Iω,角动量定律在世界坐标系写作 dH/dt|世界 = Σ力矩。为了让惯量张量 I 在计算中保持常量,改用随车身一起旋转的坐标轴。旋转坐标系的导数换算规则是 dH/dt|世界 = dH/dt|车身 + ω × H;由于刚体的 I 在车身坐标系中不变,dH/dt|车身 = I ω̇。代入 H = Iω,就得到上面的转动方程。计算其右侧时,rᵢ、Fᵢ 与 τⱼ 都须表示在同一车身坐标系。均匀重力作用在质心,所以相对于质心没有重力矩。若选择惯量主轴,使 I = diag(Iₓ,Iᵧ,Iz),第一个分量就是 Iₓ ω̇ₓ + (Iz − Iᵧ)ωᵧωz = Mₓ;第二项说明几个角速度同时存在时,旋转运动会相互耦合。绕固定主惯量轴旋转时叉积项为零,才退化为熟悉的标量式 I ω̇ = τ;车身同时俯仰、侧倾和偏航时一般不能省略。
用于游戏的一次物理步时,先由世界坐标系中的 a = (ΣF + mg)/m 算质心线加速度,再由车身坐标系中的 ω̇ = I⁻¹[Σ(rᵢ × Fᵢ) + Στⱼ − ω × (Iω)] 算角加速度。代入前要把各个力变换到相应坐标系,再按物理时间步积分线速度和角速度。把同一个力向量移到另一作用点,a 不变,但侧倾角加速度可能改变。
车身高度、振荡与载荷转移
线性弹簧产生与压缩量成正比的力。阻尼器抵抗的是压缩或回弹的速度;它不是另一根弹簧,也不决定最终静止高度。令 x 向压缩方向为正,理想化支撑力的大小为 Fs = max(0, kx + c ẋ),其中 k 的单位为 N/m,c 为 N·s/m,ẋ 为 m/s。轮胎法向载荷 Fz 与支撑力有关,但在斜坡、作用点偏置、载荷混合或另有约束时,未必与其大小相等。有的实现沿悬挂轴施力,有的沿路面法线施力。
水平路面上静止、四轮对称时,单轮载荷约为 Fz ≈ mg/4。相同弹簧且没有预载时,静态压缩约为 x₀ ≈ mg/(4k)。例如 m = 1200 kg,每轮 k = 30,000 N/m,则 x₀ ≈ 0.098 m。悬挂必须在这个静态位置上下都留有行程,才能跨越凸起或凹坑。
mₛ 是该角承载的车身质量,y 是相对静态平衡点的位移,r 是路面位移。固有频率 fₙ = √(k/mₛ)/(2π);临界阻尼 c₍crit₎ = 2√(kmₛ);阻尼比 ζ = c/c₍crit₎。单质量模型不包括轮组的簧下质量、轮胎弹性、缓冲限位和防倾杆。
改变弹簧或阻尼后,车身怎样响应?
给车辆一个小台阶输入。观察车身高度、路面高度和超调。
教学模型:质量—弹簧—阻尼系统始终与路面接触。忽略台阶瞬间的路面速度;冲击与轮胎变形需要更完整的模型。
更完整的四分之一车辆模型区分车身质量 mₛ、轮组簧下质量 mᵤ、悬挂 kₛ,cₛ 和轮胎刚度 kₜ。选定一组符号后,相对于静态平衡点有:mₛ z̈ₛ = −kₛ(zₛ−zᵤ)−cₛ(żₛ−żᵤ),以及 mᵤ z̈ᵤ = kₛ(zₛ−zᵤ)+cₛ(żₛ−żᵤ)−kₜ(zᵤ−r)。它同时能表示车身起伏和轮组跳动;单根射线车轮对后者只能近似或省略。
载荷转移是力矩平衡,不是凭空增加重量
转弯时,质心高度 h 处的横向加速度 aᵧ 产生约为 m aᵧ h 的侧倾力矩。若轮距为 t,内外侧转移载荷 Δ 可形成反向力矩 Δt;在简化的刚性、水平路面条件下,全车的 Δ ≈ m aᵧ h/t。总垂向载荷仍约为 mg:外轮增加的载荷来自内轮。前后轴的分配取决于侧倾刚度、悬挂几何和簧下质量,不能单靠这条式子计算。
直线加速或制动时,前后轴之间转移的载荷近似 Δ前后 ≈ m aₓ h/L,L 为轴距。防倾杆将左右轮行程耦合:一种示意模型令 Fbar,L = kbar(xL − xR),Fbar,R = −Fbar,L,实际符号取决于坐标方向。它改变载荷分布,不会免费创造总抓地力。许多轮胎存在载荷敏感性:垂向载荷加倍,侧向最大力增长可能不到两倍,因此不均匀分配可能降低整根车轴的抓地力。
以上平衡忽略空气下压力变化、道路倾斜、路沿冲击和车身垂向加速度。悬挂力可能沿悬挂轴或地面法线;轮胎模型需要使用实际法向分量。
刚度主要决定静态下沉与车身振动频率,阻尼主要决定暂态振荡。行程、限位、防倾杆、质心和轮胎接触共同决定车轮是否保持载荷。
轮胎为什么需要滑移才能产生力?
在接触斑,令 Vx 为相对地面的前向速度,Vy 为横向速度,Ω 为轮胎角速度,R 为有效半径。常见的教学定义是纵向滑移率 κ = (RΩ − Vx)/max(|Vx|, vₑ),侧偏角 α = atan2(Vy, max(|Vx|, vₑ))。其中 vₑ 用于低速时避免除零。不同实现采用的分母、截断和正负号可能不同,因此这两式是共同概念,不宣称逐字等同于每套代码。
驱动扭矩倾向于增大 Ω,产生 κ > 0;制动则使它降低。转向改变轮胎局部坐标系,即使车身继续向前,也会产生侧偏角 α。轮胎力可概括为滑移、法向载荷、路面、外倾角,甚至胎压和速度的函数:(Fx,Fy,Mz) = T(κ,α,Fz,γ,p,V)。Mz 为回正力矩。游戏模型可省略其中一些输入;不存在一条对所有车辆都正确的轮胎曲线。
摩擦椭圆是很有用的“力预算”:更多加速或制动需求意味着更少转向余量。真实轮胎峰值可能不对称、随载荷变化,复合滑移边界也不一定是椭圆。离地时 Fz = 0,接触力预算消失。
同一个接触斑既制动又转向
分别提出纵向和横向力需求;图中的亮点显示简化摩擦圆约束后的可实现值。
教学模型:各向同性的摩擦圆,法向载荷 Fz 固定。这不是三种实现中任意一种的完整复合滑移公式。
侧偏角接近零时,轮胎横向力的初始斜率叫侧偏刚度:Cα = |∂Fy/∂α|₍α≈0₎,单位为 N/rad。接近峰值时曲线开始饱和,有些拟合轮胎过峰后还会下降。载荷敏感性、外倾角、胎压、路面材料、温度和湿度均可改变曲线。暂态响应可用松弛长度 λ 表示:近似 τ ≈ λ/max(|Vx|,vₑ),τ Ḟy + Fy = Fy,steady(α)。它避免力瞬间跃迁到稳态值;具体游戏实现是否真的采用这一模型,仍须逐一检查。
对驱动轮,理想化角运动方程为 Iʷ Ω̇ = Tdrive − Tbrake − Fx R − Trolling。牛顿第三定律将地面力与轮速联系起来。若只用车身速度计算视觉上的轮胎旋转,就无法表示轮胎空转和抱死。接近零速时,还需低速混合或静摩擦处理,避免除以 Vx = 0。
它们的数学选择分别是什么?
基本物理规律相同;真正分歧在于接触的几何表示、弹簧力怎样传给车身,尤其是滑移怎样变成轮胎力。以下依据检查过的代码,不代表全部可配置选项,更不是对真实程度的排名。
A / CHAOS VEHICLES
弹簧载荷,加上受抓地力限制的车轮
- 接触:每个轮沿悬挂轴检测路面,检查过的路径支持射线和球形扫描。悬挂目标可以交给物理约束处理,也有直接施力的备选路径。
- 垂向力:压缩弹簧用 Fspring = kx,根据位移变化方向选择两种阻尼系数;按代码的符号约定,可写为 Fdamp = −c ẋ。轮胎载荷可在弹簧力与静止载荷之间混合,防倾计算还耦合同轴左右轮。
- 轮胎:扭矩除以半径给出纵向力请求;横向力来自侧偏刚度或侧向滑移曲线。当 √(Fx²+Fy²) > μ Fz 时,类似摩擦圆的约束会缩放合力,此外还存在低速和辅助控制逻辑。
- 取舍:抓地力与转向参数直接、调校门槛低;所检查的默认轮胎路径并非经过数据拟合的 Pacejka 轮胎。约束悬挂与直接施力路径不能混为一谈。
B / ADVANCED VEHICLE SYSTEM (AVS 1.4.3)
自定义滑移动态,另有两种车轮模式
- 接触:所检查的代码从最大压缩轮位置向最大伸展方向投射线段,从命中距离减去车轮直径,再截断得到悬挂长度。
- 垂向力:配置中的 N/mm 弹簧刚度显式换算为 N/m,厘米压缩量换算为米,计算 k·压缩量 + c·压缩速度。这一路径沿地面命中法线施力,过度压缩时另加支撑项。
- 射线车轮模式:先把轮胎前向和侧向投影到接触平面;目标纵向滑移由扭矩与 Fz R μx 的比值驱动,目标侧向滑移在低速符号响应和侧偏角间过渡,两者都随时间插值。合成滑移向量归一化,横向分量再做平方根形状调整,最后以 Fz μx 和 Fz μy 生成力。
- 实体车轮模式:带碰撞的车轮刚体受到反向悬挂力。接触摩擦和驱动扭矩由刚体接触求解承担,不走前述合成轮胎力分支。这两种模式不能被描述成同一条轮胎力公式。
C / FGEAR VEHICLE PHYSICS
弹簧预载,搭配可替换的轮胎曲线
- 接触:检查过的车轮代码可用射线或形状检测,从命中几何得到悬挂行程;接触法线参与弹簧力方向计算。
- 垂向力:可设置上下行程、预载、弹簧刚度,分别给压缩和回弹指定阻尼;当前运动方向决定所用阻尼系数。可选的悬挂限位约束帮助阻止车身过度穿透。
- 滑移:纵向滑移始于 RΩ − Vx,侧偏角始于 atan(Vy/(|Vx|+ε));为了处理低速数值问题,滑移率和角度受到截断。轮胎对象接收载荷、滑移、外倾角、胎压、半径和速度。
- 轮胎选择:Simple 模型使用与载荷成比例的正弦—反正切曲线;Tire96、MF61 有随载荷变化的 Magic Formula 项和复合滑移修正;MF61 还包括胎压和力矩项。这些是模型族,并不证明预设参数与某个实测轮胎相符。
这个示意 Magic Formula 可解释 FGear 的 Simple 曲线类型:s 是滑移率或侧偏角,B 控制初始斜率,C 控制形状,D 控制峰值,E 控制曲率。1996/MF6.1 族还加入许多与载荷、外倾、胎压、偏移和复合滑移有关的系数。这不是 Chaos 或 AVS 使用的精确公式。
纵向力怎样随滑移变化?
切换示意轮胎响应,再移动滑移标记。曲线解释形状差异,不代表某条实测轮胎曲线,也不逐行复现插件代码。
均为归一化示意曲线。抓地力和滑移状态曲线仅用于教学,并非从插件提取的数据;此处 Magic Formula 系数也并非实测拟合参数。
三个模型真正不同的地方
| 问题 | Chaos Vehicles | AVS 1.4.3 | FGear(检查版本) |
|---|---|---|---|
| 接触表示 | 射线或球形扫描 | 射线;也有实体碰撞轮替代模式 | 射线或形状式车轮检测 |
| 垂向模型 | 弹簧 + 分方向阻尼;约束或直接施力;载荷混合、同轴耦合 | 显式弹簧阻尼与过度压缩支撑;实体车轮替代模式 | 弹簧、预载、非对称阻尼与可选防穿透约束 |
| 轮胎力 | 扭矩/半径 + 侧偏刚度或曲线,抓地力统一限制 | 目标滑移随时间插值;纵横向力归一化并调整形状;实体轮交给接触摩擦 | 可替换轮胎模型:Simple、1996、MF61,并考虑复合滑移 |
| 可用优势 | 参数较直接,适合建立抓地力预算基线 | 可选合成接触或实体碰撞,滑移响应有时间状态 | 轮胎模型可调范围广,高阶模型考虑外倾角和胎压 |
| 模型边界 | 未经数据调校时抓地力规律仍是风格化近似 | 射线与实体模式行为不同;自定义经验项需要验证 | 系数多、校准负担高;公式复杂也无法弥补不准确的输入 |
本文没有引用三者在同等条件下的精度或 CPU 基准。公平对比应统一车身质量和惯量、轴距、半径、路面、输入、固定时间步及速度,然后记录轮胎力、法向载荷、绕圆加速度、制动距离、台阶响应和漏检次数。参数表更长,不等于外观或驾驶手感更好。
实际模拟顺序与调参步骤
- 01 · 统一单位与车身状态
保证质量、距离、力、扭矩、时间、惯量单位一致;给质心和惯量张量合理的位置及大小;从固定物理时间步开始。
- 02 · 测量接触
每个轮子都判断是否接地,记录接触法线和位置、悬挂长度、命中处相对于路面的速度及表面性质。驶上移动平台时必须用相对速度。
- 03 · 计算悬挂
从静态下沉量确定行程和刚度,再根据 2√(km) 的目标比例确定阻尼。触底要有限位,离地时接触载荷归零;先调好独立车轮,再加入左右防倾杆耦合。
- 04 · 计算轮速与轮胎
把接触点速度转到转向后的轮胎坐标系,按低速规则计算滑移,选定轮胎模型求力并处理复合滑移,再按驱动、制动和接触反扭矩更新 Ω。
- 05 · 施力与积分
在接触点或指定悬挂位置施力,积分车身的平动和转动。若车轮旋转、接触或硬弹簧比渲染帧变化更快,就用物理子步;画面插值与物理求解分开。
- 06 · 先观测,再加辅助控制
绘制每轮压缩量、Fz、κ、α、Fx、Fy、角速度与控制系统介入。先把裸车调好,再加 ABS、防滑、镜头震动和视觉轮胎运动。
本次检查的三套实现都在处理器侧模拟代码中计算核心力;GPU 绘制结果,也可能处理其他视觉效果。车辆模拟当然可以另做 GPU 求解器,但视觉质量好并不意味着车辆物理由 GPU 算。固定时间步的成本大致随车轮数、接触检测复杂度、约束迭代次数和子步数增加,而不只取决于轮胎系数数量。
源码能证明什么,不能证明什么?
| 测试 | 记录指标 | 什么现象说明有问题 |
|---|---|---|
| 静态载荷和落地 | 单轮载荷约 mg/4;下沉、超调与稳定时间 | 单位错误、触底、持续振荡或负地面载荷 |
| 定半径绕圆和渐进转向 | 横向加速度、侧偏角、载荷转移 | 横向力无上限或低速时突然反向 |
| 加速和急刹 | κ、轮速、刹车距离、复合轮胎力 | 轮子不会空转/抱死,零载荷仍有牵引力 |
| 单轮碾过路沿 | 接触命中率、悬挂行程、侧倾 | 射线漏检、冲量过大、车身穿透 |
| 改变渲染帧率 | 不同帧率下重复同一操作 | 画面帧时变化导致物理结果变化 |
查阅源码可以确定特定算法,却不能提供对真实世界的标定误差、同一硬件上的运行时间、轮胎测试数据,或三者的受控对比。FGear 公式更多、物理解释更丰富,但参数未经拟合仍可能错误;AVS 或 Chaos 的简化方案经过细致调校,也可能更适合特定游戏。三者都简化了橡胶胎面分布式变形、温度、磨损等接触斑细节。尖锐几何可能使接触检测失效;物理子步和约束求解也会影响稳定性。
先确定必须重现的现象,再选接触表示与轮胎模型;用相同路况、输入和遥测检验。物理准确度与操控手感应分别评价。