3、车辆运动学模型:自行车模型推导、阿克曼转向几何、模型离散化方法
各位同学好,今天我们聊一个非常核心的话题——车辆运动学模型。说实话,我在刚入行做控制时,觉得动力学模型才高级,运动学模型太简单。但后来在实车调试中吃了不少亏,才明白运动学模型是基础中的基础。你想想看,如果连车怎么走都描述不清楚,后面的控制算法就是空中楼阁。
3.1 自行车模型:把四轮车简化成两轮
为什么要用自行车模型?说白了,四轮车的运动分析太复杂了。四个轮子各有转向角,还有侧偏、滑移,算起来头大。在实际工程中,我们通常做这样一个假设:车辆低速行驶,轮胎没有侧偏。这时候,四轮车的行为就可以用自行车模型来近似。
自行车模型的核心思想:
把左右前轮合并成一个虚拟前轮,左右后轮合并成一个虚拟后轮。这个虚拟轮位于车辆中轴线上。
我个人的习惯是,先画一个简单的示意图:
- 车辆质心位于后轴前方L处
- 前轮转角为δ(就是我们控制的方向盘转角对应的前轮转角)
- 车辆航向角为θ
- 后轴中心点坐标为(x, y)
那么,车辆的运动方程可以写成:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L
其中v是后轴中心的速度,L是轴距。这个方程组看着简单,但它是整个路径跟踪控制的基础。我在做自动泊车项目时,就是靠这个模型做轨迹规划的。
重要提醒:自行车模型只适用于低速场景(通常< 5m/s)。高速时轮胎侧偏不可忽略,必须用动力学模型。我曾经在高速避障测试中吃过这个亏,模型预测和实际偏差很大,差点撞上锥桶。
3.2 阿克曼转向几何:让四个轮子各司其职
自行车模型假设前轮只有一个转角,但实际车辆有左右两个前轮。如果让它们转同样的角度,转弯时内侧轮和外侧轮会打架——内侧轮要转小弯,外侧轮要转大弯。
阿克曼转向几何就是解决这个问题的。它的核心原则:所有车轮的转向中心交于一点。
具体来说:
- 内侧前轮转角δ_i 大于外侧前轮转角δ_o
- 两者满足关系:cot(δ_o) - cot(δ_i) = B / L
- 其中B是轮距,L是轴距
嗯,这里要注意,实际车辆的转向机构(梯形臂)只能近似满足阿克曼几何。我在标定某款SUV时发现,大转角时误差能达到3度以上。所以做精确控制时,最好查一下实车的转向特性曲线。
工程小技巧:如果你用自行车模型做控制,前轮转角δ通常取内外轮转角的平均值。这样虽然不完美,但在大多数场景下够用了。我习惯在仿真中加一个阿克曼误差模型,看看控制器的鲁棒性。
3.3 模型离散化方法:从连续到离散
我们的控制器是数字的,跑在MCU或工控机上。所以连续的运动学方程必须离散化。常用的方法有三种:
| 方法 | 公式 | 精度 | 适用场景 |
|---|---|---|---|
| 前向欧拉 | x(k+1) = x(k) + Δt * v * cos(θ(k)) | O(Δt) | 快速原型,低精度要求 |
| 后向欧拉 | x(k+1) = x(k) + Δt * v * cos(θ(k+1)) | O(Δt) | 隐式求解,稳定性好 |
| 龙格-库塔(RK4) | 四步加权平均 | O(Δt⁴) | 高精度仿真,离线计算 |
我个人最常用的是前向欧拉法。为什么?因为它简单、计算量小,在10ms的控制周期下精度完全够用。你想想看,车辆运动本身就有延迟和噪声,模型误差0.1%和0.01%在实际中区别不大。
但如果你在做MPC(模型预测控制),我建议用RK4离散化。MPC对模型精度要求高,而且预测步长可能到2-3秒,欧拉法的累积误差会很大。
# Python示例:前向欧拉离散化
def kinematic_bicycle_model(state, control, dt, L):
x, y, theta = state
v, delta = control
x_next = x + v * np.cos(theta) * dt
y_next = y + v * np.sin(theta) * dt
theta_next = theta + v * np.tan(delta) / L * dt
return np.array([x_next, y_next, theta_next])
避坑指南:我曾经在实车测试中遇到一个问题——离散化步长和控制器周期不匹配。控制周期是20ms,但我用5ms的步长做离散化,结果模型预测和实际偏差越来越大。后来发现,离散化步长应该等于控制周期,或者至少是整数倍关系。
3.4 小结与工程建议
好了,我们来捋一捋今天的内容:
- 自行车模型把四轮简化为两轮,适用于低速场景
- 阿克曼几何保证内外轮转角协调,实际车辆只能近似实现
- 离散化方法选前向欧拉就够了,除非你做MPC
最后说一句,模型只是工具,不是真理。我在不同项目中发现,同样的模型在不同车辆上表现差异很大。所以拿到新车后,第一件事就是做模型标定——跑几个典型工况,把模型参数调准。这才是工程落地的关键。
下一章我们会讲如何基于这个运动学模型做路径跟踪控制,到时候会用到今天推导的方程。记得把代码跑一跑,有问题随时交流。