ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

车辆横向动力学建模:从运动学模型到Carsim联合仿真的工程实践

车辆横向动力学建模:从运动学模型到Carsim联合仿真的工程实践

先聊个实际场景:你在做底盘控制或者智能驾驶路径跟踪,控制器里那辆“车”到底用什么模型,这事从一开始就绕不开。用太简单的模型,怕控制效果不靠谱;用太复杂的模型,又怕实时性扛不住、参数标定工程量大到怀疑人生。我这些年试来试去,最终固定下来一套组合拳:低速场景用运动学模型快速验证,中高速控制律设计用线性二自由度模型,最后用 Carsim 这类高保真软件做闭环复验。这三者不是替换关系,而是明确的分工配合关系。这篇文章就把这套组合拳的建模思路、状态空间方程、参数标定方法、Carsim 联合仿真细节和常见坑全部讲透,做控制算法、仿真验证、实车预研的朋友都可以直接参考。

1. 三种模型的分工:各自解决什么问题

1.1 运动学模型:低速场景下的几何关系求解

运动学模型的本质是假设轮胎不发生侧偏,车轮速度方向永远和轮子朝向一致。它只关心“车往哪走”,不关心“力和力矩怎么把车推到这个方向”。典型形式就是那个自行车模型,把左右前轮合并成一个前轮、左右后轮合并成一个后轮,然后用几何关系直接算:

x_dot = V * cos(psi) y_dot = V * sin(psi) psi_dot = V / L * tan(delta)

这里 V 是车速,psi 是航向角,delta 是前轮转角,L 是轴距。这个模型没有质量、没有惯性、没有轮胎刚度这些物理参数,所以它特别适合做低速泊车、园区低速巡线这类工况。车速慢的时候轮胎侧偏角很小,几何关系占主导,运动学模型算出来的轨迹几乎和实车重合,而且计算量极小,在嵌入式的低成本 MCU 上跑都毫无压力。

但把它往高速场景挪就会出大问题。车速一上来,轮胎必须产生侧向力才能让车转弯,有侧向力就必然有侧偏角,轮子实际前进方向和轮子朝向不再一致。这时候纯几何模型预测的横摆角速度会明显偏高,用它设计的控制器在 60 km/h 以上往往表现为转向不足、跟踪超调。所以运动学模型不是被“替代”,而是它本来就有明确的工作边界。

1.2 线性二自由度模型:横向动力学解析的主力工具

线性二自由度模型是横向动力学里最经典的解析模型,把整车简化成两个自由度:侧向速度 v_y 和横摆角速度 r。它把轮胎侧向力假设成与侧偏角成线性关系,用前、后轴等效侧偏刚度来刻画,最终得到一个二阶线性状态空间方程。这个形式对控制设计极其友好,LQR、MPC、状态观测器、横摆角速度闭环控制,几乎都能直接把它拿来当预测模型或设计模型。

它比运动学模型高一层的地方在于,它包含了质心位置、车辆质量、横摆转动惯量、前后轴侧偏刚度这些真正影响车辆动态的参数,因此能解释车辆在中高速下的横摆响应、不足转向/过多转向趋势、稳态增益变化等现象。我自己的经验是,只要侧向加速度不超过 0.4g 左右、路面附着良好、前轮转角在小角度范围内,这个模型对真实车辆的逼近程度就足够工程使用了。

1.3 Carsim:高保真仿真与“标准答案”参照系

Carsim 属于多体动力学加半经验轮胎模型的高保真仿真软件,车辆参数远不止质量、轴距这几项,还包括悬架K特性、阻尼特性、轮胎魔术公式、载荷转移、转向系统传动比等一大堆细节。它能跑极限工况,比如大侧向加速度、湿滑路面、紧急避障,这些场景下线性二自由度模型已经严重失真,但 Carsim 可以给出一个接近实车的参考响应。

Carsim 不适合直接塞进嵌入式控制器,它的计算步长要很小、模型复杂度高、实时性差,但它非常适合做“离线标定的参照系”。工程上的常规做法是:先用 Carsim 里的示例车辆参数作为基准,在 Carsim 里布置阶跃转向或双移线工况,把响应曲线导出来当“真值”,再用同一套参数去调线性二自由度模型,让二自由度模型在相同工况下尽量贴近 Carsim 的输出。这一步做扎实了,后面做控制律仿真才有可信度。

2. 线性二自由度模型建模与参数计算

