3. 被控对象建模与实时化准备

实时原型验证的第一步不是写控制器,而是把被控对象——也就是车辆本身——变成一个能在实时目标机上按固定步长稳定运行的模型。车辆动力学模型越精细,物理保真度越高,但计算量也越大;实时性要求则反过来逼迫我们做简化。本节围绕纵向、横向、垂向三个方向的模型简化方法,以及离散化、代数环处理和实时性约束展开,目标是让读者能够独立完成一个"可实时运行"的车辆模型准备流程。

一、三个方向的模型简化思路

纵向动力学关注车速与驱动力/制动力之间的关系。完整模型包含发动机扭矩特性、液力变矩器、变速器、轮胎滑移等环节,实时验证中通常简化为"等效驱动力—阻力—加速度"的一阶模型:

m·dv/dt = F_drive − F_brake − F_roll − F_air − m·g·sin(θ)
F_roll = m·g·f·cos(θ)
F_air  = 0.5·ρ·C_d·A·v²

其中 m 为整车质量,f 为滚动阻力系数,C_d·A 为风阻面积,θ 为道路坡度。示例参数可取 m=1600 kg、f=0.012、C_d·A=0.7 m²、ρ=1.225 kg/m³。这一简化保留了车速对驱动力的积分关系,足以支撑纵向速度控制、自适应巡航等算法的验证。

横向动力学常用自行车模型(单轨模型)。完整双轨模型需要四个轮胎的侧偏力,实时验证中通常简化为前后两轮、线性轮胎侧偏假设:

m·(v_y_dot + v_x·r) = F_yf + F_yr
I_z·r_dot = l_f·F_yf − l_r·F_yr
F_yf = C_f·α_f,  F_yr = C_r·α_r
α_f = δ − (v_y + l_f·r)/v_x
α_r = −(v_y − l_r·r)/v_x

示例参数可取 l_f=1.2 m、l_r=1.4 m、I_z=2500 kg·m²、C_f=80000 N/rad、C_r=90000 N/rad。线性轮胎假设在侧向加速度小于 0.4g 时误差可接受,超出后需引入非线性侧偏特性或魔术公式。

垂向动力学关注车身垂向、俯仰、侧倾三个自由度。实时验证中若只做平顺性控制,可简化为四分之一车模型(簧上质量、簧下质量、悬架弹簧与阻尼);若做整车姿态控制,则需七自由度模型。简化原则是:只保留与控制器目标直接相关的自由度,其余用等效刚度或阻尼替代。

车辆三向动力学模型简化与实时化链路 纵向动力学 完整:发动机+变矩器+变速器 +轮胎滑移 简化:等效驱动力一阶模型 状态量:v 参数:m, f, C_d·A 适用:速度控制、ACC 横向动力学 完整:双轨+四轮侧偏力 +非线性轮胎 简化:自行车模型+线性轮胎 状态量:v_y, r 参数:l_f, l_r, I_z, C_f, C_r 适用:路径跟踪、车道保持 垂向动力学 完整:七自由度整车 (垂向+俯仰+侧倾) 简化:四分之一车/半车模型 状态量:z_s, z_u 参数:m_s, m_u, k_s, c_s 适用:悬架控制、平顺性 离散化:连续模型 → 差分方程 前向欧拉 / 梯形法 / RK4,步长 T_s = 1 ms x[k+1] = A_d·x[k] + B_d·u[k] 代数环处理 单位延迟 z⁻¹ 打断 / 迭代求解 / 状态空间重构

二、离散化:从连续方程到可执行差分方程

实时目标机以固定步长 T_s 运行,模型必须离散化。最常用的是前向欧拉法,实现简单、计算量小,但要求 T_s 远小于系统最小时间常数。以纵向模型为例,离散化后:

v[k+1] = v[k] + T_s/m · (F_drive[k] − F_brake[k] − F_roll[k] − F_air[k])

若 T_s=1 ms、m=1600 kg,则每毫秒速度增量约为力除以 1.6×10⁶,数值稳定。横向模型状态量 v_y 和 r 的离散化同理,但需注意 A_d 矩阵的特征值是否落在单位圆内。对于刚性较强的垂向模型(悬架频率约 1.5 Hz,簧下质量频率约 12 Hz),前向欧拉在 T_s=1 ms 下仍稳定,但若 T_s 增大到 5 ms,簧下质量模态可能发散,此时应改用梯形法或 RK4。

离散化后应检查两点:一是 A_d 的谱半径小于 1;二是离散模型在典型输入下的响应与连续模型偏差在可接受范围内。可用阶跃输入对比连续与离散的速度响应,若 1 s 内偏差超过 2%,应减小步长或换用更高阶离散方法。

三、代数环:实时模型中最隐蔽的陷阱

代数环指模型中存在不经过任何状态变量的直接反馈回路。例如,轮胎侧偏力依赖侧偏角,侧偏角又依赖侧向速度,而侧向速度的导数依赖侧偏力——若在离散实现中把同一时刻的力与角直接互算,就形成代数环。实时系统中代数环会导致求解器无法在单步内完成计算,或产生数值振荡。

三种常用处理方式:第一,在反馈路径插入单位延迟 z⁻¹,把代数环打断为状态更新,代价是引入一步延迟,T_s=1 ms 时对控制影响通常可忽略;第二,对代数环内方程做解析求解,把隐式关系显式化,例如把 F_y 代入运动方程后直接解出 v_y_dot;第三,重构状态空间,把引起代数环的变量提升为状态量。实际工程中优先用单位延迟,因其改动最小、最易在 Simulink 中实现。

代数环不会在编译时报错,但会在实时运行时表现为输出抖动、步长超限或目标机 CPU 占用飙升。建议在模型编译后检查代数环报告,并在 T_s=1 ms 下用示波器观察关键状态量是否平滑。

四、实时性约束与模型裁剪

实时性约束的核心是:单步计算时间必须小于 T_s,且留有余量。工程经验是计算时间不超过 T_s 的 50%~60%。以 T_s=1 ms 为例,单步预算约 600 μs。若模型包含大量非线性查表、迭代求解或高维矩阵运算,很容易超限。

裁剪策略按优先级排列:第一,去掉与控制器目标无关的自由度,例如只做横向控制时可冻结垂向模型;第二,把高频动态用准静态关系替代,例如轮胎松弛长度用一阶滞后近似而非完整动态;第三,把查表数据降采样或改用多项式拟合;第四,把模型拆分为快慢两部分,快部分以 T_s 运行,慢部分以 5T_s 或 10T_s 运行。

下表给出一组示例性的实时性预算参考,实际数值需在目标机上实测:

模型部分状态量数典型单步耗时(示例)建议步长
纵向一阶模型1约 5 μs1 ms
横向自行车模型2约 15 μs1 ms
四分之一车垂向模型4约 25 μs1 ms
七自由度整车模型14约 120 μs1 ms 或 2 ms

完成简化、离散化和代数环处理后,应做一次"开环实时性验证":给模型施加已知的驱动力、转向角和路面输入,在目标机上运行 10 s,记录 CPU 占用、最大单步耗时和关键状态量曲线。若最大单步耗时低于预算的 60%,且状态量无异常跳变,则模型具备进入闭环验证的条件。否则应回到裁剪步骤,优先降低模型阶数或增大步长。

模型实时化不是一次性的工作。当控制器算法迭代、观测器加入或测试工况变化时,应重新评估计算负载。建议在模型顶层保留一个可切换的"简化等级"开关,便于在保真度与实时性之间快速权衡。