4、自行车模型(Bicycle Model):模型假设、推导过程、适用场景
各位同学,今天我们来聊聊自动驾驶里一个非常经典的运动学模型——自行车模型。说实话,我刚入行那会儿,觉得这玩意儿太简单了,不就是把四个轮子简化成两个嘛。后来在实际项目中吃过亏,才明白这个「简单」模型背后的门道有多深。
4.1 为什么叫「自行车模型」?
你想想看,一辆汽车有四个轮子,转向的时候左右轮转角还不一样。真要精确建模,那得考虑阿克曼转向几何、轮胎侧偏特性……太复杂了。但如果我们把左右轮合并成一个虚拟轮,放在前后轴中心线上,是不是就像一辆自行车了?
嗯,这就是自行车模型的核心思想。说白了,就是把四轮车辆简化成两轮模型。前轮代表转向轮,后轮代表驱动轮。我在做路径跟踪控制时,90%的场景都用这个模型,因为它够简单、够快。
4.2 模型假设
既然是简化模型,肯定有前提条件。我建议你记住这几点,否则用错了地方会出大问题:
- 车辆在平坦路面上行驶——不考虑垂向运动,说白了就是忽略颠簸
- 轮胎无侧偏——车轮速度方向与车轮朝向一致,没有打滑
- 刚体假设——车身不变形,悬架压缩忽略不计
- 低速行驶——一般适用于速度低于 5 m/s 的场景
- 前轮转向——后轮不参与转向,只负责驱动
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 时,轮胎侧偏开始明显
- 急转弯——离心力大会导致侧偏,模型失效
- 湿滑路面——轮胎抓地力不足,打滑现象不可忽略
❌ 绝对不要用
- 漂移或极限操控——这时候轮胎完全处于非线性区
- 越野路面——起伏、侧倾、弹跳,自行车模型完全无法描述
🔧 我的经验之谈:如果你不确定该不该用自行车模型,先问自己三个问题:
- 车速是否低于 5 m/s?
- 路面是否平坦干燥?
- 转向角是否小于 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 小结
自行车模型是自动驾驶运动学建模的基石。它虽然简单,但用对了地方就是一把利器。我个人建议:先学会用好它,再考虑更复杂的模型。因为很多问题,用自行车模型就能解决,没必要杀鸡用牛刀。
下一章我们会讲动力学模型,到时候你会看到,当速度提上去之后,事情就变得有趣多了。