2.1 自由度选取与假设条件

二自由度模型的“二”指的是侧向速度 v_y 和横摆角速度 r 这两个状态,它是在一大堆假设下成立的简化模型:纵向速度 u 恒定不变,忽略俯仰、侧倾运动,认为轮胎工作在线性区域,忽略空气动力学影响,前轮转角是小角度,左右车轮的侧偏特性合并成前轴、后轴等效侧偏刚度。这些假设决定了模型的适用范围,不要指望它在极限工况下还能准确。

把自由度选成 v_y 和 r 的逻辑在于:车辆平面运动的基本形态就是“横着滑”加“绕质心转”,纵向速度已经被假设成恒定,剩下的横向动力学就由这两个量唯一描述。用质心侧偏角 beta 代替 v_y 也可以,因为 beta 约等于 v_y/u,很多文献里状态向量写作 [beta, r],两种形式本质一样,只是系数矩阵的写法不同。

2.2 状态空间方程推导

下面推导用的符号统一说明:m 为整车质量,Iz 为绕 z 轴的横摆转动惯量,a、b 分别为质心到前轴、后轴的距离,L=a+b 为轴距,Cf、Cr 分别为前轴、后轴总侧偏刚度,delta 为前轮转角,u 为纵向车速。

侧向力平衡方程是:

m * (v_dot + u * r) = Fyf + Fyr

横摆力矩平衡方程是:

Iz * r_dot = a * Fyf - b * Fyr

线性轮胎模型给出:

Fyf = -Cf * (v + a*r)/u + Cf * delta Fyr = -Cr * (v - b*r)/u

其中 (v + ar)/u 是前轮侧偏角线性化结果,(v - br)/u 是后轮侧偏角线性化结果。把轮胎力代入力平衡和力矩平衡,再整理成状态空间形式,得到:

d/dt [v_y] = [a11 a12] [v_y] + [b11] delta [r ] [a21 a22] [r ] + [b21]

其中:

a11 = -(Cf + Cr) / (m*u) a12 = -u - (a*Cf - b*Cr) / (m*u) a21 = -(a*Cf - b*Cr) / Iz a22 = -(a^2*Cf + b^2*Cr) / (Iz*u) b11 = Cf / m b21 = a*Cf / Iz

这里最容易困惑的是 a12 那项。它由两项组成:一是因为坐标系固连于车体,侧向加速度里除了 v_dot,还有 u*r 这个耦合项;二是因为前、后轴侧向力对 v_y 的依赖关系。这个耦合项也是为什么车速变化时,同一个前轮转角产生的横摆响应差异很大的根本原因。

2.3 侧偏刚度、转动惯量与质心位置的获取

建模时最头疼的不是列方程,而是把参数填准。以一辆中型乘用车为例,整车质量 m 大概 1545 kg,轴距 L 约 2.7 m,质心到前轴 a 约 1.1 m,到后轴 b 约 1.6 m,横摆转动惯量 Iz 在 2500 到 3500 kg·m² 这个量级。前轴总侧偏刚度 Cf 约在 80000 到 130000 N/rad,后轴 Cr 约在 80000 到 110000 N/rad,具体数值取决于轮胎型号和载荷。

这里有一个高频坑:Carsim 里如果给出的是单轮侧偏刚度,那前轴总刚度要乘 2,后轴也乘 2。很多人在标定阶段发现二自由度模型稳态增益和 Carsim 差了一倍,十有八九就是忘了这个“每轴两轮”的换算。转动惯量如果没有实测数据,可以通过经验公式估算,比如把车身质量近似成均匀分布杆,Iz 约等于 m*(a²+b²)/3,或者直接用 Carsim 示例车辆的数值作为初值,后面在瞬态响应对比里再微调。

3. Carsim 与 Simulink 联合仿真实操

3.1 车辆参数配置:把同一辆车喂给两种模型

要对比 Carsim 和二自由度模型,前提是“同一辆车”。Carsim 里先选定一个示例车型,把它的整车质量、轴距、质心位置记下来,填进二自由度模型。至于侧偏刚度,Carsim 的轮胎数据通常不会直接显示一个“总侧偏刚度”数字,需要根据轮胎侧向力曲线在零侧偏角附近的斜率来提取,或者直接把它当标定量来处理:先用一个合理初值,再用 Carsim 响应去拟合。

