UKF与CKF算法在电动汽车路面附着系数估计中的对比研究

发布时间:2026/10/27 20:20:16
UKF与CKF算法在电动汽车路面附着系数估计中的对比研究

1. 项目概述

在电动汽车控制领域,路面附着系数估计一直是个让人头疼的问题。作为一名在车辆动力学控制领域摸爬滚打多年的工程师,我深知这个参数对车辆稳定性控制的重要性。特别是在分布式驱动电动汽车上,每个轮子都能独立控制,这就对路面识别提出了更高要求。

最近我在做一个很有意思的对比实验:用无迹卡尔曼滤波(UKF)和容积卡尔曼滤波(CKF)这两种算法来估计路面附着系数。这两种方法在理论上各有千秋,但实际效果到底如何?今天我就把整个实验过程、参数设置、结果对比以及踩过的坑都分享给大家。

2. 核心需求解析

2.1 为什么需要精确的路面附着系数估计?

路面附着系数μ(mu)这个参数,简单说就是轮胎和地面之间的"抓地力"。它直接影响着:

  • 车辆加速/制动性能
  • 转向稳定性
  • 防抱死制动系统(ABS)和电子稳定程序(ESP)的控制效果

在传统车辆上,这个参数通常是通过经验值或者简单的滑移率-附着系数曲线来估算。但在分布式驱动电动汽车上,每个电机都可以独立控制,如果能精确知道每个轮子接触的路面状况,控制效果能提升一个量级。

2.2 分布式驱动电动汽车的特殊性

与传统车辆相比,分布式驱动电动汽车有几个显著特点:

  1. 每个车轮都有独立的驱动电机
  2. 可以精确测量每个电机的转矩和转速
  3. 轮间耦合效应更小
  4. 控制自由度更高

这些特点使得我们可以利用更多的传感器信息来估计路面状况,但也对算法的实时性和鲁棒性提出了更高要求。

3. 技术方案选型

3.1 为什么选择卡尔曼滤波家族?

卡尔曼滤波在状态估计领域可以说是"老将"了,但在路面估计这个问题上依然表现出色,主要原因有:

  1. 能够有效处理传感器噪声
  2. 可以融合多种传感器信息
  3. 计算量相对可控
  4. 有严格的数学理论基础

在标准卡尔曼滤波的基础上,针对非线性系统又发展出了EKF(扩展卡尔曼滤波)、UKF(无迹卡尔曼滤波)和CKF(容积卡尔曼滤波)等变种。

3.2 UKF vs CKF:理论对比

特性UKFCKF
采样策略无迹变换(2n+1个sigma点)球面径向准则(2n个点)
计算复杂度O(n³)O(n³)
数值稳定性较好优秀
高维性能随维度增加精度下降维度增加影响较小
实现难度中等较高

从理论上说,CKF在高维非线性系统中有更好的表现,但UKF实现起来更简单,在低维问题上表现也不错。

4. 系统建模与实现

4.1 车辆动力学模型

为了验证算法效果,我建立了包含以下关键要素的车辆模型:

  1. 七自由度车辆模型(纵向、横向、横摆+四个车轮旋转)
  2. Dugoff轮胎模型
  3. 电机动态特性模型

在Carsim中搭建了对应的仿真环境,参数设置如下:

% 车辆基本参数 m = 1500; % 整车质量(kg) Iz = 2500; % 绕Z轴转动惯量(kg·m²) lf = 1.2; % 前轴到质心距离(m) lr = 1.5; % 后轴到质心距离(m) R = 0.3; % 车轮半径(m)

4.2 状态方程设计

状态变量选择:

x = [vx vy ω ω1 ω2 ω3 ω4 μ1 μ2 μ3 μ4]'

其中:

  • vx, vy:纵向和横向速度
  • ω:横摆角速度
  • ω1~ω4:四个车轮的角速度
  • μ1~μ4:四个接触点的路面附着系数

观测变量:

z = [ax ay ω ω1 ω2 ω3 ω4]'

即车辆加速度和各个车轮转速。

4.3 UKF实现关键代码

def ukf_predict(x, P, f, Q): # 生成sigma点 sigma_points = merwe_sigma_points(x, P) # 传播sigma点 propagated_points = np.array([f(point) for point in sigma_points]) # 计算预测状态和协方差 x_pred = np.average(propagated_points, axis=0) P_pred = Q + np.cov(propagated_points.T) return x_pred, P_pred def ukf_update(x_pred, P_pred, z, h, R): # 生成sigma点 sigma_points = merwe_sigma_points(x_pred, P_pred) # 观测预测 obs_points = np.array([h(point) for point in sigma_points]) z_pred = np.average(obs_points, axis=0) # 计算卡尔曼增益 Pzz = R + np.cov(obs_points.T) Pxz = np.cov(sigma_points.T, obs_points.T)[:len(x_pred), len(x_pred):] K = Pxz @ np.linalg.inv(Pzz) # 更新状态 x_upd = x_pred + K @ (z - z_pred) P_upd = P_pred - K @ Pzz @ K.T return x_upd, P_upd

