车辆运动学基础:自行车模型
做路径规划,绕不开一个经典模型——自行车模型。说白了,就是把四轮车简化成两轮车。你想想看,我们真正关心的是车怎么转弯、怎么前进,而不是四个轮子各自的转向角。所以,把左右前轮合并成一个虚拟前轮,左右后轮合并成一个虚拟后轮,这就是自行车模型的核心思想。
我个人习惯在项目初期先用这个模型做快速验证。为什么?因为它简单、直观,计算量小。我在做园区低速自动驾驶时,第一版路径规划就是基于自行车模型跑的,效果还不错。
模型推导
先看几个关键参数。我们定义:
- L:轴距(前后轮中心距离)
- δ:前轮转向角
- θ:车身航向角
- v:后轮中心速度
假设车辆在平面上运动,后轮没有侧滑。那么后轮中心的运动方向就是车身朝向。前轮呢?前轮的运动方向是转向角方向。
嗯,这里要注意:我们假设轮胎是刚性的,没有侧偏。这在低速场景下基本成立,但高速时就不太准了。我曾经在高速变道测试中吃过这个亏,后面会讲到。
推导过程其实不复杂。后轮中心位置记为 (x, y),那么:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L
第三个公式是关键。它告诉我们:航向角的变化率,取决于速度、转向角和轴距。轴距越长,转弯越迟钝——开过大车的人应该深有体会。
状态空间表示
把上面的微分方程写成状态空间形式,方便我们做控制和分析。状态向量选为:
X = [x, y, θ, δ]^T
控制输入是:
U = [v, ω_δ]^T
其中 ω_δ 是转向角变化率。为什么要把转向角也放进状态里?因为实际车辆的转向机构有响应延迟,不能瞬间跳变。我在做泊车路径规划时,如果不考虑这个延迟,生成的路径根本执行不了——方向盘还没转到目标角度,车已经开过头了。
完整的状态空间方程:
dx/dt = v * cos(θ)
dy/dt = v * sin(θ)
dθ/dt = v * tan(δ) / L
dδ/dt = ω_δ
这个模型有4个状态、2个输入。你可以把它离散化后用于MPC(模型预测控制)或者纯跟踪控制。
重要提示:当 δ 接近 ±90° 时,tan(δ) 会趋于无穷大。实际车辆的转向角通常限制在 ±30° 到 ±40° 之间,所以一般不会遇到这个问题。但如果你在做理论推导,要注意这个奇点。
前轮驱动 vs 后轮驱动
很多人以为自行车模型不分前驱后驱。其实不然。区别在于:
| 特性 | 前轮驱动 | 后轮驱动 |
|---|---|---|
| 驱动力位置 | 前轮 | 后轮 |
| 转向轮 | 前轮(驱动+转向) | 前轮(仅转向) |
| 运动学模型差异 | 前轮速度方向受驱动力影响 | 后轮速度方向始终沿车身朝向 |
| 低速操控性 | 转向不足倾向 | 转向过度倾向 |
我实际测试过两种车型。前驱车在低速转弯时,如果突然加速,车头会往外推——这就是转向不足。后驱车呢?大脚油门过弯,车尾会甩出去——转向过度。这两种特性在路径规划中必须考虑。
具体到运动学模型:
- 后轮驱动模型:就是我们上面推导的那个。后轮速度 v 是控制输入,前轮只负责转向。这是最常用的模型,因为大多数乘用车是前轮转向+后轮驱动(或四驱)。
- 前轮驱动模型:驱动力在前轮,所以前轮速度方向是驱动力和转向力的合成。模型会复杂一些,需要引入前轮滑移角。
我的经验:做路径规划时,除非你明确知道车辆是前驱且驱动力很大,否则直接用后轮驱动模型就够了。我在三个项目中都用的后驱模型,实车测试没问题。前驱的特殊性主要体现在动力学层面,运动学层面差异不大。
避坑指南
我曾经在一个项目中,直接用自行车模型做高速(60km/h以上)路径跟踪。结果呢?车辆在弯道里一直偏外,怎么调参数都不行。后来才发现,高速时轮胎侧偏不可忽略,必须用动力学模型。
所以我的建议是:
- 低速(<30km/h):自行车模型完全够用,比如泊车、园区低速物流。
- 中速(30-60km/h):可以加一个侧偏角补偿,或者用扩展运动学模型。
- 高速(>60km/h):老老实实用动力学模型,别偷懒。
另外,自行车模型假设路面是平坦的。如果你做的是越野路径规划,还得考虑坡度、侧倾等因素。嗯,那是另一个话题了。
警告:自行车模型不适用于倒车场景!倒车时,后轮变成前导轮,运动学特性完全反转。如果你要做倒车入库的路径规划,需要单独推导倒车模型,或者用双向运动学模型。
好了,这一章就到这里。自行车模型是路径规划的基石,理解透了,后面的内容会轻松很多。下一章我们聊聊如何用这个模型做路径生成——说白了,就是怎么让车从A点优雅地开到B点。