2. 车辆运动学模型:自行车模型、阿克曼转向几何、运动学约束与推导
各位同学,咱们今天聊聊车辆运动学模型。说实话,这是底盘控制算法里最基础、也最容易被忽视的一块。我见过不少新人,一上来就怼动力学模型,结果连最基本的转向关系都没搞明白,最后仿真跑出来全是笑话。
运动学模型,说白了就是研究车怎么走的,不考虑力,只考虑几何关系。你想想看,低速泊车、路径规划,这些场景下轮胎滑移很小,运动学模型就够用了。我当年做自动泊车项目时,就是靠自行车模型搞定的,效果出奇的好。
2.1 自行车模型(Bicycle Model)
为什么叫自行车模型?因为把四轮车简化成了两轮车。前轮和后轮各一个,想象成自行车的前后轮就对了。这个简化很巧妙,它抓住了车辆转向的核心矛盾。
来看一下基本假设:
- 车辆在平坦路面上行驶,忽略垂向运动
- 左右车轮转角相同,合并为一个前轮
- 后轮固定,不能转向
- 轮胎侧偏角忽略不计(低速场景)
嗯,这里要注意:自行车模型只适用于低速、小转角的情况。我有个同事曾经在高速变道时用自行车模型做控制,结果车直接甩出去了——这就是没搞清楚适用范围。
模型的状态量通常包括:
- 车辆质心位置 (x, y)
- 航向角 ψ(车头指向与x轴夹角)
- 前轮转角 δ
- 车速 v(通常假设为后轮速度)
核心公式:
自行车模型的运动学方程其实就三个:
ẋ = v · cos(ψ)
ẏ = v · sin(ψ)
ψ̇ = v · tan(δ) / L
其中 L 是轴距,也就是前后轮之间的距离。
第三个公式很有意思。ψ̇ 是航向角变化率,也就是横摆角速度。它跟车速成正比,跟轴距成反比。轴距越长,转弯越稳——这就是为什么大客车转弯比小轿车稳的原因。
2.2 阿克曼转向几何(Ackermann Steering Geometry)
自行车模型假设左右前轮转角相同,但实际车辆不是这样的。你想想看,转弯时内侧车轮走的半径小,外侧车轮走的半径大。如果左右轮转角一样,轮胎就会打滑、磨损。
阿克曼转向几何就是为了解决这个问题。它的核心思想是:所有车轮的转向中心交于一点。
我的经验: 阿克曼几何在低速时效果很好,但高速时反而要减小阿克曼率。为什么?因为高速时轮胎侧偏角变大,需要补偿。我曾经在调校一款SUV时,把阿克曼率从100%降到70%,过弯稳定性明显提升。
阿克曼转向的几何关系:
cot(δ_o) - cot(δ_i) = B / L
其中:
- δ_o 是外侧前轮转角
- δ_i 是内侧前轮转角
- B 是轮距(左右轮之间的距离)
- L 是轴距
实际应用中,我们通常用等效前轮转角 δ 来近似:
δ ≈ (δ_i + δ_o) / 2
这个近似在转角不大时误差很小,我一般直接用这个值做控制。
2.3 运动学约束与推导
车辆运动学模型的核心约束是什么?说白了就是:车轮不能侧向滑动。这个约束叫「非完整约束」(Nonholonomic Constraint)。
数学表达是这样的:
ẋ · sin(ψ) - ẏ · cos(ψ) = 0
这个公式的意思是:车辆在垂直于车身方向的速度分量为零。你想想看,正常行驶的车,不会横着走对吧?
从自行车模型推导运动学方程,其实很简单:
- 后轮速度方向沿车身方向,所以后轮中心的速度就是 (v·cosψ, v·sinψ)
- 前轮速度方向沿前轮指向,与车身夹角为 δ
- 根据刚体运动学,前轮中心速度 = 后轮中心速度 + 旋转产生的速度
- 联立求解,就得到了上面的三个方程
避坑指南: 我曾经在推导时犯过一个低级错误——把航向角 ψ 和车辆滑移角 β 搞混了。航向角是车头指向,滑移角是速度方向与车头指向的夹角。在运动学模型中,我们假设 β=0,但实际车辆是有滑移角的。如果你用运动学模型做高速控制,记得要补偿这个误差。
2.4 实际应用中的注意事项
| 场景 | 适用模型 | 原因 |
|---|---|---|
| 自动泊车(<5km/h) | 自行车模型 | 轮胎滑移可忽略,计算简单 |
| 园区低速巡航(<20km/h) | 阿克曼几何 + 自行车模型 | 需要考虑内外轮转角差异 |
| 高速变道(>60km/h) | 动力学模型 | 轮胎侧偏角不可忽略 |
我个人习惯是:做路径规划时用自行车模型,做轨迹跟踪时用阿克曼几何修正。这样既保证了计算效率,又兼顾了精度。
最后说一句:运动学模型虽然简单,但它是理解车辆运动的基础。你把这个搞透了,后面学动力学、学控制,都会轻松很多。我建议你动手推导一遍,用Python或者MATLAB仿真一下,看看不同参数对转弯半径的影响。
嗯,今天就到这里。下一章我们讲轮胎模型,那是连接运动学和动力学的桥梁,很有意思。