4.4 CKF实现要点

CKF的实现与UKF类似,主要区别在于采样策略:

  1. 使用球面径向准则生成采样点
  2. 点数固定为2n(n为状态维度)
  3. 权重计算方式不同
def cubature_points(x, P): n = len(x) points = np.zeros((2*n, n)) sqrtP = scipy.linalg.sqrtm(P) for i in range(n): points[i] = x + sqrtP[:,i] * np.sqrt(n) points[n+i] = x - sqrtP[:,i] * np.sqrt(n) return points

5. 仿真实验设计

5.1 测试场景

为了全面评估算法性能,设计了以下几种典型工况:

  1. 均匀路面:四轮μ值相同(干沥青μ=0.8)
  2. 对开路面:左侧μ=0.8,右侧μ=0.3
  3. 对接路面:前轴μ=0.8,后轴μ=0.3
  4. 突变路面:从μ=0.8突变为μ=0.3

每种工况下都设置了转向、加速、制动等不同驾驶操作。

5.2 性能指标

主要考察以下几个指标:

  1. 估计精度:估计值与真实值的均方根误差(RMSE)
  2. 收敛速度:从初始误差到稳定所需时间
  3. 计算耗时:单次迭代平均计算时间
  4. 鲁棒性:对噪声和模型误差的敏感度

6. 结果分析与对比

6.1 均匀路面下的表现

指标UKFCKF
RMSE(μ)0.0320.028
收敛时间(s)1.20.9
计算时间(ms)0.450.52

在简单工况下,两种算法表现接近,CKF略优但计算时间稍长。

6.2 对开路面下的表现

# 对开路面下的μ估计结果可视化 plt.figure(figsize=(10,6)) plt.plot(t, true_mu_left, 'r--', label='True μ (left)') plt.plot(t, est_mu_left_ukf, 'b-', label='UKF estimate') plt.plot(t, est_mu_left_ckf, 'g-', label='CKF estimate') plt.xlabel('Time (s)') plt.ylabel('μ value') plt.legend() plt.title('Left side μ estimation on split-μ road')

从图中可以看出,CKF能更快地跟踪路面变化,特别是在转向工况下。

6.3 突变路面的跟踪能力

当路面附着系数突然变化时:

  • UKF需要约0.5秒才能跟上变化
  • CKF仅需0.3秒就能调整过来
  • CKF的超调量比UKF小约30%

7. 工程实践中的经验分享

7.1 参数调优技巧

  1. 过程噪声Q:不宜设置过大,否则会导致估计波动;但太小又会影响跟踪速度。建议从对角线元素1e-4开始调整。

  2. 观测噪声R:应根据传感器实际精度设置。轮速传感器噪声通常比加速度计小一个数量级。

  3. 初始协方差P0:对收敛速度影响很大。μ的初始不确定性可以设大些(如0.5),其他状态量设小些。

重要提示:不要盲目追求数学上的"最优"参数,而应该根据实际车辆响应来调整。有时候理论上的次优参数在实际中反而表现更好。

7.2 实时性优化

在嵌入式平台实现时,我发现了几个优化点:

  1. 矩阵运算尽量使用对称性优化
  2. 提前计算并存储不变的部分(如权重)
  3. 使用定点数运算替代浮点
  4. 对协方差矩阵进行强制对称化处理

经过优化后,CKF的单次迭代时间可以从1.2ms降到0.6ms,完全能满足50Hz的控制需求。

7.3 常见问题排查

问题1:估计值持续偏离真实值

  • 检查车辆模型参数是否准确
  • 确认传感器标定是否正确
  • 可能是过程噪声设置过大

问题2:估计结果波动大

  • 尝试减小过程噪声Q
  • 检查观测噪声R是否设置合理
  • 可能是数值计算不稳定,尝试对协方差矩阵进行正则化

问题3:收敛速度慢

  • 增大初始协方差P0
  • 检查是否有状态量完全不可观
  • 考虑增加其他传感器信息

8. 结论与选型建议

经过大量仿真和实车测试,我得出了以下实用建议:

  1. 计算资源充足时优先选择CKF:特别是在高维或突变工况下,CKF表现更稳定。

  2. 嵌入式平台考虑UKF:当计算资源受限时,UKF是更经济的选择,牺牲一点性能换取实时性。

  3. 混合使用策略:可以在常规工况用UKF,检测到路面突变时切换到CKF。这种自适应策略在实际中效果很好。

  4. 不要忽视模型精度:再好的滤波算法也弥补不了模型误差。轮胎模型的准确性对最终效果影响很大。

在实际项目中,我最终选择了CKF方案,虽然实现难度大一些,但在复杂工况下的优势很明显。特别是在冰雪路面识别方面,比传统方法提前0.3秒就能检测到路面变化,为稳定性控制争取了宝贵时间。