3、车辆动力学模型:轮胎模型、侧偏刚度、二自由度动力学方程
各位工程师朋友,咱们今天聊聊车辆动力学模型。
说实话,搞路径跟踪控制,你绕不开这个东西。我见过不少新手,一上来就调LQR的Q矩阵和R矩阵,结果车在路上画龙。为什么?因为模型本身就不准。你想想看,一个错误的模型,配上再好的控制器,那也是白搭。
所以,咱们得先把车怎么动的这件事搞清楚。我个人习惯,从轮胎开始讲起。
3.1 轮胎模型:车与地面的唯一接触
轮胎是车辆和地面唯一的接触点。所有的力,加速、刹车、转向,最终都得通过轮胎传递。所以,轮胎模型是动力学的基础。
咱们做控制,最常用的就是魔术公式(Magic Formula)。这名字听着玄乎,其实就是一个非线性函数,用来描述轮胎侧向力、纵向力和回正力矩。
公式长这样:
F_y = D * sin(C * arctan(B * α - E * (B * α - arctan(B * α))))
其中:
- F_y:侧向力
- α:轮胎侧偏角
- B, C, D, E:刚度、形状、峰值、曲率系数
嗯,这里要注意。魔术公式参数多,拟合起来挺麻烦的。我在项目中遇到过,直接用厂家给的参数,结果仿真和实车对不上。后来发现,轮胎磨损、胎压变化,都会影响这些参数。所以,有条件的话,最好自己做一组参数标定。
核心观点: 魔术公式精度高,但计算量大。在LQR控制器里,我们通常不会直接用这个非线性模型,而是取其线性化结果——也就是侧偏刚度。
3.2 侧偏刚度:轮胎的“倔强”程度
侧偏刚度,说白了就是轮胎抵抗侧向滑动的能力。你想想看,方向盘一转,轮胎想往那边走,但地面不让它滑,于是轮胎就“拧着劲”。这个“拧着劲”的大小,就是侧偏刚度。
定义很简单:
C_α = ∂F_y / ∂α (在 α = 0 处)
单位是 N/rad 或 N/deg。
我刚开始做项目时,总觉得侧偏刚度是个常数。后来发现,根本不是这么回事。它受垂直载荷影响很大。车重、载重、甚至过弯时的载荷转移,都会改变侧偏刚度。
避坑指南: 我曾经在标定LQR时,前后轮用了相同的侧偏刚度。结果高速过弯时,车辆严重不足转向。后来查资料才发现,后轮载荷轻,侧偏刚度比前轮小很多。所以,前后轮的侧偏刚度一定要分开标定。
典型的侧偏刚度范围(乘用车):
| 工况 | 前轮侧偏刚度 (N/deg) | 后轮侧偏刚度 (N/deg) |
|---|---|---|
| 空载 | 800 - 1200 | 600 - 900 |
| 满载 | 1000 - 1500 | 900 - 1300 |
| 湿滑路面 | 400 - 700 | 300 - 500 |
3.3 二自由度动力学方程:自行车模型
好了,轮胎模型有了,侧偏刚度有了,接下来咱们把车简化一下。
二自由度模型,也叫“自行车模型”。为什么叫自行车?因为咱们把两个前轮合并成一个,两个后轮合并成一个。这样,车就变成了一个两轮自行车。
这个模型只考虑两个自由度:
- 横向运动(y方向)
- 横摆运动(绕z轴的旋转)
纵向速度假设为常数。嗯,这里要注意,这个假设在路径跟踪里是合理的,因为我们主要关心横向控制。
方程如下:
m * (v̇_y + v_x * ψ̇) = F_yf + F_yr
I_z * ψ̈ = l_f * F_yf - l_r * F_yr
其中:
- m:整车质量
- v_x, v_y:纵向、横向速度
- ψ̇:横摆角速度
- I_z:绕z轴的转动惯量
- l_f, l_r:质心到前、后轴的距离
- F_yf, F_yr:前、后轮侧向力
把轮胎的线性模型 F_y = C_α * α 代入,再经过小角度假设(sinθ≈θ, cosθ≈1),就能得到状态空间方程。
我个人习惯,把状态变量选为:
x = [e_y, e_ψ, ė_y, ė_ψ]^T
其中 e_y 是横向偏差,e_ψ 是航向偏差。这样,LQR的代价函数就能直接惩罚偏差了。
最终的状态空间形式:
ẋ = A * x + B * δ
y = C * x
其中 δ 是前轮转角(控制输入)。A矩阵和B矩阵的具体表达式,我建议你手推一遍,或者用符号计算工具验证一下。我在项目中吃过亏,矩阵符号搞反了,结果控制器输出反方向,车直接往路边冲。
3.4 知识体系结构图
为了让你更直观地理解本章的知识脉络,我画了一张图:
重要提醒: 二自由度模型虽然好用,但它有局限性。它假设轮胎工作在线性区,侧偏角不超过5度。如果你做的是极限工况(漂移、紧急避障),这个模型就不够用了。那时候你需要考虑三自由度甚至七自由度模型。
好了,这一章的内容就到这里。轮胎模型、侧偏刚度、二自由度方程,这三者是递进关系。轮胎模型给出力与滑移的关系,侧偏刚度将其线性化,二自由度方程则把整车运动描述出来。搞懂了这些,LQR控制器的设计就有了坚实的基础。
记住,模型是控制的上限。模型越准,控制效果的上限就越高。别急着调参数,先把模型搞扎实。