3. 车辆动力学模型:轮胎侧偏特性、侧偏刚度、二自由度动力学模型、状态空间方程
各位同学,欢迎来到横向控制的核心基础课。
说实话,搞自动驾驶这几年,我见过太多人一上来就调PID、搞MPC,结果车在路上画龙。为什么?说白了,就是没吃透车辆动力学模型。你连车怎么转向、轮胎怎么抓地都没搞明白,控制策略就是空中楼阁。
今天这一章,咱们就把地基打牢。我会从轮胎的脾气讲起,一步步推导出那个经典的二自由度模型,最后给你一个可以直接用的状态空间方程。
3.1 轮胎侧偏特性:轮胎的“脾气”
先问一个问题:你转动方向盘,车为什么能转弯?
很多人会回答:因为前轮偏转了。没错,但更深层的原因是——轮胎产生了侧向力。
轮胎不是刚性的。它是有弹性的橡胶。当车轮有一个侧偏角(车轮实际运动方向和车轮指向方向之间的夹角)时,轮胎接地面会发生变形,从而产生一个垂直于车轮平面的力,这就是侧偏力。
核心概念:侧偏角 α 是轮胎指向与速度方向的夹角。侧偏力 Fy 是轮胎抵抗侧滑的力。
我在项目里遇到过一件事:有一次标定车辆,发现高速变道时车辆响应特别迟钝。查了半天,发现是轮胎气压不对,导致侧偏特性变了。你看,轮胎的脾气直接影响控制效果。
轮胎侧偏特性有几个关键点:
- 线性区:侧偏角小的时候(通常小于5度),侧偏力和侧偏角近似成正比。这就是我们常说的“线性轮胎模型”。
- 饱和区:侧偏角大了,轮胎力不再线性增加,而是趋于饱和。这时候车就开始推头或甩尾了。
- 影响因素:垂直载荷、路面附着系数、轮胎气压、速度等都会影响侧偏特性。
3.2 侧偏刚度:轮胎的“硬气”
刚才说了线性区,那这个比例系数是多少?
就是侧偏刚度 C。定义很简单:
C = - ∂Fy / ∂α
注意前面有个负号。因为侧偏角为正时,侧偏力为负(坐标系定义不同,但习惯上这么写)。侧偏刚度越大,说明轮胎越“硬”,产生同样侧偏力需要的侧偏角越小。
我的经验:侧偏刚度不是常数。它随垂直载荷增加而增加,但到一定程度后会饱和。我建议你在做控制时,至少考虑载荷转移的影响,否则高速过弯时控制精度会打折扣。
一般乘用车的侧偏刚度在 50000-100000 N/rad 之间。前轮和后轮的侧偏刚度通常不一样,这会影响车辆的转向特性(不足转向、中性转向、过度转向)。
3.3 二自由度动力学模型:最简单的“车”
好了,有了轮胎模型,我们怎么描述整车的运动?
二自由度模型,说白了就是把车简化成两个自由度:
- 横向运动 y:车沿着y轴方向的移动
- 横摆运动 ψ:车绕z轴的转动
为什么叫二自由度?因为忽略了纵向运动(速度恒定)、垂向运动、侧倾运动等。你想想看,对于横向控制来说,我们最关心的是车能不能沿着目标路径走,所以这两个自由度足够了。
模型的假设条件:
- 车辆纵向速度恒定
- 前轮转角 δ 较小(小角度假设)
- 轮胎工作在线性区
- 忽略空气动力学、悬架等影响
注意:这个模型在低速大转角或极限工况下会失效。我曾经在冰雪路面上吃过亏,线性模型完全不准。所以一定要清楚模型的适用范围。
二自由度模型的运动方程长这样:
m * (v_dot + u * r) = Fyf + Fyr
Iz * r_dot = a * Fyf - b * Fyr
其中:
- m:整车质量
- Iz:横摆转动惯量
- u:纵向速度
- v:横向速度
- r:横摆角速度
- a, b:质心到前/后轴距离
- Fyf, Fyr:前/后轮侧偏力
把轮胎线性模型 Fyf = -Cf * αf, Fyr = -Cr * αr 代入,再考虑前后轮侧偏角的几何关系,就能得到完整的微分方程。
3.4 状态空间方程:控制器的“食材”
有了微分方程,我们得把它变成状态空间形式,才能用现代控制理论去设计控制器。
状态变量我一般选这三个:
- 横向速度 v
- 横摆角速度 r
- 横向位置偏差 e1
- 航向角偏差 e2
嗯,这里要注意,e1 和 e2 是相对于参考路径的偏差。最终的状态空间方程是:
d/dt [e1; e2_dot; e2; e2_dot] = A * [e1; e2_dot; e2; e2_dot] + B * δ
矩阵 A 和 B 的具体形式我就不手写了,直接给代码:
# 二自由度模型状态空间矩阵
def vehicle_model(vx, Cf, Cr, m, Iz, a, b):
# vx: 纵向速度
# Cf, Cr: 前后轮侧偏刚度
# m: 质量, Iz: 转动惯量
# a, b: 质心到前后轴距离
A = np.array([
[0, 1, 0, 0],
[0, -(Cf+Cr)/(m*vx), (Cf+Cr)/m, (a*Cf-b*Cr)/(m*vx)],
[0, 0, 0, 1],
[0, (a*Cf-b*Cr)/(Iz*vx), (a*Cf-b*Cr)/Iz, -(a**2*Cf+b**2*Cr)/(Iz*vx)]
])
B = np.array([
[0],
[Cf/m],
[0],
[a*Cf/Iz]
])
return A, B
避坑指南:我曾经在实车测试时发现,状态空间模型在低速时(比如5km/h以下)数值会变得很不稳定。因为分母上有 vx,速度趋近于0时矩阵会奇异。我的建议是:低速时用运动学模型,高速时再用动力学模型。
3.5 知识体系总览
为了让你更直观地理解这一章的知识结构,我画了一张图:
这张图把整个逻辑串起来了:从轮胎的物理特性出发,提取出侧偏刚度这个关键参数,然后建立二自由度简化模型,最后转化成控制器可以直接用的状态空间方程。每一步都有它的物理意义和工程价值。
好了,这一章的内容就到这里。记住,模型是控制的基础。你花时间把模型搞透了,后面设计控制器就是水到渠成的事。