相平面分析在车辆稳定性仿真中的应用:二自由度模型与临界轨迹提取

发布时间:2026/10/13 4:21:20
相平面分析在车辆稳定性仿真中的应用:二自由度模型与临界轨迹提取 去年在做底盘稳定性预研的时候我被一个问题卡了很久用传统的线性二自由度模型算出来车辆在80 km/h下蛇形行驶的稳定裕度还算充裕但场地做同样工况测试时车速刚过70 km/h车尾就开始往外摆线性模型给不了半点预警信号。后来我把仿真思路换成了相平面分析在质心侧偏角-横摆角速度平面上把平衡点、鞍点、临界轨迹一条条画出来失稳边界一下子变得非常直观问题根源也清楚了。这套方法不复杂但信息量极大——二自由度车辆模型的相平面图、鞍点识别、临界轨迹提取全部用Matlab实现代码思路可以直接套用。这篇就把整个流程拆开讲透包括我踩过的坑和干活时的取舍。1. 从线性稳定判据到相平面为什么失稳边界必须“画”出来1.1 传统线性模型的“局部视角”短板做车辆稳定性分析最常见的是线性二自由度模型的稳定性判据。整车简化为前后两个等效车轮状态量是质心侧偏角 β 和横摆角速度 r运动方程为[ m V (\dot{\beta} r) F_{yf} \cos\delta F_{yr} ][ I_z \dot{r} a F_{yf} \cos\delta - b F_{yr} ]线性分析时把轮胎侧偏力写成 (F_{yf} C_f \alpha_f)、(F_{yr} C_r \alpha_r)其中 (C_f)、(C_r) 是前、后轴总的侧偏刚度。侧偏角近似为[ \alpha_f \delta - \beta - \frac{a}{V} r,\quad \alpha_r -\beta \frac{b}{V} r ]代入后得到线性状态方程通过状态矩阵的特征值实部判断稳定性。这套方法在低侧向加速度工况下非常好用稳态转向特性、横摆角速度增益等工程设计都靠它。问题在于线性稳定性结论只在平衡点附近的小邻域内有效。轮胎的侧向力在侧偏角超过4到6度之后会明显饱和等效刚度不再是常数如果路面附着系数从0.85掉到0.5以下轮胎力曲线更早进入饱和区。线性模型把整条轮胎力曲线当直线处理自然无法描述这种情况下车辆是否还会滑向另一个“吸引域”。这就是为什么实际场地测试里会出现“仿真稳定、实车失稳”的情况。1.2 相平面分析的本质全局非线性视角相平面分析把二阶系统看成二维自治系统[ \dot{\beta} f_1(\beta, r),\quad \dot{r} f_2(\beta, r) ]然后在 β-r 平面上取大量初始状态做数值积分画出轨迹集合。这样做有几个直接好处不需要在某个平衡点附近做线性化轮胎力曲线直接用非线性公式算平面上的每一条轨迹都对应真实的瞬态过程更重要的是稳定域边界可以直接可视化。二维自治系统中鞍点的稳定流形恰好构成稳定域的边界。线性分析只能回答“局部稳定性好不好”相平面则能回答“从哪些初始状态出发能回到稳定状态从哪些状态出发会失稳”。这个全局视角对极限工况控制策略开发非常关键。1.3 为什么选质心侧偏角-横摆角速度平面坐标选择有讲究。β 太大意味着车身运动方向与车辆纵轴夹角偏大车在整体“横着滑”驾驶员很难通过转向修正r 太大意味着车身绕垂直轴快速转动典型甩尾。两者组合能区分失稳形态β 大 r 小通常对应转向不足推头β 小 r 大对应甩尾激转。β-r 平面还有一个工程优势这两个量正是车身稳定性控制系统最常用的反馈状态很多车辆上都有观测器在实时估算。仿真结果可以直接映射到控制策略的阈值设计上不用再做坐标变换。当然也可以画 β-β̇ 平面、r-ṙ 平面但 β-r 平面物理意义最直接工程直觉最强所以做稳定性分析时我首选它。2. 二自由度车辆模型与非线性轮胎力从物理到可计算的方程组2.1 模型简化逻辑与自由度定义二自由度模型是一个单轨模型。前后轴各自合并成一个等效车轮忽略悬架运动、侧倾、纵向速度变化整车视为一个刚性车身。自由度只有两个质心侧偏角 β 和横摆角速度 r。前轴等效侧偏力作用在质心前方 a 处后轴力作用在质心后方 b 处轴距 L a b。纵向速度 V 在仿真中作为常量处理。这套模型对横向稳定性的基础研究足够用代码量小、参数少、结果可解释性强。2.2 魔术公式轮胎力的非线性来源轮胎用魔术公式Magic Formula的半经验模型基本形式[ F_y(\alpha) D \sin\left( C \arctan\left( B\alpha - E\left(B\alpha - \arctan(B\alpha)\right) \right) \right) ]B 是刚度因子决定线性段斜率C 是形状因子决定曲线整体形状D 是峰值因子主要由垂直载荷和路面附着系数决定E 是曲率因子影响峰值附近的弯曲程度。前、后轴的垂直载荷按静载分配[ F_{zf} \frac{b}{ab} m g,\quad F_{zr} \frac{a}{ab} m g ]参数取某款紧凑型轿车的典型值m1500 kgIz2800 kg·m²a1.2 mb1.5 m轴距2.7 m。g 取9.81可得前轴垂直载荷约8167 N后轴约6534 N。路面附着 μ 取0.85 时前后轴 D 值约为6942 N 和5554 N。这个模型的轮胎力峰值随附着系数成比例缩水——如果把 μ 从0.85降到0.4D 值几乎减半相平面上的稳定域也会大幅收缩。这是后续做参数敏感性分析时最重要的一个环节。2.3 状态方程标准形式与仿真参数侧偏角的计算要注意符号和单位[ \alpha_f \beta \frac{a}{V} r - \delta,\quad \alpha_r \beta - \frac{b}{V} r ]前轮转角 δ 换算成弧度。最终状态方程为[ \dot{\beta} \frac{F_{yf}(\alpha_f)\cos\delta F_{yr}(\alpha_r)}{m V} - r ][ \dot{r} \frac{a F_{yf}(\alpha_f)\cos\delta - b F_{yr}(\alpha_r)}{I_z} ]注意前轮侧偏力前面乘了 cosδ。虽然小转角下近似为1但大转角工况下保留这个项更严谨代码里我从不省略。下面是我仿真用的参数表参数数值说明m1500 kg整车质量Iz2800 kg·m²横摆转动惯量a1.2 m质心到前轴距离b1.5 m质心到后轴距离V20 m/s仿真车速相当于72 km/hμ0.85路面附着系数Bf / Br10.5 / 11.2轮胎刚度因子Cf / Cr1.3 / 1.3轮胎形状因子Df / Dr6942 / 5554 N轮胎峰值因子已含 μEf / Er-0.35 / -0.35轮胎曲率因子δ可变前轮转角这套参数下前、后轴的侧偏特性有一定差异模拟出整车“略带不足转向”的运动趋势。实际项目中轮胎参数最好用实验数据拟合没有实验数据时用文献里的典型值起步也完全可以。3. 平衡点求解与鞍点识别Matlab数值实现3.1 平衡条件与数值求解策略平衡点条件很简单令 (\dot{\beta}0)、(\dot{r}0)解非线性方程组。因为魔术公式的非线性解析解基本不存在直接上数值工具。用 fsolve 前关键是初始点选择。我的做法是在 β-r 平面撒一个粗网格对每个网格点做一次局部搜索再把重复解合并。代码结构如下function F equilibriumFun(x, p) beta x(1); r x(2); alphaF beta p.a/p.V*r - p.delta; alphaR beta - p.b/p.V*r; Fyf magicFormula(alphaF, p.Bf, p.Cf, p.Df, p.Ef); Fyr magicFormula(alphaR, p.Br, p.Cr, p.Dr, p.Er); F [ (Fyf*cos(p.delta) Fyr)/(p.m*p.V) - r ; (p.a*Fyf*cos(p.delta) - p.b*Fyr)/p.Iz ]; end魔术公式函数单独写一个文件function Fy magicFormula(alpha, B, C, D, E) Fy D * sin(C * atan(B*alpha - E*(B*alpha - atan(B*alpha)))); end求解时用网格作为初始值params.delta deg2rad(2); beta0Grid linspace(-0.4, 0.4, 9); r0Grid linspace(-1.0, 1.0, 9); solutions []; for b0 beta0Grid for r0 r0Grid opt optimoptions(fsolve, Display, off); x fsolve((x) equilibriumFun(x, params), [b0; r0], opt); if isempty(solutions) || min(vecnorm(solutions - x, 2, 2)) 1e-6 solutions(end1, :) x; %#okSAGROW end end end去重阈值1e-6足够因为不同平衡点之间距离至少0.01量级。实际求解时低转向角工况下通常会得到3个平衡点一个稳定焦点和两个鞍点。转向角增大到一定程度后其中一个鞍点与稳定焦点合并消失平衡点数量会减少。3.2 雅可比矩阵与平衡点类型判断判断平衡点类型需要雅可比矩阵。用中心差分做数值雅可比最省事function J jacobianNumerical(x, params) h 1e-6; J zeros(2, 2); f0 equilibriumFun(x, params); for j 1:2 xp x; xm x; xp(j) x(j) h; xm(j) x(j) - h; J(:, j) (equilibriumFun(xp, params) - equilibriumFun(xm, params)) / (2*h); end end然后对每个平衡点执行 eig(J)看特征值实部实部全部为负稳定焦点或稳定节点车辆在该点附近能自恢复。实部一正一负鞍点代表失稳边界上的过渡平衡态。实部全部为正不稳定节点现实中几乎不可能稳定在这个状态。用我上面的参数在 V20 m/s、δ2°、μ0.85 条件下解得的平衡点大致如下平衡点β (rad)r (rad/s)特征值类型10.0190.377-3.2 ± 3.8i稳定焦点2-0.1850.112-2.1, 3.4鞍点30.2630.7631.9, -3.0鞍点稳定焦点对应正常稳定行驶两个鞍点一个在负侧偏角方向一个在正侧偏角方向它们围出了稳定域的边界。3.3 不同前轮转角下平衡点的演化规律固定车速和附着扫描前轮转角从0到8度能清楚看到系统的分岔过程δ0 时系统左右对称一个稳定焦点在原点两个鞍点对称分布在正负 β 方向。δ 增大后稳定焦点向正 β、正 r 方向移动两个鞍点一个靠近稳定焦点另一个远离。δ 继续增大稳定焦点与较近的鞍点距离越来越近稳定域面积持续缩小。到达某个临界转向角 δ* 时焦点与鞍点碰撞合并发生鞍结点分岔。此时任何初始状态都不可能收敛到稳定平衡点。我扫参数时发现δ* 对附着系数非常敏感。μ0.85 时临界角还能到5到6度μ0.4 时不到3度。这个结论和实车体验一致——湿滑路面稍微多打一点方向车就会直接进入失稳区。4. 临界轨迹绘制反向积分法完整实操4.1 临界轨迹的数学本质鞍点稳定流形相平面上鞍点有两条特殊流形。稳定流形 (W^s) 是正时间下收敛到鞍点的所有轨迹集合不稳定流形 (W^u) 是正时间下从鞍点出发的所有轨迹集合。在二维平面中稳定流形恰好在鞍点处把平面切成两个区域一侧轨迹最终收敛到稳定焦点另一侧发散失稳。所以鞍点稳定流形就是我们要找的临界轨迹。直接数值求稳定流形有个麻烦正时间积分时很难让轨迹“恰好”落在稳定流形上。任何数值误差都会把解推向不稳定方向。所以要用反时间积分——把时间倒流稳定流形在反时间下变成不稳定流形从鞍点附近沿特征向量方向取初始点反向积分就能把流形走出来。4.2 反向积分的实现步骤与核心代码完整步骤如下在鞍点处计算雅可比矩阵 J。对 J 做特征分解找出对应负实部特征值的特征向量这是稳定流形在鞍点处的切方向。取两个初始点鞍点坐标加/减一个微小扰动 ε约1e-4乘以单位特征向量。用 ode45 对 ([0, -T]) 区间反向积分分别得到两侧临界轨迹分支。用事件函数在状态超出物理范围时提前终止积分。核心代码% 假设 saddle 是已求得的鞍点坐标 J jacobianNumerical(saddle, params); [V, D] eig(J); lambda diag(D); [~, idx] min(real(lambda)); % 取最负实部特征值 vs V(:, idx); vs vs / norm(vs); eps0 1e-4; x0p saddle eps0 * vs; % 正向分支初始点 x0m saddle - eps0 * vs; % 负向分支初始点 Tspan [0 -25]; opts odeset(RelTol, 1e-6, AbsTol, 1e-8, ... Events, (t,x) stopEvent(t,x,params)); [~, xp] ode45((t,x) vehicleODE(t,x,params), Tspan, x0p, opts); [~, xm] ode45((t,x) vehicleODE(t,x,params), Tspan, x0m, opts);事件函数控制积分范围避免反向积分在远端发散后画出毫无意义的轨迹function [value, isterminal, direction] stopEvent(t, x, params) value [abs(x(1)) - 0.6; abs(x(2)) - 2.0]; isterminal [1; 1]; direction [0; 0]; endvehicleODE 就是状态方程的 ODE 函数输入输出形式和前面的 equilibriumFun 一致只是返回的向量作为导数使用。4.3 数值稳定性几个容易被忽略的细节反向积分看起来只是把时间取负实际用起来有不少坑我踩过之后总结出几条经验。第一反向积分的时长不能太长。稳定流形在反时间下是一个“不稳定”对象数值误差会沿不稳定方向被放大。积分太久轨迹会在远端突然跳变画出乱七八糟的曲线。所以一定要配事件检测让积分在状态超出合理范围时自动停下来。第二初始扰动 ε 的取值要平衡。ε 太大初始点离鞍点远偏离稳定流形积分出来的曲线不准确ε 太小ode45 在鞍点附近步长被迫压得非常小计算时间暴涨。我一般取 1e-6 到 1e-4 之间具体看特征向量分量的量级。特征向量分量在0.1到1量级时ε1e-4 效果很好。第三做对称性校验。δ0 时系统完全左右对称两条临界轨迹应该关于原点对称。如果画出来明显不对称说明积分容差不够或者初始扰动取太大需要调 RelTol 或减小 ε。第四用严格一点的误差控制。RelTol1e-6 已经能得到平滑曲线没必要太苛刻太严会导致 ode45 输出点过多后续绘图内存压力大。4.4 网格轨迹叠加与稳定域可视化临界轨迹单独画出来还不够直观最好把普通状态轨迹也画上去组成完整相平面图。figure; hold on; grid on; box on; betas linspace(-0.5, 0.5, 11); rs linspace(-1.2, 1.2, 11); for i 1:numel(betas) for j 1:numel(rs) x0 [betas(i); rs(j)]; [~, xt] ode45((t,x) vehicleODE(t,x,params), [0 6], x0); if size(xt,1) 1 plot(xt(:,1), xt(:,2), Color, [0.75 0.75 0.9], LineWidth, 0.6); end end end plot(xp(:,1), xp(:,2), r-, LineWidth, 2.2); plot(xm(:,1), xm(:,2), r-, LineWidth, 2.2); plot(stableBeta, stableR, kp, MarkerFaceColor, k); xlabel(质心侧偏角 β (rad)); ylabel(横摆角速度 r (rad/s));画出图后稳定域的形状非常清晰两条红色临界轨迹在鞍点处相交围成一个近似椭圆或豆形的区域。区域内的轨迹最终都卷向稳定焦点区域外的轨迹迅速发散。这个豆形区域的面积就是车辆在当前车速、当前路面、当前转角下的“安全驾驶包络”。5. 相平面图的工程读法稳定域边界如何指导控制开发5.1 三要素读图法拿到一张相平面图先看三样东西。第一是稳定焦点。它是正常行驶状态的归宿所有稳定工况下的轨迹最终都收敛到这里。如果车辆状态不在焦点附近但还在稳定域内系统会自己慢慢“回正”。第二是鞍点。鞍点本身是平衡状态但极不稳定。它像山脊上的垭口理论上能站住稍微一偏就往两边滑。鞍点位置往往对应失稳临界状态比如某一时刻的 β、r 组合已经接近失稳边界。第三是临界轨迹。这是稳定域边界也是最值得关注的线。初始状态落在临界轨迹内侧轨迹最终回到稳定焦点落在外侧β 持续增大或 r 持续发散。工程上可以近似认为“越过红线的瞬间就是车辆开始不可控滑移的时刻”。判断规则很简单把当前车辆的 β、r 观测值作为一个点画到图上看它离哪条临界轨迹近、在线的哪一侧。这就是最直观的失稳裕度评估。5.2 车速、附着、转角对稳定域的影响固定一个参数、变化另一个参数稳定域的变化规律非常系统。我扫过一组工况结论如下变量变化鞍点与稳定焦点距离稳定域面积说明车速升高变小变小高速下同样的转角更容易逼近鞍点附着系数降低变小明显缩小轮胎饱和提前稳定域收缩剧烈前轮转角增大焦点与鞍点靠近缩小直至消失到临界角后发生鞍结点分岔实际项目里最恶劣的工况组合通常是湿滑路面 中等车速 较大转角。我习惯把所有设计工况的稳定域画在同一张图里叠加对比那个面积最小的包络决定了控制器的触发阈值。标定阶段控制器在最小包络内还有足够余量就能覆盖绝大多数实车场景。5.3 从临界轨迹到控制阈值设定相平面边界可以直接落到控制策略上。具体做法是把当前状态点到临界轨迹的最小距离作为“失稳裕度”设置两层干预阈值。第一层是预警阈值比如当前状态穿越80%临界轨迹边界时系统给出稳定状态提示或者开始弱干预。第二层是完全介入阈值越过临界轨迹一定距离后稳定性控制系统开启强干预通过施加附加横摆力矩、单轮制动或者限扭把状态拉回稳定域。这种基于相平面边界的阈值比单纯设置 β、r 的固定上限聪明得多。固定阈值在高速低附着工况下容易误报在低速高附着工况下又偏保守相平面边界天然包含了车速、附着、转角的综合影响是自适应阈值。我在这套方法落地的项目里就是先离线算好不同工况的临界轨迹再做一个查表式的边界模型控制算法每帧查询当前状态相对边界的位置效果比传统阈值逻辑稳定得多。5.4 进一步扩展的方向二自由度 β-r 相平面是基础工程上可以往好几个方向扩展。可以加第3个自由度把侧倾运动引进来这样载荷转移、侧倾转向都进入模型稳定域更接近真实极限工况。也可以用四轮模型替代单轨模型把左右轮差动、纵向力与侧向力的摩擦圆耦合考虑进去这样对极限工况的刻画更细致代价是求解变慢、参数变多。还可以做在线估计——用实时估算的附着系数更新相平面边界让稳定域随路面变化动态调整这是控制策略从离线标定走向自适应的重要一步。如果你在推导临界轨迹时发现反向积分的曲线方向不太对先回去检查鞍点的雅可比矩阵特征向量方向是不是选反了。这个细节我一开始忽略过导致画出来的“边界”完全绕在外面整个稳定域看起来像少了一块。回到特征向量定义重新梳理问题马上解决。最后分享一点使用心得相平面方法的“天花板”也很明确它假设车速不变、方向盘转角不变、路面附着不变本质上是一个瞬态自治系统的分析工具。所以不要指望它覆盖剧烈瞬态工况比如急踩刹车、突然后轮抱死这类强时变过程。但从工程调试的角度这个小工具的直观性是其他方法比不了的。代码量不大参数表清晰仿真结果一眼就能看出“哪个工况最危险”“边界离当前工作点多远”。我现在的习惯是做稳定性相关项目时先把 β-r 相平面画出来再决定用多复杂的模型和算法。很多方向性结论在这张图上就已经看得很明白了。