3、车辆动力学模型:轮胎侧偏特性,二自由度动力学方程
好,咱们进入正题。这一章要聊的,是车辆控制里最核心的物理基础——车辆动力学模型。说白了,就是搞清楚车到底是怎么动的。
我个人习惯,做控制之前,先得把被控对象的脾气摸透。你想想看,连车怎么转向、怎么侧滑都不知道,你写的PID或者LQR再漂亮,那也是空中楼阁。我在项目中遇到过不少同学,上来就调参数,结果车在高速时完全失控,就是因为忽略了轮胎的侧偏特性。
3.1 轮胎侧偏特性:车为什么能转弯?
先问个问题:你打方向盘,车为什么就转弯了?
直觉告诉你,是前轮转了方向。但仔细想想,轮胎是橡胶的,它和地面接触时,并不是一个刚性的“轮子”在纯滚动。实际上,轮胎会发生形变。
当轮胎滚动方向与车轮平面方向不一致时,就会产生一个夹角,这个角叫做侧偏角。而地面会给轮胎一个侧向力,这个力就是侧偏力。侧偏力越大,车转弯就越“狠”。
核心结论:侧偏力与侧偏角在较小角度范围内近似成线性关系。这个比例系数,就是大名鼎鼎的侧偏刚度(Cornering Stiffness),记作 Cα。
公式很简单:
F_y = -C_α * α
其中 F_y 是侧偏力,α 是侧偏角。负号表示力的方向与侧偏角方向相反。
注意:这个线性关系只在侧偏角小于4-5度时成立。超过这个范围,轮胎就进入非线性区,侧偏力会饱和。我曾经在高速变道测试中,因为侧偏角过大导致车辆甩尾,差点出事。所以做控制时,一定要把侧偏角限制在合理范围内。
3.2 二自由度动力学方程:简化但不简单
完整的车辆模型有十几个自由度,但做车道保持控制,我们其实不需要那么复杂。二自由度模型,就是抓住了车辆横向运动的核心。
哪两个自由度?
- 横向运动:车辆沿y轴方向的移动
- 横摆运动:车辆绕z轴的旋转
假设车辆前轮转角 δ 很小,纵向速度 Vx 恒定,忽略空气阻力和悬架影响。嗯,这里要注意,这些假设在实际项目中不一定完全成立,但作为控制模型,已经足够用了。
二自由度动力学方程如下:
m * (v̇ + Vx * r) = F_yf + F_yr
Iz * ṙ = a * F_yf - b * F_yr
其中:
| 符号 | 含义 | 单位 |
|---|---|---|
| m | 车辆质量 | kg |
| Vx | 纵向速度 | m/s |
| v | 横向速度 | m/s |
| r | 横摆角速度 | rad/s |
| Fyf, Fyr | 前后轮侧偏力 | N |
| a, b | 质心到前后轴距离 | m |
| Iz | 横摆转动惯量 | kg·m² |
把轮胎侧偏力公式代入,就得到用状态空间表达的形式:
状态向量 x = [v, r]^T
控制输入 u = δ
状态方程:
v̇ = -(C_f + C_r)/(m*Vx) * v + [-(a*C_f - b*C_r)/(m*Vx) - Vx] * r + C_f/m * δ
ṙ = -(a*C_f - b*C_r)/(Iz*Vx) * v + [-(a²*C_f + b²*C_r)/(Iz*Vx)] * r + a*C_f/Iz * δ
我的经验:这个模型看起来复杂,但你在Python里用numpy矩阵运算,几行代码就能搞定。我建议你先把参数标定好,比如C_f和C_r,不同轮胎、不同胎压、不同路面,数值差异很大。我一般会在实车上做一次阶跃响应测试,用最小二乘法拟合出这些参数。
3.3 模型在车道保持中的应用
有了二自由度模型,我们就可以设计控制器了。但注意,这个模型描述的是车辆相对于地面的运动。而车道保持,需要的是车辆相对于车道中心线的偏差。
所以,我们还需要引入两个额外的状态:
- 横向偏差 ey:车辆质心到车道中心线的距离
- 航向偏差 eψ:车辆航向角与车道方向角的差值
这两个偏差的动力学方程是:
ė_y = v + Vx * e_ψ
ė_ψ = r - Vx * κ
其中 κ 是车道曲率。
把这两个偏差状态加到原来的二自由度模型里,就得到了一个四阶状态空间模型。这个模型,就是后面PID和LQR控制器的共同基础。
总结一下:
- 轮胎侧偏特性是车辆横向力的来源,侧偏刚度是关键参数
- 二自由度模型抓住了横向和横摆两个核心运动
- 加上车道偏差状态,就得到了完整的车道保持控制模型
说实话,这个模型我用了好多年。从最初的PID调参,到后来的LQR、MPC,底层都是这套东西。你把它吃透了,后面控制器的设计就是水到渠成的事。
下一章,我们就用这个模型,开始搭建PID控制器。到时候我会手把手带你写Python代码,在仿真环境里跑起来。你准备好了吗?