车辆运动学模型(一):自行车模型假设、车辆坐标系定义、运动学方程推导
各位同学,欢迎来到横向控制算法的第一站。今天咱们聊聊车辆运动学模型,说白了就是研究车怎么动起来的几何关系。你想想看,一辆车在路上跑,它的位置、朝向、速度之间到底有什么内在联系?这就是我们要搞清楚的。
我个人习惯把运动学模型比作「骨架」。它不关心轮胎抓地力、不关心惯性力,只关心几何约束。嗯,这听起来可能有点抽象,但别急,我们一步步来。
1. 自行车模型假设
为什么叫「自行车模型」?因为我把四轮车简化成了两轮车。我在项目中遇到过很多次,直接用四轮模型做规划,计算量太大,实时性跟不上。后来发现,用自行车模型做前馈,再配合反馈修正,效果就很好。
具体做了哪些简化?看下面这张表:
| 假设条件 | 说明 |
|---|---|
| 忽略车辆宽度 | 左右轮合并为单轮,位于车辆中心线 |
| 前后轮各一个 | 前轮负责转向,后轮负责驱动/制动 |
| 刚体假设 | 车辆不发生形变,轴距固定 |
| 平面运动 | 不考虑俯仰、侧倾,只考虑水平面内的运动 |
| 无侧滑 | 车轮速度方向与车轮朝向一致 |
3. 车辆坐标系定义
搞控制,坐标系是头等大事。我见过不少新手,坐标系搞反了,调了一整天代码都不知道错在哪。
我们采用国际标准ISO 8855定义的坐标系:
- 全局坐标系(Xg, Yg):固定在地面上,Xg指向正东,Yg指向正北。说白了就是地图坐标。
- 车辆坐标系(x, y):固连在车身上,x轴指向车头前方,y轴指向驾驶员左侧。
- 航向角 ψ:车辆x轴与全局Xg轴的夹角,逆时针为正。
- 前轮转角 δ:前轮与车辆x轴的夹角,左转为正。
核心关系: 车辆坐标系下的速度,可以通过旋转矩阵转换到全局坐标系。
全局速度 = R(ψ) × 车辆速度
其中 R(ψ) = [[cosψ, -sinψ], [sinψ, cosψ]]
4. 运动学方程推导
好,重头戏来了。我们推导车辆的位置、航向角、速度之间的关系。
先看后轮。根据无侧滑假设,后轮速度方向必须沿着后轮朝向。后轮朝向就是车辆x轴方向,所以:
Xg_dot = v * cos(ψ)
Yg_dot = v * sin(ψ)
再看前轮。前轮速度方向必须沿着前轮朝向,即与车辆x轴夹角为δ。前轮速度在车辆坐标系下的分量为:
v_x_f = v * cos(δ)
v_y_f = v * sin(δ)
这里有个关键点:前轮速度的y分量,会导致车辆绕后轮中心旋转。旋转角速度 ψ_dot 等于:
ψ_dot = (v * sin(δ)) / L
其中 L 是轴距。为什么会这样?你想想看,前轮横向速度 v*sin(δ) 除以轴距 L,不就是角速度吗?
整理一下,完整的运动学方程就是:
Xg_dot = v * cos(ψ)
Yg_dot = v * sin(ψ)
ψ_dot = v * tan(δ) / L // 注意这里用tan(δ)代替sin(δ),更精确
嗯,这里要注意,当δ接近±90°时,tan(δ)会趋于无穷大,但实际车辆前轮转角一般不超过±40°,所以没问题。
5. 知识体系总览
为了让你对整个章节有个全局认识,我画了张图:
6. 避坑指南
最后,分享几个我踩过的坑:
- 航向角初始化: 我曾经在GPS信号丢失后,航向角从0开始积分,结果车辆原地打转。后来加了磁力计辅助初始化才稳定。
- 离散化误差: 运动学方程是连续的,但控制器是离散的。采样时间太大时,积分误差会累积。我一般用二阶龙格库塔法离散化,比欧拉法准不少。
- 轴距参数: 不同车辆的轴距不同,甚至同一辆车满载和空载时轴距也有微小变化。建议做一次标定,别直接拿设计值用。
好了,这一章的内容就到这。运动学模型是横向控制的基石,搞懂了它,后面的纯跟踪、Stanley方法才能理解透彻。记住,模型是工具,不是真理。在低速、小转角场景下它很准,但别迷信它。