我自己习惯的做法是建一个参数表,把 m、a、b、Iz、Cf、Cr 全部列出来,标注来源,比如从 Carsim 读到的就写 Carsim 参数,估算的就写估算初值。这样标定的时候不会搞混,排查问题时也能快速定位是哪个参数引起的偏差。

3.2 接口配置与仿真步长设置

Carsim 与 Simulink 联调,核心是把 Carsim 模型编译成 Simulink 能调用的 S-Function 模块。在 Carsim 的 Simulation 界面选择与 Simulink 的接口,配置输入输出变量:输入通常用方向盘转角 STEER_SW,如果需要定速工况,还可以输入油门或制动;输出需要 Vx、Vy、横摆角速度 YawRate、侧向加速度 Ay,这些后面跟二自由度模型对比都用得上。

仿真步长的设置有个很关键的点:Carsim 内部解算器通常固定步长,Simulink 那边也建议用固定步长,比如 1 ms 或 2 ms。不要用变步长求解器,否则 S-Function 模块内部状态插值容易出现数值不稳定,表现为横摆角速度曲线莫名其妙地抖动或发散。如果只做离线对比,固定步长 1 ms 基本够用;后期把二自由度模型放到控制器里做实时仿真时,再把步长根据目标硬件放宽到 5 ms 甚至 10 ms 来看实时性。

3.3 典型工况设计与激励信号选择

标定模型和控制律最常用的三个工况:阶跃转向、双移线、正弦扫频。

阶跃转向用来做稳态增益和时间常数的辨识,操作方法是让车辆保持恒定车速,在一个短时间内把方向盘转角从 0 加到目标值,比如 80 km/h 下方向盘转角从 0 阶跃到 60 度,对应前轮转角约 3.75 度,然后记录横摆角速度和侧向加速度响应。注意阶跃不要做成理想冲击,给转向角加一个 0.1 秒左右的斜坡过渡,否则会激发出轮胎的非线性瞬态响应,影响辨识精度。

双移线工况更接近真实避障,Carsim 里可以直接配置路径,车辆通过预瞄模型跟踪路径,也可以手动设置方向盘转角序列。这个工况适合验证控制器的闭环跟踪能力,看横向误差峰值、横摆角速度超调。

正弦扫频工况则是给方向盘转角一个频率逐渐增加的正弦输入,用来获取系统的频域响应,做传递函数辨识和带宽分析。输入信号的幅值不能太大,保持在侧向加速度不超过 0.3g 的范围内,才能让被辨识对象处于二自由度模型能够描述的线性区域。

4. 三种模型仿真对比与差异归因

4.1 低速工况:三种模型接近,运动学够用

先看低速,比如 30 km/h 下做一个中等幅度转向。运动学模型给出的稳态横摆角速度约等于 V/L*tan(delta),二自由度模型因为考虑了轮胎侧偏,稳态值会比运动学模型低个 5% 到 10%,但差距不大。Carsim 因为有悬架运动学、转向系统迟滞等真实细节,响应会比二自由度模型再多一点延迟,但稳态值通常非常接近。

在这个速度区间,如果你的目标只是做泊车辅助或者园区低速巡线,直接用运动学模型就够了。它参数少、实时性好、控制律设计简单,没有必要引入复杂的动力学模型。我见过不少项目在低速段硬上二自由度模型,结果控制器设计复杂度上去了,性能却没提升多少,完全是自己给自己加戏。

4.2 中高速工况:差异从哪里来

把车速提高到 80 km/h,同样是阶跃转向,三种模型的差异会非常明显。运动学模型的稳态横摆角速度会明显偏高,因为真实车辆在高速转向时,轮胎需要很大的侧偏角才能产生足够的侧向力,这部分“侧偏滑移”导致车辆实际横摆角速度低于几何模型的预测值。

二自由度模型由于采用了线性轮胎假设,在小侧偏角范围内还能贴近 Carsim,但车速再高一点或者转角再大一点,侧向加速度超过 0.4g 之后,轮胎侧偏特性进入非线性区,载荷转移也不再可忽略,二自由度模型就会高估横摆角速度。Carsim 包含这些非线性效应,所以它的响应往往表现为更明显的不足转向趋势:横摆角速度增长变缓,进入稳态的时间变长,侧向加速度曲线出现饱和拐点。

理解这层差异,你再去调控制器就有方向了。如果控制律基于二自由度模型设计,在中高速极限工况下往往会觉得控制器过于激进,因为模型预测的响应比真实车辆更快。这时候要么在 MPC 的预测模型里加一个输出修正项,要么在控制器参数标定时用 Carsim 的响应曲线作为校准基准,而不是直接相信二自由度模型给出的名义增益。

