4. 车辆动力学基础
在 CARLA 规划控制闭环仿真中,规划模块输出的是轨迹点、速度或加速度指令,而真正让车辆“动起来”的,是底层车辆动力学模型与执行器接口。如果忽略动力学,控制器很容易在仿真中出现“指令完美、车辆漂移”的现象。本节围绕四个核心对象展开:车辆模型、运动学与动力学、轮胎模型、控制输入接口,帮助你把上层算法与底层物理连接起来。
一、车辆模型:从质点模型到多体模型
CARLA 中常用的车辆模型可以按复杂度分为三类。第一类是质点模型,只保留位置、速度、航向,适合路径跟踪初调;第二类是运动学自行车模型,用轴距、前轮转角、纵向速度描述位姿变化,计算量小,适合低速泊车与轨迹预演;第三类是动力学模型,引入质量、转动惯量、轮胎侧偏刚度、悬架等参数,能表现高速过弯时的侧滑与横摆。
在 CARLA 的 PythonAPI 中,车辆通常以 vehicle.* 蓝图加载,并通过 carla.VehicleControl 接收控制量。需要特别注意的是,CARLA 默认的车辆物理由 Chaos 或 PhysX 求解,车辆模型参数并不完全等同于教科书公式,因此调参时要结合仿真观测。
二、运动学与动力学:低速看几何,高速看力
运动学关注“几何关系”,不涉及力与质量。以自行车模型为例,后轴中心位姿为 (x, y, θ),轴距为 L,前轮转角为 δ,纵向速度为 v,则:
x_dot = v * cos(θ)
y_dot = v * sin(θ)
θ_dot = v / L * tan(δ)
该模型在低速、轮胎侧偏可忽略时非常有效,常用于 Pure Pursuit、Stanley 等几何控制器的前馈推导。但当车速升高、转弯半径变小,轮胎需要产生侧向力,运动学模型会低估横摆响应,此时必须引入动力学。
动力学模型通常包含纵向、侧向、横摆三个自由度,核心方程可简化为:
m * (v_x_dot - v_y * r) = F_x - F_yf * sin(δ)
m * (v_y_dot + v_x * r) = F_yf * cos(δ) + F_yr
I_z * r_dot = a * F_yf * cos(δ) - b * F_yr
其中 m 为整车质量,I_z 为横摆转动惯量,a、b 为质心到前、后轴距离,F_yf、F_yr 为前、后轴侧向力。CARLA 中这些参数可通过车辆物理控制或蓝图属性间接调整,但更推荐在控制器侧做参数辨识与补偿。
三、轮胎模型:车辆与地面之间的唯一桥梁
轮胎是车辆动力学中最关键也最复杂的部件。常用轮胎模型包括:
- 线性轮胎模型:侧向力与侧偏角成正比,
F_y = -C_α * α,仅适用于小侧偏角。 - Fiala 模型:考虑轮胎饱和,能表现侧向力随侧偏角增大而趋于极限。
- Pacejka 魔术公式:用一组系数拟合实验数据,精度高,广泛用于车辆仿真。
在 CARLA 中,轮胎参数通常不直接暴露给 PythonAPI,但可以通过 carla.VehiclePhysicsControl 调整轮胎摩擦系数 tire_friction、阻尼率 damping_rate 等,从而改变抓地表现。若控制器在湿滑路面出现“转向不足”,可优先检查轮胎摩擦与载荷转移设置。
| 模型 | 适用速度 | 关键参数 | CARLA 对应 |
|---|---|---|---|
| 运动学自行车 | 低速 < 30 km/h | 轴距 L、前轮转角 δ | 控制器内部推导 |
| 线性动力学 | 中速 30–70 km/h | 质量 m、侧偏刚度 C_α | VehiclePhysicsControl |
| 非线性轮胎 | 高速 / 极限工况 | 摩擦系数 μ、滑移率 | tire_friction 参数 |
四、控制输入接口:从算法到执行器
CARLA 通过 carla.VehicleControl 向车辆发送控制指令,主要字段如下:
control = carla.VehicleControl()
control.throttle = 0.6 # 油门 0~1
control.brake = 0.0 # 刹车 0~1
control.steer = -0.15 # 转向 -1~1,左负右正
control.hand_brake = False # 手刹
control.manual_gear_shift = False
vehicle.apply_control(control)
这些接口是“归一化”的,并不直接等于物理力矩。油门 0.6 在不同车辆、不同挡位下产生的加速度不同。因此,控制器设计时通常需要一层执行器映射:把期望加速度转换为油门/刹车,把期望曲率转换为转向角。常见做法是使用 PID 或前馈+反馈组合。
五、案例:高速弯道中的动力学影响
假设车辆以 80 km/h 进入半径 100 m 的弯道。若控制器仅使用运动学模型计算前轮转角,会得到约 δ = arctan(L / R) 的转角。但实际车辆因轮胎侧偏,需要额外转角才能维持路径,否则会出现“切内弯”或“推头”。在 CARLA 中,可通过开启 VehiclePhysicsControl 的轮胎摩擦与载荷转移,观察横摆角速度与侧向加速度的差异。
复盘时重点检查三项:一是期望曲率与实际曲率是否一致;二是侧向加速度是否超过轮胎附着极限;三是转向指令是否出现高频抖动。若抖动明显,往往是执行器映射增益过大或轮胎模型饱和所致。
六、常见误区与排查清单
- 误区一:把
steer当成前轮转角。实际上它是归一化转向,需乘以最大转向角。 - 误区二:忽略仿真步长。CARLA 默认 0.05 s,若控制器输出频率过低,动力学积分会失真。
- 误区三:用运动学模型调高速控制器,导致高速时路径跟踪误差大。
- 误区四:不区分同步模式与异步模式,导致控制指令与仿真时间不同步。
fixed_delta_seconds,否则车辆响应会随帧率波动,难以复现。
理解这条链路后,你在 CARLA 中调试规划控制时就能快速定位问题:是规划轨迹不合理,是控制器增益不当,是执行器映射失真,还是轮胎/动力学参数与场景不匹配。把车辆模型、运动学与动力学、轮胎模型、控制输入接口四者串起来,闭环仿真才真正具备工程可信度。