4、自行车模型(Bicycle Model):模型假设、推导过程、适用场景

各位同学,今天我们来聊聊自动驾驶里一个非常经典的运动学模型——自行车模型。说实话,我刚入行那会儿,觉得这玩意儿太简单了,不就是把四个轮子简化成两个嘛。后来在实际项目中吃过亏,才明白这个「简单」模型背后的门道有多深。

4.1 为什么叫「自行车模型」?

你想想看,一辆汽车有四个轮子,转向的时候左右轮转角还不一样。真要精确建模,那得考虑阿克曼转向几何、轮胎侧偏特性……太复杂了。但如果我们把左右轮合并成一个虚拟轮,放在前后轴中心线上,是不是就像一辆自行车了?

嗯,这就是自行车模型的核心思想。说白了,就是把四轮车辆简化成两轮模型。前轮代表转向轮,后轮代表驱动轮。我在做路径跟踪控制时,90%的场景都用这个模型,因为它够简单、够快。

4.2 模型假设

既然是简化模型,肯定有前提条件。我建议你记住这几点,否则用错了地方会出大问题:

  • 车辆在平坦路面上行驶——不考虑垂向运动,说白了就是忽略颠簸
  • 轮胎无侧偏——车轮速度方向与车轮朝向一致,没有打滑
  • 刚体假设——车身不变形,悬架压缩忽略不计
  • 低速行驶——一般适用于速度低于 5 m/s 的场景
  • 前轮转向——后轮不参与转向,只负责驱动
⚠️ 我曾经踩过的坑:有一次在高速场景(60 km/h)用自行车模型做轨迹预测,结果偏差大到离谱。后来才发现,高速时轮胎侧偏不可忽略,必须用动力学模型。所以记住——自行车模型只适合低速!

4.3 推导过程

好,我们开始推公式。别怕,其实很直观。先定义几个关键变量:

符号 含义 单位
(x, y) 后轴中心点坐标 m
θ 车辆航向角(与x轴夹角) rad
δ 前轮转角 rad
v 后轴中心速度 m/s
L 轴距(前后轴距离) m

推导的核心就一句话:后轴中心的速度方向始终与车身朝向一致。为什么?因为后轮没有转向,它只能沿着车身方向滚动。

所以后轴中心的运动方程是:

dx/dt = v * cos(θ)
dy/dt = v * sin(θ)

那航向角怎么变?这就要看前轮了。前轮转角 δ 会让车辆产生一个旋转。我记得在几何课上老师讲过——转弯半径 R 和轴距 L、前轮转角 δ 的关系是:

R = L / tan(δ)

角速度 ω 等于 v / R,所以:

dθ/dt = v / R = v * tan(δ) / L

把三个方程合在一起,就是完整的自行车模型:

dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L

💡 我个人习惯:在实际代码中,我会把控制量设为 (v, δ),然后用离散时间形式更新状态。比如用欧拉法:

x_next = x + v * cos(θ) * dt
y_next = y + v * sin(θ) * dt
θ_next = θ + v * tan(δ) / L * dt

dt 一般取 0.01~0.1 秒,看你的控制频率。

4.4 适用场景

搞清楚了推导,咱们聊聊什么时候用这个模型。我把它分成三类:

✅ 强烈推荐

  • 低速泊车——倒车入库、侧方停车,速度不超过 10 km/h
  • 园区无人车——校园、厂区、景区内的低速接驳
  • 路径规划中的运动学约束——比如 A* 或 RRT 中检查路径是否可执行

⚠️ 谨慎使用

  • 高速公路巡航——速度超过 30 km/h 时,轮胎侧偏开始明显
  • 急转弯——离心力大会导致侧偏,模型失效
  • 湿滑路面——轮胎抓地力不足,打滑现象不可忽略

❌ 绝对不要用

  • 漂移或极限操控——这时候轮胎完全处于非线性区
  • 越野路面——起伏、侧倾、弹跳,自行车模型完全无法描述

🔧 我的经验之谈:如果你不确定该不该用自行车模型,先问自己三个问题:

  1. 车速是否低于 5 m/s?
  2. 路面是否平坦干燥?
  3. 转向角是否小于 30°?

三个都答「是」,放心用。有一个「否」,建议换动力学模型。

4.5 一个实际例子

我在做自动泊车项目时,就用自行车模型做路径跟踪。控制目标是让车辆沿着规划好的曲线行驶。代码大概长这样:

def bicycle_model_update(state, control, dt, L):
    """
    state: [x, y, theta]
    control: [v, delta]
    """
    x, y, theta = state
    v, delta = control
    
    x_next = x + v * cos(theta) * dt
    y_next = y + v * sin(theta) * dt
    theta_next = theta + v * tan(delta) / L * dt
    
    return [x_next, y_next, theta_next]

你看,就这么几行。但效果出奇的好——在 5 km/h 的速度下,跟踪误差能控制在 5 cm 以内。嗯,这就是模型的力量:简单、高效、够用。

4.6 小结

自行车模型是自动驾驶运动学建模的基石。它虽然简单,但用对了地方就是一把利器。我个人建议:先学会用好它,再考虑更复杂的模型。因为很多问题,用自行车模型就能解决,没必要杀鸡用牛刀。

下一章我们会讲动力学模型,到时候你会看到,当速度提上去之后,事情就变得有趣多了。