4.3 模型选型决策表

| 模型类型 | 适用车速 | 精度水平 | 实时性 | 参数需求 | 典型用途 | | 运动学模型 | 低速(约 30 km/h 以下) | 几何近似,无轮胎侧偏 | 极高 | 轴距、车速 | 泊车、园区巡线、路径跟踪初版验证 | | 线性二自由度 | 中高速(侧向加速度 < 0.4g) | 线性轮胎假设下良好 | 高 | 质量、轴距、侧偏刚度、转动惯量 | LQR/MPC 控制律设计、状态观测器、工况分析 | | Carsim 离线仿真 | 全域,尤其极限工况 | 高保真非线性 | 差 | 大量车辆参数 | 离线标定、极限工况验证、控制律最终闭环测试 |

5. 实战中的常见问题与排查技巧

5.1 二自由度模型低速发散

二自由度状态方程里大量出现 1/u 项,车速趋近于 0 时这些项会爆炸,仿真直接发散。这不是代码写错了,而是模型本身的适用边界。解决办法有两个:一是给车速加下限,例如 u_min = 2 m/s,低于这个速度时把二自由度模型的计算结果直接置零或者切到运动学模型;二是在控制器里设计一个速度调度逻辑,低速段切运动学模型,高速段切二自由度模型,中间加一个过渡区间用权重融合。

我踩过的坑是调度逻辑只做了硬切换,切换点附近控制器输出跳变,车辆横摆角速度出现明显尖峰。后来改成在 2 到 5 m/s 的区间内做线性过渡,问题才消失。这个细节在纯仿真环境里不容易发现,一上实车或者高保真闭环仿真就会暴露出来。

5.2 Carsim 与二自由度稳态增益对不上

这是标定阶段最常遇到的困惑。同一辆车,同一个阶跃转向工况,Carsim 的稳态横摆角速度和二自由度模型对不上。排查顺序我建议固定成以下几步:先检查单位,Carsim 里方向盘转角用的是 deg,二自由度模型里 delta 必须是 rad,忘了换算直接差 57.3 倍;再检查侧偏刚度是否乘了 2;然后检查车速是否一致,二自由度模型用的是恒定纵向速度,Carsim 如果没开定速控制,车速在转向过程中会掉,导致稳态增益不一致。

如果这些都没问题,那就是侧偏刚度初值不准确。做法是在 Carsim 里把侧向加速度控制到 0.3g 以内,读取稳态横摆角速度和前轮转角,反推一个等效刚度,用这个等效刚度替代初值。反复迭代两三次,稳态误差可以压到 5% 以内。

5.3 单位、滤波与步长问题

| 现象 | 原因 | 处理方式 | | 横摆角速度曲线高频抖动 | Simulink 变步长与 Carsim 固定步长不匹配 | 统一用固定步长,推荐 1 ms 到 2 ms | | 稳态值差一个数量级 | 角度单位没换算,deg 当成 rad | 统一为 rad 或 SI 单位后再对比 | | 初始阶段瞬时冲击过大 | 阶跃输入给成了理想阶跃 | 加约 0.1 秒斜坡过渡,让激励更接近真实转向 | | Carsim 输出曲线有相位延迟 | 输出端默认开启滤波 | 在 Carsim 输出配置里关闭滤波,或在 Simulink 里用统一截止频率的低通滤波器再对比 | | 模型在高速段稳态误差重新增大 | 侧偏刚度标定时激励幅值过大,标到了非线性段 | 标定工况侧向加速度控制在 0.3g 以内,非线性区域交给 Carsim 做闭环验证 |

最后再分享一个小技巧:在做二自由度和 Carsim 对比时,不要只对比横摆角速度一条曲线,把侧向加速度和质心侧偏角一起拉出来看。我说的这个质心侧偏角,Carsim 输出里通常有,二自由度模型可以算 v_y/u。三组曲线放在同一张图上,它能帮你快速判断偏差到底出在线性轮胎假设上,还是出在参数标定上。如果稳态横摆角速度对上了,侧向加速度却对不上,大概率是整车质量和轴距的分配比例出了问题,这时候去调侧偏刚度反而越调越乱。这套对比方法我每做一个新项目都会先跑一遍,花不了多少时间,但能帮后面省下大量的排查功夫。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进