实话说,接触路面附着系数估计这个方向的同行应该都有同感:它在整车控制里的位置太特殊了——谁都离不开它,谁做起来都头疼。分布式驱动电动汽车因为每个车轮的驱动力矩可以直接获取,天然具备做附着系数估计的优势,但真正落地的核心还是在滤波算法选型上。UKF和CKF这两个名字在论文里常常被并列提及,可实际用起来差距比想象中复杂得多,不光有精度差异,还有数值稳定性、计算量、参数敏感度的权衡。
这篇内容不是我翻译某篇论文,而是我把自己在一台分布式驱动试验车上做附着系数估计的完整过程梳理了一遍:从动力学建模、UKF实现、CKF实现,到同工况对比测试和最终选型建议。如果你也在做车辆状态估计、或者正在纠结用无迹卡尔曼还是容积卡尔曼,这文章应该能帮你省不少弯路。
1. 四个轮子各自"摸路":分布式驱动对附着系数估计的天然优势
1.1 为什么附着系数估计是底盘控制的地基
路面附着系数(通常记为μ)直接定义了轮胎能传递到地面的最大摩擦力。它不是一个工程参数,而是车辆纵向控制、横向控制、稳定性控制共同的"输入前提"。牵引力控制系统要知道当前路面能承受多大驱动力矩才不会打滑,制动防抱死系统要判断该把制动力释放到什么程度,车身稳定系统在计算横摆力矩控制目标时同样依赖每个车轮的附着极限。
传统集中式驱动车辆上,这个估计很难做。发动机输出力矩的获取存在较大不确定性,液力变矩器、变速箱、传动轴的损耗模型复杂,真正作用到车轮上的力矩很难精确知晓。附着系数的估计在集中式车型上往往只能靠滑移率-附着力曲线的斜率间接推断,精度和实时性都受限。
分布式驱动电动汽车把这个难题简化了一截。每个车轮由独立电机直接驱动,电机输出的电磁力矩可以在控制器里以极高的精度获得,响应速度是毫秒级的。这意味着车轮动力学方程里的输入项基本是"已知量",我们只需要通过状态估计算法把附着系数这个隐含变量从系统的输入输出关系中抽出来。这一结构性优势,是分布式驱动在这个方向上比传统车辆更适合做文章的根本原因。
1.2 附着系数估计的三条技术路线
行业内做附着系数估计,大致分为三类思路:
基于轮胎模型的方法。建立轮胎纵向力与滑移率、垂直载荷、附着系数的映射关系(如魔术公式、Dugoff模型),通过滤波估计轮胎模型参数或直接估计附着系数。这类方法物理意义明确,估计结果相对平滑,缺点是模型失配对结果影响较大。
基于动力学的方法。利用车辆动力学方程,以驱动/制动力矩和轮速、加速度为输入,把附着系数作为状态变量纳入滤波框架。不依赖高精度轮胎模型,但对激励质量有要求——如果车轮始终处于小滑移率区间,附着系数几乎不可观测。
基于数据驱动的方法。用神经网络或机器学习模型从大量试验数据中学习路面特征。上限高,但泛化能力和可解释性一直是工程落地的障碍。
我的试验方案选的是第二条路线,用状态估计框架(UKF/CKF)来做,原因很直接:实车控制器上跑得动、参数物理意义清晰、能够和现有的车辆状态估计器(车速、质心侧偏角估计器)共用一套运算资源。
1.3 滤波选型:为什么是UKF和CKF
附着系数估计问题的本质是非线性状态估计。车辆纵向动力学方程中存在车速与轮速的乘积、滑移率的非线性定义、以及轮胎力的非线性映射,EKF(扩展卡尔曼滤波)靠一阶泰勒展开做线性化,在强非线性区间误差迅速放大。
UKF和CKF都属于确定性采样类滤波器,根本思路是"用一批精心选择的采样点逼近状态分布,而不是线性化一个非线性函数"。它们在车辆状态估计领域的占比逐年提高,很多底盘控制研究团队已经把它们作为标准工具。但对很多人来说,这两个算法的区别模糊——它们都生成采样点、都走预测-校正两步、都能处理加性噪声和非线性系统,到底差在哪?这需要往下拆。
2. 从单轮动力学到状态方程:附着系数如何"混进"系统里
2.1 四分之一车辆模型的建立
路面附着系数估计不需要整车模型作为起点。在纵向动力学估计问题中,四分之一车辆模型(也叫单轮模型)是最常用的简化形式,它把一个车轮、四分之一车身的运动关系单独拿出来描述。
设车辆质量为m(此处取四分之一质量),车轮转动惯量为J,车轮滚动半径为r,电机驱动力矩为Td,轮胎纵向力为Fx,则连续时间下的动力学方程为:
m · dv/dt = -Fx - Fres
J · dω/dt = Td - Fx · r
其中v是车身速度,ω是车轮旋转角速度,Fres代表滚动阻力和空气阻力等外部阻力之和。做估计时Fres可以归入过程噪声,也可以单独建模,工程中为了简化通常用一个小常数近似。
这里的核心耦合项是Fx,它是连接车身平移运动和车轮旋转运动的桥梁,也是附着系数μ出现的地方。轮胎纵向力Fx并不是μ的直接乘积,还需要一个与滑移率相关的形状函数。
2.2 轮胎力模型的简化处理:把μ单独"提"出来
完整的轮胎模型(比如魔术公式)里,纵向力是滑移率、垂直载荷、外倾角、附着系数等多个变量的复杂函数。如果直接把这些参数全部放进状态向量里估计,状态维数上升,滤波器的收敛速度和数值稳定性都难以保证。
我的做法参考了目前不少研究中采用的一种简化策略:把纵向力写成显式分离的形式:
Fx = μ · Fz · g(λ)
其中Fz是车轮垂直载荷,λ是滑移率,g(λ)是归一化纵向力曲线。这个g(λ)反映的是轮胎-路面在不同滑移率下的力利用率形状,不依赖具体的路面附着水平。它的典型特征是:在滑移率较小时近似线性增长,在峰值滑移率附近达到最大值1,之后进入滑移区力值略微回落。
这样处理的好处是,μ被从轮胎模型中"拆"成了一个单独的乘性系数,可以自然地作为状态变量放进滤波状态向量中。g(λ)的形状可以通过台架试验或者查找表确定,也可以在仿真中用近似解析式表达。当附着系数估计值乘以g(λ)后的力,与电机的驱动力矩、轮速变化率所反映的实际轮胎力吻合时,估计值就是准的。
滑移率λ的定义分驱动和制动两种情况。驱动工况下:
λ = (v - ω·r) / v
制动工况下:
λ = (v - ω·r) / (ω·r)
为了统一表达,很多实现里采用 λ = (v - ω·r) / max(v, ω·r) 的写法,避免分母为零。仿真和实车代码最好统一用这个定义,否则在工况切换瞬间滑移率计算会出现异常值。
2.3 状态空间方程与离散化
选定状态变量为:
x = [v, ω, μ]^T
系统连续状态方程为:
dv/dt = -(μ · Fz · g(λ)) / m - Fres/m
dω/dt = (Td - μ · Fz · g(λ) · r) / J
dμ/dt = 0 + w_μ
μ方程为随机游走模型,也就是说μ本身变化缓慢,但允许一定的过程噪声w_μ来表示路面附着条件的真实变化。这个过程噪声方差是重要调参项:设置太小,估计结果对路面突变响应慢;设置太大,估计结果噪声大。
量测方程选择什么,取决于车上可用传感器。我的试验车辆具备轮速传感器和纵向加速度传感器(IMU),所以量测向量取:
z = [ω, ax]^T
其中:
ax = -(μ · Fz · g(λ)) / m
选轮速而不选车速作为直接量测,是因为试验车没有做GPS/惯性组合导航,车身速度本身也是不可测的。轮速信号来自ABS齿圈,精度可以接受;纵向加速度来自IMU,注意IMU安装偏角和零点漂移需要标定。
离散化用一阶欧拉法即可,采样周期取1ms或2ms(取决于控制器任务周期)。这里有个容易被忽视的点:μ方程对应的随机游走用的是离散化后的等效过程噪声协方差,连续域的过程噪声功率需要乘以采样时间,如果直接把连续域的数值搬进离散模型里,滤波器的Q矩阵会偏大或偏小,直接影响收敛特性。
2.4 可观测性:不是所有工况都能估计附着系数
很多刚接触这个方向的研发人员容易忽视一个问题:附着系数并不是在所有工况下都是可观测的。
回到状态方程看,μ通过Fx影响轮速和车辆加速度。如果车辆在稳定直线匀速行驶、滑移率接近零,那么g(λ)在λ=0附近的变化率非常小,轮胎力对μ的灵敏度极低。此时无论什么滤波器都无法准确估计μ——不是算法不行,而是系统本身缺乏激励。
工程上有一句经验:要估计附着系数,必须先让轮胎"说话"。微小的驱动力矩激励导致轮速出现微小滑移,这个滑移里才携带路面信息。在仿真对比和实车试验设计时,我一般会确保工况中包含足够的驱动/制动激励,否则对比出来的滤波器性能没有意义。
3. UKF的Sigma点策略:三个参数决定精度与稳定性
3.1 无迹变换的核心思想
UKF的全称是Unscented Kalman Filter,核心是"无迹变换"(Unscented Transform)。它的逻辑起点是:对于高斯分布,我们不需要对非线性函数做解析近似,而是可以生成一组带有权重的确定性采样点(Sigma点),把这组点经过非线性函数传播,然后从传播后的点集中重新计算均值和协方差。
对一个n维高斯分布(均值x̄,协方差P),UKF生成2n+1个Sigma点:
χ₀ = x̄
χᵢ = x̄ + √((n+λ)P)ᵢ, i=1,...,n
χᵢ₊ₙ = x̄ - √((n+λ)P)ᵢ, i=1,...,n
其中λ = α²(n+κ) - n,符号√((n+λ)P)ᵢ表示矩阵(n+λ)P的平方根的第i列,实际实现中通常用Cholesky分解来求。
对应权重为:
W₀ᵐ = λ/(n+λ)
W₀ᶜ = λ/(n+λ) + (1-α²+β)
Wᵢᵐ = Wᵢᶜ = 1/(2(n+λ)), i=1,...,2n
3.2 三个参数α、β、κ的工程含义
这三个参数在论文公式里经常一带而过,但实车调试时它们直接影响估计质量。
α决定Sigma点围绕均值的散布范围,通常取一个小正数(如1e-3到1之间)。α越小,Sigma点离均值越近,对强非线性函数的局部特性刻画越细,但数值风险也越大——矩阵平方根在数值上容易出问题。我实测下来,α取0.01到0.1之间比较稳妥,取1e-3会在协方差较小时触发平方根运算的数值警告。
β是分布先验信息的修正项。对于高斯分布,β=2是最优选择,这也是文献里默认值出现频率最高的原因。如果状态分布明显非高斯(比如轮胎力在饱和区间的分布出现截断),可以尝试β=3或4,但收益通常有限。
κ是一个次级缩放参数,高斯情况下常取0或3-n。它的作用在低维问题中比较明显,n≥3时影响很小。值得留意的是,当κ取负数且绝对值接近n时,W₀ᵐ可能变成负值,负权重在高维状态下可能让协方差矩阵失去正定性——这是UKF在高维应用中被诟病最多的问题。
3.3 标准UKF的预测-校正流程
UKF的标准实现分五步,我在工程上习惯写成如下伪代码结构:
初始化:给定x₀、P₀、Q、R。
时间更新:
- 由(x̂ₖ₋₁, Pₖ₋₁)生成2n+1个Sigma点;
- 将Sigma点逐一通过状态方程得到传播后的Sigma点;
- 加权计算先验均值x̂ₖ⁻与先验协方差Pₖ⁻(需叠加过程噪声Q)。
量测更新:4. 从(x̂ₖ⁻, Pₖ⁻)重新生成Sigma点(这个"重新"很关键,不能直接用时间更新那组点),通过量测方程传播,计算预测量测均值、新息协方差Sₖ、以及状态-量测互协方差Cₖ; 5. 卡尔曼增益Kₖ = Cₖ·Sₖ⁻¹,状态更新与协方差更新按标准卡尔曼公式完成。
第五步里的协方差更新公式我提醒一句:UKF的协方差更新可以写为Pₖ = Pₖ⁻ - Kₖ·Sₖ·Kₖᵀ,理论上等价于Joseph形式。但在数值上Joseph形式更稳定,尤其当增益计算因为求逆引入误差时,普通形式可能出现协方差轻微不对称。工程代码建议用:
Pₖ = Pₖ⁻ - Kₖ · Sₖ · Kₖᵀ
然后在每次迭代末尾做Pₖ = (Pₖ + Pₖᵀ)/2的对称化操作。
3.4 我在用UKF踩过的几个真实坑
第一个坑是协方差矩阵失去正定性。多轮迭代后P矩阵可能出现不对称或者特征值趋近于零的情况。原因通常是数值误差积累加上权重存在负值。解决办法有两类:一是定期对P做特征值裁剪(把过小的特征值钳制到一个下限,比如1e-12),二是把平方根计算的函数改为带数值保护的版本(比如对矩阵做对称正定矫正后再求Cholesky)。我在试验中采用了后者,效果更稳定。
第二个坑是过程噪声Q矩阵的维度匹配。因为在状态向量里加了μ,Q矩阵必须相应扩维,而μ对应的过程噪声方差需要结合路面附着变化的实际速率来设。我初始设的μ过程噪声方差偏小,导致在冰面驶入干沥青路面(μ从0.2跳到0.8)时,估计值要三四秒才能跟上去,这在控制上是不可接受的。
第三个坑是量测噪声R中的轮速噪声被低估。电磁干扰下ABS齿圈信号的高频噪声比标称值大不少,R矩阵给小了会让滤波器过分信任轮速测量,结果就是状态估计里出现明显的抖动噪声。我后来在实车上采集了怠速滑行和匀速行驶的轮速数据,用离线方式统计了噪声标准差,再回填到R矩阵里,效果有本质提升。
4. CKF的容积点策略:少了中心点反而更稳
4.1 从球面-径向规则到容积点生成
CKF(Cubature Kalman Filter)源于基于球面-径向规则的数值积分方法。目标是计算高斯分布下非线性函数的积分,它把积分分解为径向部分和球面部分,用三阶精度的球面-径向规则近似。
对n维标准高斯分布,CKF选取2n个容积点:
ξᵢ = √n · eᵢ, i=1,...,n
ξᵢ₊ₙ = -√n · eᵢ, i=1,...,n
其中eᵢ是第i个标准单位向量。对应的权重均匀分布:
wᵢ = 1/(2n), i=1,...,2n
对于一般高斯分布(均值x̂,协方差P),先对P做Cholesky分解P = SSᵀ,然后生成实际采样点:
xᵢ = x̂ + S·ξᵢ, i=1,...,2n
可以看到,容积点的数量是2n,而UKF是2n+1。少了一个中心点,同时所有点的权重都是正的、相等的。
4.2 CKF与UKF的数学关联:一个精巧的特例关系
理解CKF和UKF的关系,是选择它们的重要前提。
回顾UKF的参数设置:当α=1、κ=0时,λ = α²(n+κ) - n = 0。此时Sigma点的位置为:
χᵢ = x̄ ± √(n·P)ᵢ
而两个滤波器的权重对比:
UKF在λ=0时,W₀ᵐ = 0,W₀ᶜ = 1-1+β = β。当β=0时,W₀ᶜ = 0,其余2n个点的权重均为1/(2n)。
CKF的2n个点权重就是1/(2n),位置也是√n·S的第i列正负方向。
也就是说:CKF可以看作UKF在α=1、κ=0、β=0时的特殊情形。二者在采样点位置和权重上完全重合,"少一个中心点"并不是CKF的另起炉灶,而是UKF参数空间里的一个退化特例。
那是不是说CKF就只是UKF的一个参数设置?不完全是。关键区别在于:CKF的推导是从数值积分理论出发的,它的三阶精度是有严格理论保障的,不依赖高斯假设下的参数微调。而UKF参数灵活性更大,通过调整α、β、κ可以改变采样区间和权重分布,在特定问题上有可能超过CKF的精度,但这种精度优势是以增加调参难度和数值风险为代价的。
4.3 CKF实现流程与数值稳定性优势
CKF的实现流程与UKF高度类似,同样分时间更新和量测更新,但省去了参数设计环节——没有αβκ需要调,所有容积点权重等权且为正。
这个"权重恒正"是CKF最核心的数值优势。在高维状态估计中(n≥4),UKF在λ较小或κ配置不当时,W₀ᵐ或W₀ᶜ可能为负值,负权重参与协方差加权会导致先验协方差Pₖ⁻偏离真实值,甚至出现非正定。而CKF的所有权重恒正,协方差矩阵在每次迭代中天然保持半正定性质,不需要额外的数值保护手段。
在我的三个状态变量(v、ω、μ)维度下,UKF和CKF的数值稳定性差异还不是特别明显,但考虑到后续如果把质心侧偏角、横摆角速度也纳入统一估计器(n=5),这个差异会迅速放大。这也是我把CKF纳入对比的核心动机之一:不能只在当前维度上选型,要看未来扩展路径。
CKF的局限同样要说明:它需要P矩阵严格正定才能做Cholesky分解,如果P矩阵从外部被污染(比如初始化给定了一个奇异矩阵),CKF会直接报错,不像UKF那样还能在容错机制下继续跑。所以CKF代码里一定要做P矩阵正定检查。
4.4 CKF代码实现要点
伪代码:
初始化:生成基本容积点ξᵢ(仅需生成一次,运行时复用),设定x₀、P₀、Q、R。
时间更新:
- 对Pₖ₋₁做Cholesky分解 Pₖ₋₁ = Sₖ₋₁·Sₖ₋₁ᵀ;
- 生成容积点 xᵢ = x̂ₖ₋₁ + Sₖ₋₁·ξᵢ;
- 通过状态方程传播容积点,加权得到先验均值与协方差(叠加上Q)。
量测更新:4. 对Pₖ⁻重新做Cholesky分解,生成新的容积点,通过量测方程传播; 5. 加权计算预测量测均值、新息协方差、互协方差; 6. 计算增益并更新状态与协方差。
代码上的核心注意点是Cholesky分解的输入矩阵必须正定,建议在分解前加一个对称化步骤和小特征值钳制。仿真和试验中,我固定使用numpy的linalg.cholesky,并在外部包装了一层保护逻辑,一旦分解失败就回退到上一次有效的P矩阵——这个兜底策略在长时间运行时非常有用。
5. 冰雪、干沥青、突变路面:三种工况下的滤波对比实测
5.1 测试工况设计与仿真环境
仿真模型基于上一节的单轮动力学方程,参数按一台典型的分布式驱动试验车设定:
| 参数 | 数值 | 说明 |
|---|---|---|
| 四分之一质量 m | 412.5 kg | 整车约1.65吨 |
| 车轮转动惯量 J | 1.20 kg·m² | 含电机转子折算惯量 |
| 滚动半径 r | 0.326 m | 225/55R17胎型 |
| 采样周期 T | 2 ms | 控制器任务周期 |
| 初期状态真值 μ | 0.20 / 0.80 / 跳变 | 按工况设定 |
三个测试工况覆盖了路面附着系数估计的典型难点:
- 工况A:低附着路面(冰雪),μ=0.2,驱动工况,输入力矩带斜坡激励;
- 工况B:高附着路面(干沥青),μ=0.8,驱动与滑行交替;
- 工况C:突变路面,起始μ=0.8,0.5秒时刻突降到0.2,模拟车辆从干沥青驶入冰面的瞬间。
每个工况下分别运行UKF与CKF,统计三个指标:附着系数稳态估计误差(RMSE)、从初始偏差0.3收敛到真值附近所需时间、以及单步滤波的平均计算耗时(在相同的笔记本CPU环境下)。
5.2 低附着工况:精度差异显现
工况A的低附着路面上,驱动激励产生的滑移率较大,但由于μ=0.2对应的绝对摩擦力较小,状态方程中μ的变化对量测的影响不如高附着工况显著,两个滤波器的收敛速度都偏慢。
结果上看,UKF的稳态RMSE约0.031,CKF约0.022。差异来源于采样点布局:同样数量的采样点情况下,UKF因为偏离均值的Sigma点可能落在强力模型的饱和区,导致对量测方程的局部近似偏差增大。CKF的所有容积点等权分布,对量测函数曲率变化的平均效果更均衡,在这个工况下占优。
但要注意,这个优势不大。在工程上0.03和0.02的RMSE差异,对于控制算法来说几乎可以忽略——附着系数的估计值最终都要经过一个限幅和滤波环节才送给上层控制。
5.3 高附着工况:常规路面上两者趋同
高附着工况下,驱动输入激励使得滑移率在0.005到0.01之间的小范围内变化。在这个区域,轮胎归一化力曲线近似线性,整个系统呈现弱非线性。
这种条件下UKF和CKF的差异明显缩小:RMSE都在0.01量级以内,收敛速度也几乎相同。这说明一个道理——滤波器的非线性处理能力差异,只有在系统真正进入强非线性区(大滑移率、附着饱和)才会显现。如果工况设计只包含常规稳定驾驶,UKF和CKF选谁都一样,真正的瓶颈反而在传感器噪声和模型失配。
5.4 突变路面工况:收敛速度的硬指标
这个工况是最有说服力的。车辆从干沥青(μ=0.8)在0.5秒时刻驶入冰面(μ=0.2),附着系数发生阶跃式下降。
UKF的μ估计值在跳变后约1.2秒收敛到真值附近(误差<0.05),CKF约0.9秒。差异主要来自μ过程噪声的建模上:CKF因为权重恒正,在跳变瞬间先验协方差对状态偏差的"信任"分配更均匀,状态修正量更大。UKF在中心点权重(W₀ᶜ)偏大的情况下,状态更新时对先验的保留倾向更强,跳变响应相对钝一些。
计算耗时对比,在Python环境下UKF单步约1.67ms,CKF约1.24ms。CKF少了中心点的生成和传播,计算量天然低约20%——这个差异在实车嵌入式平台(不跑Python,而是C语言定点实现)上虽然比例相同,但绝对耗时会被放大部分,因为嵌入式平台的基础数学库效率有限。
5.5 数值稳定性的实测观察
长时仿真(模拟连续5分钟驾驶工况)中,UKF在第280秒左右出现了一次明显的P矩阵特征值退化,导致估计值产生约0.05的瞬间跳变;CKF全程稳定,P矩阵特征值始终保持在合理范围。这正是前面分析的负权重隐患的体现——不是每次都出问题,但长时运行中"概率性"出现,排查起来非常痛苦。
从我的测试结果看,可以得出几个初步结论:低附着区CKF精度略优,突变工况收敛略快,计算量更省,数值稳定性显著更好。UKF的优势在于参数可调性强,在某些经过精心调参的工况下能达到略优于CKF的稳态精度,但这个"优势"很依赖调试者的经验和运气。
6. 选型与调参:把UKF和CKF用在实车控制器上的经验
6.1 状态维度是选型的第一依据
我的测试结论可以外推到一个更一般的选型规律:当状态维度n≤3时,UKF和CKF都可以胜任,CKF在数值稳定性上的优势更明显,建议直接选CKF省去调参烦恼;当n≥4时,UKF的负权重问题会逐步暴露,CKF是更稳妥的选择。
但如果你的系统有强非高斯特性(例如传感器量测存在明显截断、或者状态存在物理约束边界),UKF的β参数修正能力会派上用场。这种情况下可以反过来选择UKF,并把β作为重点调参对象。
6.2 过程噪声和量测噪声的调参路径
滤波器的调参,本质上是在"信任模型"和"信任量测"之间找平衡。
过程噪声Q矩阵反映的是对模型误差的宽容度。附着系数对应的过程噪声方差是最敏感的项:设小了,估计值平滑但跟不上路面突变;设大了,估计值对量测噪声的响应被放大,抖动明显。我的调试经验是,先离线采集一段包含路面突变的历史数据,手动标注μ的近似真值,然后以小步长扫描μ过程噪声方差,选取RMSE最小的那个数量级。
量测噪声R矩阵最好用实测数据的离线统计来定,而不是从传感器数采手册抄标称值。方法很简单:让车辆稳定匀速行驶(此时轮速和加速度量的波动基本是噪声),采集一段信号计算标准差,作为R的对角线元素初值,再在实车调试中微调。
6.3 量测预处理:滤波器的"前处理"比算法本身更重要
实车应用中,量测信号的预处理质量对估计结果的影响常常超过滤波器算法选择本身,这一点在我测试中感受很深。
轮速信号需要先做脉冲计数平滑(去抖),再做低通滤波。IMU加速度信号需要零点偏移校正和车身倾斜补偿。我最初直接在滤波代码里用原始轮速脉冲计算滑移率,结果高频噪声通过量测方程进入状态估计,μ的波动幅度大得没法看。加上预处理环节后,估计质量立即提升了一个档次。
这里要提醒的是:预处理滤波器的截止频率要与状态估计器的带宽协调。截止频率太低,量测信号的相位滞后会让估计值滞后于真实状态;截止频率太高,噪声抑制不足。我最终定在15Hz左右,与1ms采样周期配合下效果最均衡。
6.4 双滤波器融合的进阶思路
做完单滤波器对比后,我实际上在工程实现中采用了更稳妥的方案:不用UKF或CKF的单选框,而是让两者并行运行,在输出端做基于新息统计的软切换或加权融合。
逻辑是这样的:CKF在大部分工况下表现稳定,作为默认输出;UKF的新息幅值可以作为系统是否进入强非线性状态的指示信号。当UKF新息突然增大时,说明系统工况发生了变化,此时CKF的响应往往更可靠。反过来,如果CKF的新息在长时运行中出现异常增长(比如P矩阵受污染),可以临时切换到UKF输出,同时触发CKF的协方差重置。
这个融合策略比我单独用任何一个滤波器都更稳。代价是计算量翻倍,但由于UKF和CKF单步耗时才毫秒级,双滤波器并行在控制器上完全跑得动。后续如果要继续扩展,还可以考虑把自适应机制加进去——在线估计Q/R矩阵——但那是另一个复杂度级别的话题了。
6.5 实车试验的几个实操建议
最后分享几条实车试验的具体经验。第一,第一次上车前一定先做离线仿真数据回放测试,拿仿真数据验证滤波器代码的数值稳定性,别在车上发现问题再下来改代码。第二,试验车的轮速传感器齿圈可能存在安装误差导致的等幅波动,这个低频分量和路面信息混在一起,很难滤除,最好的办法是测量并存储每个齿的误差特征做补偿。第三,IMU安装位置尽量靠近质心,减少横摆和俯仰耦合带来的额外加速度分量。第四,给附着系数的估计值做输出限幅(比如限在0.05到1.1之间),同时加一个一阶低通,能避免控制端因为估计值突变做出过激反应。
我在实际使用中体会到,UKF和CKF的差异在论文图表里会被放大,在实车上反而被传感器噪声和模型误差稀释了一部分。如果你正在搭建自己的估计器,先把传感器预处理、噪声统计、输出限幅这些基本功做好,再回过头对比算法差异,会发现很多纠结的问题已经不攻自破。而如果非要在这两个滤波器之间做个取舍,我的选择是:当前状态维度下CKF的省心程度和稳定性更值得推荐,但保留UKF作为并行备份和工况异常判据,两者结合才是工程上最稳的答案。