2. 车辆运动学模型(一)

各位同学,欢迎来到横向控制算法的第一站。今天咱们聊聊车辆运动学模型,说白了就是研究车怎么动起来的几何关系。你想想看,一辆车在路上跑,它的位置、朝向、速度之间到底有什么内在联系?这就是我们要搞清楚的。

我个人习惯把运动学模型比作「骨架」。它不关心轮胎抓地力、不关心惯性力,只关心几何约束。嗯,这听起来可能有点抽象,但别急,我们一步步来。

1. 自行车模型假设

为什么叫「自行车模型」?因为我把四轮车简化成了两轮车。我在项目中遇到过很多次,直接用四轮模型做规划,计算量太大,实时性跟不上。后来发现,用自行车模型做前馈,再配合反馈修正,效果就很好。

具体做了哪些简化?看下面这张表:

假设条件 说明
忽略车辆宽度 左右轮合并为单轮,位于车辆中心线
前后轮各一个 前轮负责转向,后轮负责驱动/制动
刚体假设 车辆不发生形变,轴距固定
平面运动 不考虑俯仰、侧倾,只考虑水平面内的运动
无侧滑 车轮速度方向与车轮朝向一致
注意: 无侧滑假设在低速(< 5m/s)时基本成立。高速过弯时轮胎会侧偏,这时候运动学模型就不够用了,得用动力学模型。我曾经在高速匝道上吃过这个亏,模型预测的轨迹和实际偏差很大,后来加了侧偏角补偿才解决。

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,不就是角速度吗?

我的经验: 这个公式推导时,很多同学会纠结正负号。我建议你画个图,车辆左转时δ为正,ψ_dot也为正,这样符号就统一了。我在做实车测试时,每次都会先验证这个符号关系,确保方向盘左打和右打对应的航向角变化方向正确。

整理一下,完整的运动学方程就是:

Xg_dot = v * cos(ψ)
Yg_dot = v * sin(ψ)
ψ_dot = v * tan(δ) / L   // 注意这里用tan(δ)代替sin(δ),更精确

嗯,这里要注意,当δ接近±90°时,tan(δ)会趋于无穷大,但实际车辆前轮转角一般不超过±40°,所以没问题。

5. 知识体系总览

为了让你对整个章节有个全局认识,我画了张图:

车辆运动学模型知识体系 自行车模型假设 忽略宽度、无侧滑、刚体 坐标系定义 全局系、车辆系、航向角 运动学方程 位置、航向、速度关系 推导流程:几何约束 → 速度分解 → 旋转关系 → 微分方程 核心运动学方程 Ẋ = v·cos(ψ) | Ẏ = v·sin(ψ) | ψ̇ = v·tan(δ)/L 路径规划 前馈控制 状态预测

6. 避坑指南

最后,分享几个我踩过的坑:

  • 航向角初始化: 我曾经在GPS信号丢失后,航向角从0开始积分,结果车辆原地打转。后来加了磁力计辅助初始化才稳定。
  • 离散化误差: 运动学方程是连续的,但控制器是离散的。采样时间太大时,积分误差会累积。我一般用二阶龙格库塔法离散化,比欧拉法准不少。
  • 轴距参数: 不同车辆的轴距不同,甚至同一辆车满载和空载时轴距也有微小变化。建议做一次标定,别直接拿设计值用。

好了,这一章的内容就到这。运动学模型是横向控制的基石,搞懂了它,后面的纯跟踪、Stanley方法才能理解透彻。记住,模型是工具,不是真理。在低速、小转角场景下它很准,但别迷信它。