第一章:车辆动力学基础
各位同学好,我是老张。今天咱们聊聊车辆动力学基础。说实话,这章是整个控制算法设计的根基。你想想看,连车怎么动都搞不清楚,还谈什么控制?
我在做ADAS项目时,就吃过这个亏。一开始觉得动力学模型差不多就行,结果实车测试时,控制效果一塌糊涂。后来老老实实把基础补上,才把问题解决。所以,这一章咱们得认真过一遍。
1.1 车辆坐标系定义
搞车辆控制,第一件事就是定坐标系。我个人习惯用ISO标准坐标系,也就是大家常说的车辆坐标系。
- X轴:车辆前进方向为正。说白了,就是车头指向的方向。
- Y轴:车辆左侧为正。嗯,这里要注意,有些教材用右侧为正,但ISO标准是左侧。
- Z轴:垂直向上为正。这个一般没啥争议。
为什么要这么定义?因为后面所有的运动方程、控制律推导,都基于这个坐标系。你如果自己另搞一套,后面推导公式时很容易乱套。
重要提示:坐标系定义是基础中的基础。我建议你把这个坐标系画在纸上,贴在工位上。每次写代码前看一眼,能避免很多低级错误。
1.2 轮胎模型——魔术公式
轮胎模型,说白了就是描述轮胎和地面之间那点事儿。你想想看,车能加速、能转弯、能刹车,全靠轮胎和地面的摩擦力。所以轮胎模型准不准,直接决定了控制算法的上限。
魔术公式(Magic Formula)是Pacejka老爷子提出的。为什么叫魔术公式?因为它用一个公式就能拟合出轮胎在各种工况下的特性曲线,确实很神奇。
公式长这样:
Y(x) = D * sin(C * arctan(B * x - E * (B * x - arctan(B * x))))
其中:
- Y:输出量,可以是纵向力、侧向力或回正力矩
- x:输入量,可以是滑移率或侧偏角
- B:刚度因子,决定曲线初始斜率
- C:形状因子,决定曲线形状
- D:峰值因子,决定曲线最大值
- E:曲率因子,决定曲线顶部形状
我在项目中遇到过一个问题:直接用魔术公式算出来的力,和实际测试数据对不上。后来发现是参数没标定好。魔术公式的参数需要根据轮胎实测数据去拟合,不能随便用默认值。
个人经验:如果你手头没有轮胎实测数据,可以用CarSim或TireSim里的标准轮胎参数。但记住,那只是近似值,实车调试时一定要重新标定。
1.3 车辆纵向动力学
纵向动力学,就是研究车怎么加速、怎么减速。说白了,就是沿着X轴方向的运动。
纵向动力学方程:
m * a_x = F_xf + F_xr - F_resistance
其中:
- m:整车质量
- a_x:纵向加速度
- F_xf:前轮纵向力
- F_xr:后轮纵向力
- F_resistance:总阻力(包括滚动阻力、空气阻力、坡度阻力)
这里有个坑,我踩过。空气阻力是和速度平方成正比的。很多初学者把它当成常数,结果高速工况下控制误差特别大。你想想看,车速从60km/h到120km/h,空气阻力翻了4倍,能一样吗?
避坑指南:我曾经在ACC(自适应巡航)项目中,忽略了坡度阻力的影响。结果在山区道路上,控制效果时好时坏。后来加上坡度补偿,问题才解决。所以,纵向动力学模型一定要考虑坡度。
1.4 车辆横向动力学
横向动力学,研究的是车怎么转弯。这个比纵向复杂一些,因为涉及到侧偏、横摆等概念。
简化后的二自由度横向动力学方程:
m * v * (β_dot + r) = F_yf + F_yr
I_z * r_dot = a * F_yf - b * F_yr
其中:
- v:车速
- β:质心侧偏角
- r:横摆角速度
- F_yf, F_yr:前后轮侧向力
- a, b:质心到前后轴的距离
- I_z:横摆转动惯量
嗯,这里要注意。二自由度模型假设前轮转角很小,且忽略了悬架的影响。实际车辆在极限工况下,这个模型就不太准了。但作为控制算法设计的基础,它完全够用。
我记得有一次做车道保持控制,用二自由度模型设计控制器,仿真效果很好。但实车测试时,发现车辆在高速过弯时控制不稳定。后来排查发现,是轮胎侧偏刚度随载荷变化导致的。所以,模型参数一定要考虑工况变化。
1.5 纵向与横向的耦合
最后说一个容易被忽略的点:纵向和横向是耦合的。你想想看,急刹车时转弯,和匀速时转弯,车辆的响应能一样吗?
耦合主要体现在:
- 纵向加速度会影响轮胎的垂直载荷,进而影响侧向力
- 侧向加速度也会影响纵向力的传递
- 轮胎的摩擦椭圆(Friction Ellipse)限制了纵向力和侧向力的合力
我在做ESP(电子稳定程序)项目时,就深刻体会到了这一点。如果不考虑耦合,控制算法在极限工况下很容易失效。所以,高级的控制算法一定要考虑纵横向耦合。
核心总结:车辆动力学基础,说白了就是搞清楚车怎么动。坐标系是骨架,轮胎模型是肌肉,纵横向方程是神经。这三者缺一不可。后面章节的控制算法设计,都建立在这个基础之上。所以,这一章的内容,我建议你反复看,直到能闭着眼睛推导出来为止。
好了,第一章就到这里。下一章咱们聊聊控制算法设计的基本框架。有什么问题,欢迎随时交流。