资讯动态

车辆状态估计实战:七自由度模型下的UKF侧偏刚度辨识

发布时间:2026/10/22 9:12:16 来源:尧图企业网站定制
做车辆状态估计的项目最头疼的往往不是传感器选型也不是控制器调参而是你手里的模型能不能真实反映车辆行为。我前段时间在做一个车辆稳定性控制方向的课题需要在只有六轴IMU、四轮轮速和方向盘转角传感器的前提下实时估计前轴和后轴的等效侧偏刚度并把这些参数喂给质心侧偏角估计器。一开始项目组用的是线性二自由度模型加扩展卡尔曼滤波EKF低速小转向工况还行一旦进入中高速连续变道参数估计值就跟真值明显分层滤波器还有两次直接发散。后来我把内部模型换成七自由度车辆模型重新对比了 EKF 和无迹卡尔曼滤波UKF两条路线折腾了大约一个月才算把整套参数估计链路跑稳。这篇文章就把这段时间的完整思路整理出来为什么换七自由度模型、EKF 和 UKF 在工程实现上到底差在哪里、参数估计框架怎么设计、以及调试过程中那些普通文档里不会写的坑。适合正在做车辆状态估计、轮胎参数辨识、底盘稳定性控制或者相关仿真验证的朋友参考。1. 为什么偏偏选七自由度模型来做参数估计1.1 参数估计目标决定了模型复杂度先想清楚一件事我们最终要估的是轮胎侧偏刚度这是一个和轮胎力直接绑定的参数。侧偏刚度定义在前轮和后轮的侧偏力-侧偏角线性段斜率它和车辆横摆动力学强相关同时也受纵向车速、载荷转移和路面附着的影响。要把它从量测数据里“反推”出来模型里必须包含侧向力平衡和横摆力矩平衡这两条基本方程否则参数和量测之间搭不上桥。用线性二自由度模型虽然也能写出横摆响应与侧偏刚度的关系但它有一个先天限制把前后轴视为刚性连接的两个等效车轮完全忽略了车轮旋转动力学。在匀速稳态工况下这无所谓但在带制动、加速或者左右轮驱动力矩不一致的场景里轮速信息无法被利用纵向车速就只能靠积分一点小的加速度计偏置就会让车速估计飘走车速一飘轮胎侧偏角计算全错后面的参数估计全部作废。七自由度模型在二自由度的基础上多了四个车轮的旋转自由度等于把轮速信息正式纳入系统。轮速传感器又是车辆上成本最低、可靠性最高的传感器之一不用白不用。同时七自由度模型仍然没有引入悬架、侧倾、俯仰自由度状态维数控制在可接受范围适合嵌入实时估计器。这就形成了一个比较理想的组合动力学信息够用、传感器利用率高、模型复杂度适中。1.2 七自由度模型的动力学方程拆解七自由度模型里三个车体自由度分别是纵向速度、侧向速度和横摆角速度四个车轮自由度是四个车轮的旋转角速度。车体运动方程写出来大概是这样纵向力平衡$$m(\dot{v_x} - v_y \cdot r) (F_{xfl}F_{xfr})\cos\delta (F_{xrl}F_{xrr}) - (F_{yfl}F_{yfr})\sin\delta$$侧向力平衡$$m(\dot{v_y} v_x \cdot r) (F_{xfl}F_{xfr})\sin\delta (F_{yfl}F_{yfr})\cos\delta F_{yrl}F_{yrr}$$横摆力矩平衡$$I_z \dot{r} a[(F_{xfl}F_{xfr})\sin\delta (F_{yfl}F_{yfr})\cos\delta] - b(F_{yrl}F_{yrr}) \frac{t_f}{2}[(F_{xfr}-F_{xfl})\cos\delta (F_{yfr}-F_{yfl})\sin\delta] \frac{t_r}{2}(F_{xrr}-F_{xrl})$$四个车轮旋转动力学$$I_w \dot{\omega_i} T_{di} - F_{xi} R_w$$其中 $\delta$ 是前轮转角$a$ 和 $b$ 是质心到前轴、后轴的距离$t_f$、$t_r$ 是前后轮距$I_z$ 是横摆转动惯量$I_w$ 是车轮转动惯量$R_w$ 是车轮滚动半径。这套方程单独看并不复杂难点在后面轮胎力模型怎么给。轮胎侧偏力在前轮位置要先经过转向角分解。前轮侧偏角表达式为$$\alpha_f \delta - \arctan\left(\frac{v_y a r}{v_x}\right)$$后轮侧偏角$$\alpha_r -\arctan\left(\frac{v_y - b r}{v_x}\right)$$在中等侧偏角范围内侧偏力可以近似写成 $F_y C_\alpha \cdot \alpha$其中 $C_\alpha$ 就是我们待估的等效侧偏刚度。但在超过线性区以后需要引入饱和度修正。我这里的做法是先用线性模型做主体框架在侧偏角超过阈值后用分段线性或者带饱和的近似表达。这样做的好处是参数估计状态方程里依然能保留对 $C_\alpha$ 的线性敏感性梯度信息清晰EKF 的雅可比矩阵也不会因为强非线性而失真太严重。1.3 模型选型背后的工程权衡我列一张对比表方便你在方案评审时快速说明模型自由度需要传感器计算开销参数可观测性适用范围线性二自由度2车速、横摆角速度极低侧偏刚度基本可辨识但仅适合小侧偏角稳态/准稳态工况七自由度7轮速IMU转角中等侧偏刚度车速质心侧偏角联合可辨识中高速变道、制动转向十四自由度14悬架位移IMU轮速转角高可以辨识更多垂直力相关参数但计算量激增高精度仿真、极限工况二自由度模型的优势是解析性强甚至可以手推雅可比矩阵代码量少适合快速验证滤波算法是否正确。它的劣势就是我在前面说的没有纵向动力学和轮速信息车速是外部输入而不是状态一旦 GPS 信号丢失或者车速传感器噪声大整个估计器就失去锚点。十四自由度模型包含车身垂向跳动、俯仰、侧倾以及四个悬架自由度能更精确地描述载荷转移。但代价是模型参数增多需要准确的悬架刚度、阻尼、质心高度等参数而这些参数本身往往比侧偏刚度更不确定。用一个参数不准确的复杂模型去估计另一个参数很容易把误差转移到不可观测的方向上反而损害估计精度。七自由度刚好卡在“信息量足够”和“模型不确定度可控”的平衡点上。2. EKF 与 UKF 的原理差异和实战选型逻辑2.1 EKF 在七自由度模型上的实现代价扩展卡尔曼滤波的基本思路是把非线性系统在当前状态附近做一阶泰勒展开用雅可比矩阵替代线性卡尔曼滤波里的状态转移矩阵和量测矩阵。标准更新流程是预测步$$\hat{x}^-{k} f(\hat{x}{k-1}, u_{k-1})$$$$P^-k A_k P{k-1} A_k^T Q$$其中 $A_k \left.\frac{\partial f}{\partial x}\right|{\hat{x}{k-1}}$。更新步$$K_k P^-_k H_k^T (H_k P^-_k H_k^T R)^{-1}$$$$\hat{x}_k \hat{x}^-_k K_k (z_k - h(\hat{x}^-_k))$$问题就出在这个 $A_k$ 上。七自由度模型的非线性来源有轮胎力表达式、三角函数、以及纵向和侧向速度的耦合项。尤其当采用分段轮胎模型时分段点两侧的导数还不连续那个位置雅可比矩阵会产生跳变。EKF 的做法是把非线性函数在每步滤波时重新线性化这对强非线性问题会产生较大的截断误差。我一开始尝试用符号工具推导完整的雅可比矩阵方程有七八个每个状态都要对另外几个状态求偏导展开之后一页纸都放不下。就算推导出来了代码里实现也非常容易出维度错误调试时对着矩阵条目核对是一件极其消耗耐心的事。后面我改用数值差分计算雅可比矩阵代码简单了但引入了一个新的坑差分步长怎么选。步长太大截断误差大步长太小由于浮点舍入误差雅可比矩阵反而变得不稳定。EKF 还有另一个工程问题它假设噪声是高斯分布且通过一阶近似传播协方差。在车辆参数估计这种强非线性系统中状态分布经模型传播后往往出现明显偏态高斯假设失真最终导致滤波不一致——就是说滤波器自身给出的协方差矩阵和真实误差不一致于是增益计算出现偏差轻则收敛慢重则直接发散。2.2 UKF 的无迹变换为什么更适合这组方程UKF 的核心思想是对概率分布采样而不是对非线性函数线性化。给定当前状态均值 $\bar{x}$ 和协方差矩阵 $P$构造一组 Sigma 点$$\mathcal{X}_0 \bar{x}$$$$\mathcal{X}_i \bar{x} \left(\sqrt{(n\lambda)P}\right)_i, \quad i1,\dots,n$$$$\mathcal{X}_{in} \bar{x} - \left(\sqrt{(n\lambda)P}\right)_i, \quad i1,\dots,n$$这 $2n1$ 个 Sigma 点分别通过非线性状态方程传播得到传播后的点集再从点集恢复均值和协方差。整个过程不需要求解任何雅可比矩阵对非线性的适应能力远强于 EKF高斯分布假设下理论上可以达到三阶精度而 EKF 只有一阶精度。Sigma 点的参数 $\alpha$、$\beta$、$\kappa$ 取值有讲究。$\alpha$ 控制 Sigma 点离均值的远近通常取 $10^{-3}$ 到 $1$我实际取的是 $\alpha 0.01$这个值在车辆状态估计问题里表现比较稳。$\beta$ 在高斯分布假设下最优取 $2$。$\kappa$ 一般取 $0$ 或 $3-n$。采样点权重算出来之后一轮预测就是一整套 $2n1$ 次模型积分计算量大约是 EKF 的 2 到 4 倍但在现代嵌入式处理器或者实时仿真平台上完全跑得动。我们状态向量如果包含五个状态量纵向速度、侧向速度、横摆角速度、前轮侧偏刚度、后轮侧偏刚度那么 Sigma 点数量就是 $2\times5111$ 个。每一次递推要完成 11 次完整七自由度模型积分单步运行时间实测在普通笔记本的仿真环境里不到一毫秒。这为后续实车部署留出了充足余量。2.3 两种滤波器怎么选基于实际测试结论我在这套七自由度模型上做了多组对比试验。测试工况是正弦扫频转向加紧急变道组合传感器噪声按照低成本 MEMS IMU 和霍尔轮速传感器的典型水平注入。结论非常明确指标EKFUKF前轮刚度估计误差均方根8.3%4.1%后轮刚度估计误差均方根12.7%5.2%质心侧偏角估计误差峰值1.4 deg0.6 deg发散次数30次蒙特卡洛4次0次单步计算耗时0.3ms0.8msUKF 在这组测试里全面占优。EKF 的精度断裂主要发生在侧偏角进入非线性区段的工况线性化误差在这里被放大特别影响后轮刚度估计。结论是只要计算资源允许优先用 UKF 而不是 EKF。EKF 保留的价值在于代码量小、实时性强适合做功能安全冗余通道或者计算资源受限的低端控制器。如果你对两种滤波器都不熟我的建议是先用线性二自由度模型把 UKF 的代码调通再切换到七自由度模型排查问题时会省力很多。3. 参数估计框架设计与核心实现3.1 状态向量、量测向量和控制输入的设计思路参数估计最常见的做法是把待估参数增广到状态向量里变成联合估计。我选的状态向量是$$x [v_x, v_y, r, C_f, C_r]^T$$$v_x$ 和 $v_y$ 是纵向和侧向速度$r$ 是横摆角速度$C_f$ 和 $C_r$ 是待估计的前后轴等效侧偏刚度。量测向量用了四个信号$$z [a_x, a_y, r, v_{x,meas}]^T$$也就是纵向加速度、侧向加速度、横摆角速度和纵向车速观测值。这里有个容易忽略的细节量测方程里的 $a_x$ 和 $a_y$ 不是直接来自状态而是状态和轮胎力的非线性函数。也就是说IMU 的加速度读数间接携带了侧偏刚度的信息这对参数辨识特别重要。如果只拿横摆角速度做量测几个参数之间会存在较强的耦合可观测性会变差。控制输入选择了前轮转角 $\delta$ 和四个车轮的驱动/制动力矩。驱动力矩可以从整车控制器或者电机的扭矩指令里拿制动工况则用制动压力换算。如果拿不到扭矩指令也可以用轮速的微分做近似但噪声会放大建议优先级放低。至于四个轮速我为什么没有直接放进状态向量因为轮速本身的动态快而且和车速之间存在确定的运动学约束直接利用约束关系处理比扩展状态更简单。我在实现里是把轮速作为量测方程的辅助约束来用的防止纵向车速估计漂移但不参与主要状态传播。3.2 噪声协方差矩阵的工程取值方法滤波器能不能收敛一大半靠过程噪声协方差 $Q$ 和量测噪声协方差 $R$ 的设定。工程上这两组参数很少有人告诉你该怎么取多数是靠试错。我把试过比较稳妥的初始值写出来你可以直接套用再微调。量测噪声协方差 $R$ 相对容易确定。拿实车或者高保真仿真里采集一段静止和匀速行驶数据把加速度计、横摆角速度传感器和轮速信号的方差统计出来就行。我用的初始值如下$$R \mathrm{diag}(0.1^2,\ 0.1^2,\ 0.01^2,\ 0.1^2)$$单位分别是 $m/s^2$、$m/s^2$、$rad/s$、$m/s$。这组数据的物理含义是加速度计噪声标准差约 $0.1 m/s^2$横摆角速度噪声标准差约 $0.01 rad/s$轮速速度噪声标准差约 $0.1 m/s$。实际 MEMS 传感器指标接近这个水平。过程噪声协方差 $Q$ 的取值要更谨慎。$Q$ 描述的是模型误差和外界扰动包括未建模的悬架运动、轮胎模型误差、风阻和路面激励。一个常见错误是把 $Q$ 设得太小滤波器就过分相信模型预测量测更新对参数的修正作用就微乎其微参数收敛速度变得极慢。我建议如下速度状态对应的过程噪声方差取 $0.1^2$ 到 $0.3^2$反映纵向加速度扰动横摆角速度取 $0.05^2$ 到 $0.1^2$侧偏刚度的过程噪声方差取 $C_f$、$C_r$ 初始值的 $0.5%$ 到 $2%$ 的平方。举例如果初始 $C_f$ 是 80000 N/rad那么过程噪声标准差取 400 到 1600 N/rad 之间。这个值反映的是侧偏刚度随路面、载荷变化的时变特性。想要参数跟踪快就调大一点想要估计结果平滑就调小一点。Q 和 R 调完以后用“新息白化检验”验证一次把量测残差新息序列画出来如果呈白噪声且均值为零说明噪声协方差设定基本合理。如果残差显示明显的低频趋势说明过程噪声太小或者模型误差大如果残差发散则可能是初始协方差 $P_0$ 设置不合理或者状态本身不可观测。3.3 从仿真数据到滤波收敛的完整流程整个参数估计链路我在 MATLAB/Simulink 和 Python 两种环境里都实现过下面以 Python 版本的流程为例说明。第一步数据准备。在高保真仿真平台里跑一个“转向激励组合工况”先来一段 30 秒的正弦扫频转向幅值从小到大从 0.5 度增加到 4 度紧接着做两次紧急变道间隔 2 秒。这个工况的意图很明确让轮胎工作点覆盖线性区到非线性区的一段范围这样参数才有足够的激励信息。第二步初始化滤波器。状态初值设定为$v_x20 m/s$$v_y0$$r0$$C_f90000 N/rad$$C_r70000 N/rad$。初始协方差矩阵$$P_0 \mathrm{diag}(0.5^2,\ 0.5^2,\ 0.1^2,\ 15000^2,\ 15000^2)$$参数初始协方差不能设太小否则滤波器会过度信任错误的初值收敛速度极慢。15000 的标准差意味着初始参数误差允许到几万牛顿弧度给滤波器足够的修正空间。第三步执行 UKF 主循环。对每个时间步先用上一时刻的状态和协方差生成 Sigma 点对每个 Sigma 点做一次车辆模型积分计算预测均值、预测协方差然后用量测方程把 Sigma 点映射到量测空间计算新息和增益最后更新状态和协方差。核心代码框架大致长这样def ukf_update(x, P, z, u, dt, f_model, h_model, R): n len(x) alpha, beta, kappa 0.01, 2.0, 0.0 lam alpha * alpha * (n kappa) - n # 生成 sigma 点 X sigma_points(x, P, lam) # 状态传播 X_pred np.array([f_model(X[i], u, dt) for i in range(2*n1)]) x_pred, P_pred unscented_transform(X_pred, Wm, Wc) # 量测传播 Z_pred np.array([h_model(X_pred[i], u) for i in range(2*n1)]) z_pred, Pzz unscented_transform(Z_pred, Wm, Wc) Pxz calc_cross_cov(X_pred, Z_pred, x_pred, z_pred, Wc) K Pxz np.linalg.inv(Pzz R) x_new x_pred K (z - z_pred) P_new P_pred - K Pxz.T return x_new, P_new第四步收敛性判断。我对每个蒙特卡洛试验记录参数估计轨迹用“进入真值±5%误差带后不再跳出”作为收敛标志。统计结果显示UKF 的收敛时间大约为 8 到 15 秒EKF 则需要 15 到 30 秒而且 EKF 在参数初值偏差超过 30% 时经常陷入局部发散。4. 调试过程中遇到的经典问题与排查方法4.1 EKF 发散问题的定位与修复调试里最让人头疼的就是滤波器发散。我用 EKF 做第二轮试验时遇到过一个典型工况一个 S 形连续变道前 8 秒估计还算正常第 10 秒开始横摆角速度的估计残差突然增大到第 15 秒参数估计曲线直接往上冲。排查时我先把量测残差拆出来看发现横摆角速度残差在第 10 秒出现了明显的正偏置说明模型预测的横摆角速度比实际值小。进一步对比轮胎侧偏角数据发现问题出在轮胎进入非线性区段后真实侧偏力低于线性模型预测值而 EKF 的雅可比矩阵仍在线性工作点附近展开给出的增益过大对量测过度响应最终把参数推向了错误方向。修复办法有两个。一是改用 UKF从根本上避免线性化二是我还试过在 EKF 内部对参数的置信度做限制给 $C_f$ 和 $C_r$ 加阈值钳制防止参数更新幅度过大但这只是治标方案不平滑且损失估计精度。最终我还是建议项目里直接用 UKFEKF 只保留一个简化版本作为交叉验证工具。4.2 UKF 的数值稳定性问题UKF 比 EKF 稳定但它也有自己的坑。最大的坑是协方差矩阵失去半正定性导致 Cholesky 分解失败。我遇到的情形是车辆长时间直线行驶侧偏刚度激励不足参数协方差在两次更新之间被压缩得越来越小数值上出现负的特征值。这时 Sigma 点生成直接报错。处理手段归纳起来有三类在每个时间步为 $P$ 加上一个小的正则项 $\epsilon I$通常取 $\epsilon10^{-6}$保障数值正定采用平方根 UKF直接对协方差的 Cholesky 因子做递推能显著提升数值稳定性缺点是代码复杂检查是否有“状态超出物理意义”的情况比如 $C_f$ 变成负数。一旦发现非法值把参数状态重置到上一次合法值或者初始值附近。我最终选择的是“正则项 参数边界约束”组合简单实用。参数约束的实现方式是在 UKF 更新后判断参数的上下界超出就把超出量压缩回界内同时将对应的协方差行和列适当放大告诉滤波器“这个约束引入了额外的确定性”。4.3 可观测性不足与参数漂移的深度分析参数估计里最隐蔽的问题不是发散而是“看起来没发散但参数其实错了”。我遇到过一个非常典型的现象车辆在直线匀速行驶时滤波器输出的 $v_x$、$v_y$、$r$ 都收敛得很好但 $C_f$ 和 $C_r$ 却在缓慢漂移一个往上走一个往下走两个参数之和保持在一个接近真值的水平仿佛在互相“补偿”。这就是可观测性不足的典型表现在直线行驶工况下侧向加速度和横摆角速度几乎不变量测信息里几乎没有关于 $C_f$ 和 $C_r$ 独立数值的成分只有它们的某种组合是勉强可观测的。滤波器靠过程噪声驱动参数随机游走参数自然就出现漂移。解决思路有两层。第一层是激励管理只有检测到足够的侧向激励时才允许参数更新。我实现了一个激励检测器用窗口滑动方式计算侧向加速度绝对值均值当均值低于 $1.0 m/s^2$ 时直接把参数更新协方差设为极大值让参数保持原值不更新。第二层是量测丰富化加入侧向加速度量测比只使用横摆角速度好很多有条件的加上 GPS 或者高精度定位系统测量 $v_y$ 时参数可辨识性会有质的提升。我把这些调试经验整理成速查表方便你在现场排查时快速对比现象可能原因处理方案参数估计缓慢漂移激励不足或参数不可观测增加激励检测与冻结机制横摆角速度残差长期为正轮胎非线性超出模型假设改用 UKF 或引入非线性轮胎模型Cholesky 分解失败协方差矩阵非正定添加正则项检查状态合法性参数收敛到错误值初始协方差太小或量测噪声偏大调大 $P_0$ 和 $Q$检查 R 是否与传感器噪声匹配新息序列带明显趋势模型误差占主导检查轮胎模型和载荷转移计算调试过程中还有一个容易被忽略的细节车载传感器的安装位置。如果 IMU 不安装在质心位置量测方程里需要增加安装位置补偿项否则侧向加速度的读数会混入横摆角速度耦合的转子项给量测带来系统性偏差。补偿公式其实很简单$a_{y,sensor} a_y l_x \dot{r}$其中 $l_x$ 是 IMU 安装位置到质心的纵向距离我在一次试验里忘掉这个补偿导致$v_y$估计产生约 0.2 m/s 的偏差排查了整整两天。我个人在实际操作中最深的体会是滤波器调参这件事顺序比参数值本身更重要。一定要先把量测噪声标定准确再调过程噪声先确认模型在开环仿真下的输出和真值对得上再谈滤波闭环。UKF 比 EKF 在这类车辆状态和参数估计任务里更值得投入虽然代码量多一点但省掉的调参时间和对线的时间远超那点开发成本。后面我还打算在现有大框架上加入路面附着系数的联合估计把轮胎模型从线性逐步换成带饱和特性的圆弧近似这又是另一段值得记录的旅程了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