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 小结与工程建议

好了,我们来捋一捋今天的内容:

  1. 自行车模型把四轮简化为两轮,适用于低速场景
  2. 阿克曼几何保证内外轮转角协调,实际车辆只能近似实现
  3. 离散化方法选前向欧拉就够了,除非你做MPC

最后说一句,模型只是工具,不是真理。我在不同项目中发现,同样的模型在不同车辆上表现差异很大。所以拿到新车后,第一件事就是做模型标定——跑几个典型工况,把模型参数调准。这才是工程落地的关键。

下一章我们会讲如何基于这个运动学模型做路径跟踪控制,到时候会用到今天推导的方程。记得把代码跑一跑,有问题随时交流。