车辆运动学模型:自行车模型推导、状态变量定义、控制输入定义

各位同学,咱们今天来聊聊路径跟踪里最基础、也最核心的一块——车辆运动学模型。说白了,就是怎么用数学描述一辆车是怎么动的。

我个人习惯,做控制之前,先把被控对象的“脾气”摸清楚。你想想看,连车怎么转弯、怎么加速都不懂,你设计的控制器能好用吗?

为什么是自行车模型?

真实车辆有四个轮子,转向系统也复杂。但咱们做路径跟踪控制,其实不需要那么精细。

我记得刚入行时,有个老工程师跟我说:“小伙子,控制器的精度,取决于你模型的复杂度,但更取决于你忽略了什么。” 这句话我琢磨了很久。

自行车模型,就是把四轮车辆简化成两轮模型。它假设:

  • 车辆左右对称,左右轮可以合并成一个虚拟轮
  • 前轮负责转向,后轮负责驱动(或制动)
  • 车辆在平面上运动,不考虑侧倾、俯仰

这样做的好处很明显——模型简单,计算快,而且对于路径跟踪这种中低速场景,精度完全够用。

核心思想: 用最少的参数,描述车辆运动的主要特征。

自行车模型的几何推导

咱们来看一张图,我手绘的SVG,你感受一下。

X Y δ φ v L(轴距) (x, y) 图例: 前轮转向角 δ 航向角 φ 速度 v 轴距 L

图中,后轮中心点 (x, y) 是车辆位置。φ 是航向角,δ 是前轮转向角,v 是后轮速度,L 是轴距。

根据几何关系,我们可以写出运动学方程:

dx/dt = v * cos(φ)
dy/dt = v * sin(φ)
dφ/dt = (v / L) * tan(δ)

这三个方程,就是自行车模型的精髓。它描述了车辆位置和航向角随时间的变化。

我的经验: 实际项目中,如果车辆速度很低(比如泊车场景),tan(δ) 可以近似为 δ,这样模型就线性化了,控制起来更方便。

状态变量定义

有了模型,咱们得定义状态变量。说白了,就是控制器需要知道哪些量,才能做出决策。

我一般把状态变量分成两类:

  • 车辆自身状态: 位置 (x, y)、航向角 φ、速度 v
  • 路径跟踪误差: 横向误差 e_y、航向误差 e_φ

在路径跟踪中,我们更关心的是误差。因为控制目标就是让误差趋近于零。

举个例子,假设参考路径是一条直线,那么:

e_y = 车辆到参考路径的垂直距离
e_φ = 车辆航向角 - 参考路径方向角

状态向量通常写成:

X = [e_y, e_φ, ...]

嗯,这里要注意,不同文献对状态变量的定义可能不同。我个人习惯把横向误差和航向误差放在前面,因为LQR控制器直接对这些误差进行调节。

控制输入定义

控制输入,就是我们可以主动调节的量。在自行车模型中,通常有两个:

控制输入 符号 物理意义 实际执行器
前轮转向角 δ 控制车辆转弯 方向盘/转向电机
纵向加速度 a 控制车辆加减速 油门/刹车

在路径跟踪中,我们通常把速度 v 视为已知量(由上层规划给出),只把转向角 δ 作为控制输入。这样问题就简化了。

避坑指南: 我曾经在一个项目中,直接把速度也当作控制量,结果LQR控制器在低速和高速下表现差异巨大。后来才意识到,速度变化会改变模型的动态特性。建议把速度作为时变参数,而不是控制输入。

模型线性化

自行车模型是非线性的(有 sin、cos、tan)。LQR控制器需要线性模型,所以我们要在某个工作点附近做线性化。

假设参考路径是直线,且车辆沿路径行驶,那么工作点就是:

e_y = 0, e_φ = 0, δ = 0

在这个点附近做泰勒展开,忽略高阶项,得到线性化模型:

d(e_y)/dt = v * e_φ
d(e_φ)/dt = (v / L) * δ

写成矩阵形式:

dX/dt = A * X + B * u

其中:
X = [e_y, e_φ]^T
u = [δ]
A = [[0, v], [0, 0]]
B = [[0], [v/L]]

这个线性模型,就是LQR控制器设计的基础。

关键点: 线性化后的模型只在工作点附近有效。如果车辆偏离路径太远,模型误差会变大,控制器可能失效。这时候就需要考虑非线性控制方法了。

离散化处理

实际控制器是数字的,运行在离散时间上。所以要把连续模型离散化。

常用的方法是前向欧拉法:

X(k+1) = X(k) + Ts * (A * X(k) + B * u(k))

整理得:
X(k+1) = (I + Ts * A) * X(k) + Ts * B * u(k)

其中 Ts 是采样时间。我一般取 10ms 到 50ms,具体看控制周期和计算能力。

小技巧: 采样时间不要太大,否则离散化误差会很明显。但也不要太小,否则计算负担重。我通常先取 20ms,然后根据实际效果微调。

模型验证

模型建好了,怎么验证对不对?我的做法是:

  1. 写一个简单的仿真程序,输入固定的转向角,看车辆轨迹是不是圆弧
  2. 对比自行车模型和真实车辆数据的差异
  3. 如果误差在可接受范围内,就认为模型可用

我记得有一次,仿真结果和实车数据对不上,查了半天发现是轴距参数写错了。所以,参数标定也很重要。

好了,关于自行车模型,咱们就聊到这里。模型是控制的基础,基础打牢了,后面的LQR设计才能事半功倍。


专注资料整理