☰
相平面分析在车辆稳定性仿真中的应用:二自由度模型与临界轨迹提取
2026/10/13 4:21:19 网站建设 项目流程

去年在做底盘稳定性预研的时候,我被一个问题卡了很久:用传统的线性二自由度模型算出来,车辆在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}{a+b} m g,\quad F_{zr} = \frac{a}{a+b} m g ]

参数取某款紧凑型轿车的典型值:m=1500 kg,Iz=2800 kg·m²,a=1.2 m,b=1.5 m,轴距2.7 m。g 取9.81,可得前轴垂直载荷约8167 N,后轴约6534 N。路面附着 μ 取0.85 时,前后轴 D 值约为6942 N 和5554 N。

这个模型的轮胎力峰值随附着系数成比例缩水——如果把 μ 从0.85降到0.4,D 值几乎减半,相平面上的稳定域也会大幅收缩。这是后续做参数敏感性分析时最重要的一个环节。

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(end+1, :) = x'; %#ok<SAGROW> 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),看特征值实部:

  • 实部全部为负:稳定焦点或稳定节点,车辆在该点附近能自恢复。
  • 实部一正一负:鞍点,代表失稳边界上的过渡平衡态。
  • 实部全部为正:不稳定节点,现实中几乎不可能稳定在这个状态。

用我上面的参数,在 V=20 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.763+1.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 反向积分的实现步骤与核心代码

完整步骤如下:

  1. 在鞍点处计算雅可比矩阵 J。
  2. 对 J 做特征分解,找出对应负实部特征值的特征向量,这是稳定流形在鞍点处的切方向。
  3. 取两个初始点:鞍点坐标加/减一个微小扰动 ε(约1e-4)乘以单位特征向量。
  4. 用 ode45 对 ([0, -T]) 区间反向积分,分别得到两侧临界轨迹分支。
  5. 用事件函数在状态超出物理范围时提前终止积分。

核心代码:

% 假设 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]; end

vehicleODE 就是状态方程的 ODE 函数,输入输出形式和前面的 equilibriumFun 一致,只是返回的向量作为导数使用。

4.3 数值稳定性:几个容易被忽略的细节

反向积分看起来只是把时间取负,实际用起来有不少坑,我踩过之后总结出几条经验。

第一,反向积分的时长不能太长。稳定流形在反时间下是一个“不稳定”对象,数值误差会沿不稳定方向被放大。积分太久,轨迹会在远端突然跳变,画出乱七八糟的曲线。所以一定要配事件检测,让积分在状态超出合理范围时自动停下来。

第二,初始扰动 ε 的取值要平衡。ε 太大,初始点离鞍点远,偏离稳定流形,积分出来的曲线不准确;ε 太小,ode45 在鞍点附近步长被迫压得非常小,计算时间暴涨。我一般取 1e-6 到 1e-4 之间,具体看特征向量分量的量级。特征向量分量在0.1到1量级时,ε=1e-4 效果很好。

第三,做对称性校验。δ=0 时,系统完全左右对称,两条临界轨迹应该关于原点对称。如果画出来明显不对称,说明积分容差不够或者初始扰动取太大,需要调 RelTol 或减小 ε。

第四,用严格一点的误差控制。RelTol=1e-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 相平面画出来,再决定用多复杂的模型和算法。很多方向性结论,在这张图上就已经看得很明白了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询