车辆运动学模型:自行车模型推导、状态变量定义、控制输入定义
各位同学,咱们今天来聊聊路径跟踪里最基础、也最核心的一块——车辆运动学模型。说白了,就是怎么用数学描述一辆车是怎么动的。
我个人习惯,做控制之前,先把被控对象的“脾气”摸清楚。你想想看,连车怎么转弯、怎么加速都不懂,你设计的控制器能好用吗?
为什么是自行车模型?
真实车辆有四个轮子,转向系统也复杂。但咱们做路径跟踪控制,其实不需要那么精细。
我记得刚入行时,有个老工程师跟我说:“小伙子,控制器的精度,取决于你模型的复杂度,但更取决于你忽略了什么。” 这句话我琢磨了很久。
自行车模型,就是把四轮车辆简化成两轮模型。它假设:
- 车辆左右对称,左右轮可以合并成一个虚拟轮
- 前轮负责转向,后轮负责驱动(或制动)
- 车辆在平面上运动,不考虑侧倾、俯仰
这样做的好处很明显——模型简单,计算快,而且对于路径跟踪这种中低速场景,精度完全够用。
自行车模型的几何推导
咱们来看一张图,我手绘的SVG,你感受一下。
图中,后轮中心点 (x, y) 是车辆位置。φ 是航向角,δ 是前轮转向角,v 是后轮速度,L 是轴距。
根据几何关系,我们可以写出运动学方程:
dx/dt = v * cos(φ)
dy/dt = v * sin(φ)
dφ/dt = (v / L) * tan(δ)
这三个方程,就是自行车模型的精髓。它描述了车辆位置和航向角随时间的变化。
状态变量定义
有了模型,咱们得定义状态变量。说白了,就是控制器需要知道哪些量,才能做出决策。
我一般把状态变量分成两类:
- 车辆自身状态: 位置 (x, y)、航向角 φ、速度 v
- 路径跟踪误差: 横向误差 e_y、航向误差 e_φ
在路径跟踪中,我们更关心的是误差。因为控制目标就是让误差趋近于零。
举个例子,假设参考路径是一条直线,那么:
e_y = 车辆到参考路径的垂直距离
e_φ = 车辆航向角 - 参考路径方向角
状态向量通常写成:
X = [e_y, e_φ, ...]
嗯,这里要注意,不同文献对状态变量的定义可能不同。我个人习惯把横向误差和航向误差放在前面,因为LQR控制器直接对这些误差进行调节。
控制输入定义
控制输入,就是我们可以主动调节的量。在自行车模型中,通常有两个:
| 控制输入 | 符号 | 物理意义 | 实际执行器 |
|---|---|---|---|
| 前轮转向角 | δ | 控制车辆转弯 | 方向盘/转向电机 |
| 纵向加速度 | a | 控制车辆加减速 | 油门/刹车 |
在路径跟踪中,我们通常把速度 v 视为已知量(由上层规划给出),只把转向角 δ 作为控制输入。这样问题就简化了。
模型线性化
自行车模型是非线性的(有 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,具体看控制周期和计算能力。
模型验证
模型建好了,怎么验证对不对?我的做法是:
- 写一个简单的仿真程序,输入固定的转向角,看车辆轨迹是不是圆弧
- 对比自行车模型和真实车辆数据的差异
- 如果误差在可接受范围内,就认为模型可用
我记得有一次,仿真结果和实车数据对不上,查了半天发现是轴距参数写错了。所以,参数标定也很重要。
好了,关于自行车模型,咱们就聊到这里。模型是控制的基础,基础打牢了,后面的LQR设计才能事半功倍。