☰
UKF与CKF的路面附着系数估计:碰撞、对比与融合实践
2026/10/19 2:49:16 网站建设 项目流程

分布式驱动电动汽车的路面附着系数估计,我前前后后折腾了大半年,最大的体会是:算法不是选出来的,是配出来的。标题里“碰撞与共舞”这几个字,算是把UKF和CKF这两类非线性滤波器的关系说透了——它们放在同一个问题里,表现完全是两个路子,一个像反应敏锐但偶尔上头的年轻人,一个像四平八稳但稍显迟钝的老师傅。单独用哪个都不圆满,配合起来反而能把整个附着系数估计模块撑住。这篇文章就把我在项目里的对比测试、融合尝试和踩坑过程完整整理一遍,给正在做分布式驱动控制、车辆状态估计的朋友们做个参考。

需要先说清楚的是,路面附着系数估计这件事,本身不是“选个滤波器”那么简单。它牵扯到轮胎模型、车辆动力学、传感器时延、激励设计,甚至嵌入式平台的计算余量。滤波器只是其中一环,但恰恰是这一环最容易被拿出来单独讨论,也最容易让人产生“换个算法就能变准”的错觉。所以我会先从系统层面讲清楚为什么分布式驱动架构让这件事变得可行,再进入UKF和CKF的原理、对比与融合,最后聊聊实车和仿真中那些文档里不会写的工程细节。

1. 分布式驱动为什么让附着系数这件事“从估不准变成可估”

1.1 传统车辆估附着系数的难处

传统燃油车或者集中式驱动电动车,轮端扭矩不是直接可测的,发动机或单电机的输出要经过变速箱、差速器,再分配到两个驱动轮。控制器能拿到的是发动机/电机端的扭矩请求,但实际传到轮端的有效扭矩受传动效率、离合器状态、差速器内部摩擦等多重因素影响,误差很大。轮速传感器倒是装在每个轮子上,但只有转速信息,没有扭矩信息。

这就导致一个问题:整车控制器想估计路面附着系数,能用的信息非常有限。传统ABS在制动工况下能做滑移率控制,间接知道当前工作点在μ-λ曲线的哪一段,但谈不上精确估计。ESP能通过横摆角速度反推侧向附着,但那是间接且滞后严重的。业内很多团队试着用卡尔曼滤波去估计路面附着,结果发现状态不可观测——因为你根本没往轮胎里注入足够的激励,系统对μ的变化不敏感,滤波器自然无从下手。

1.2 轮端电机带来的三个关键优势

分布式驱动架构把上面这些问题一下子解决了一大半。每个车轮由独立电机驱动,控制器能直接拿到电机的实际输出扭矩、转速和电流。这不是“优化”而是“结构性改变”,因为它让轮端的信息从“间接推算”变成了“直接测量”。

举三个我实际项目里感受最深的优势:

  • 扭矩精确已知且可主动激励。电机控制器的扭矩命令与实测扭矩非常接近,响应在毫秒级。这意味着你可以主动往轮胎里注入激励信号,比如小幅转矩正弦扫频,让附着系数的信息“透”进轮速动态里。
  • 轮速信息分辨率高。电机旋变/编码器的分辨率远高于传统ABS轮速传感器,采样率可以轻松做到100Hz以上,硬件上天然适合做高频状态估计。
  • 各轮扭矩独立可控。对开路面(左侧高附着、右侧低附着)这种工况,传统车只能整体加减速,分布式驱动却可以左右轮分别施加不同扭矩,让两个轮子各自暴露在与自己路面条件匹配的激励中。

第三个优势尤其关键。对开路面是附着系数估计里最头疼的工况之一,但分布式驱动天生就能分轮处理,估计器可以做成左右轮独立的结构,互不干扰。

1.3 附着系数估计的本质:有激励才可观测

在进入滤波器之前,先把这个核心问题讲透:附着系数估计本质上是一个“有激励才可观测”的问题。看车辆纵向动力学,轮速的微分方程里,路面附着系数μ通过轮胎纵向力F_x影响轮速变化,而F_x是μ和滑移率λ的乘积关系。如果车辆处于纯滚动状态——速度恒定、无加速、无制动——滑移率几乎为零,轮速方程里μ的系数趋近于零,系统相当于没有输出对输入(即μ)的任何响应。

这就好比“你光站在地面上不走路,永远不知道地面滑不滑”。在这个状态下,无论你用UKF、CKF还是粒子滤波,从理论上都估算不出附着系数。很多新手在这个问题上栽跟头:在仿真里跑匀速直线工况,发现估计值飘来飘去,然后怀疑算法有问题。其实算法是好的,是工作点本身不可观测。

实际项目中,我们通常的做法是:在每一个估计周期里检测滑移率是否达到阈值,只有滑移率足够大、系统处于μ-λ曲线的敏感区时,才更新附着系数估计;否则就保持上一周期结果或做缓慢回归。这个“激励检测”逻辑,比滤波器本身的选择更加重要。

2. 问题建模:被估计的不只是μ

2.1 单轮动力学方程和滑移率定义

附着系数估计的模型通常从单轮纵向动力学开始。用J表示车轮转动惯量,ω为轮速,T为电机施加的扭矩,r为轮胎滚动半径,F_z为车轮垂直载荷,μ为路面附着系数,则有:

J · dω/dt = T - μ · F_z · r

滑移率λ的定义需要区分驱动和制动。驱动工况下常用:

λ = (v - ω·r) / v

其中v是车身纵向速度。这里要特别提醒一句:v的精度直接影响λ的计算,进而影响后面所有估计结果。实际应用中,v通常不是直接测量值,而是由轮速融合、惯导或车辆动力学观测器提供的估计值。如果v本身有偏差,λ就有偏差,那么滤波器就算原理再完美,喂进去的是脏数据,输出也必然不干净。

2.2 轮胎模型的选择:刷子模型还是魔术公式

轮胎纵向力与滑移率之间的关系,需要用一个模型来描述。工程上常见的两个选择是刷子模型和魔术公式。

刷子模型的简化形式是:

μ(λ) = C₁λ - C₂λ² + C₃λ³

低滑移区(λ大概在0.15~0.2以内)精度尚可,参数少,物理意义清晰,便于实时估计。它的峰值附着系数和对应的最优滑移率都能从系数里解析出来,这对后续控制很有价值。

魔术公式则是:

μ(λ) = D · sin(C · arctan(Bλ - E(Bλ - arctan(Bλ))))

参数多,全工况拟合精度高,但引入的未知参数也更多。在实时估计中,参数越多,辨识问题越复杂,滤波器需要估计的状态维数就越高,可观测性反而变差。

我做了一个对比,列在这里方便大家选型:

对比项刷子模型魔术公式
参数数量少(3个核心系数)多(B、C、D、E等)
全工况精度中高,饱和区偏差增大高
实时估计友好度高,参数可随车在线修正低,参数辨识困难
曲线峰值可解析性可解析可解析但表达式复杂
工程推荐度推荐做实时估计适合离线标定和仿真基准

我在项目中默认选刷子模型。理由很简单:实时估计的首要任务是“稳”和“可收敛”,不是“全工况精度最高”。模型参数少,状态维数就低,UKF和CKF的压力都小很多。

2.3 状态空间与观测方程设计

确定了轮胎模型之后,就可以写状态空间方程了。我常用的做法是估计两个状态:当前利用附着系数μ和轮胎纵向刚度C₁(刷子模型里的线性系数)。把μ和C₁都建模为随机游走过程:

μ(k+1) = μ(k) + w₁(k) C₁(k+1) = C₁(k) + w₂(k)

其中w是过程噪声,反映了我们对状态变化速率的预期。μ作为路面条件的慢变特征,过程噪声可以设置得小一些;C₁作为轮胎特性参数,同样缓慢变化。

观测方程来自轮速动力学,将离散后的轮速作为输出:

ω(k+1) = ω(k) + Ts/J · [T(k) - μ(k) · C₁(k) · λ(k) · F_z · r] + v(k)

其中Ts为采样时间,v(k)为量测噪声。这里的输入是电机扭矩T和车速v(由其他模块提供),输出是轮速ω。

注意这里有一个意料之外但很重要的细节:为什么同时估计μ和C₁,而不是只估计μ?因为在刷子模型里,μ和C₁共同决定了低滑移区的力,两者存在耦合。如果只估计μ而把C₁当作固定常数,一旦轮胎磨损或者胎温变化导致C₁漂移,μ的估计会被系统性拉偏,而且你很难分辨到底是路面变了还是轮胎变了。同时估计两个状态,虽然增加了滤波器负担,但能把模型的失配问题暴露出来、缓解掉。在我的测试里,这个改动对估计精度的提升比单纯换一个更好的滤波器还要明显。

3. UKF和CKF的原理对决:一个靠sigma点,一个靠容积点

3.1 EKF为什么在这里会“卡壳”

讲UKF和CKF之前,先说说为什么不用扩展卡尔曼滤波(EKF)。EKF的思想是对非线性函数做一阶泰勒展开,然后套用标准卡尔曼滤波框架。问题在于,μ-λ曲线在峰值附近斜率变化非常剧烈,一阶线性化误差很大,协方差传播容易出现偏差,严重时直接发散。

再有就是工程痛苦:EKF需要推导雅可比矩阵,在刷子模型这种非线性中,雅可比表达式既繁琐又容易写错,改一个轮胎模型就要重新推一遍。相比之下,UKF和CKF都是“不计算导数”的滤波器,只需要函数本身,代码复用性好很多。

3.2 UKF的UT变换:用加权点逼近统计量

UKF的核心是无迹变换(Unscented Transform,UT)。思路很直观:与其在非线性函数上做局部线性化,不如直接取一组带权重的sigma点,把这组点经过非线性函数传递之后,再统计均值与协方差。本质上是用“采样点集合”的传播来近似概率分布的传播。

对于n维状态,UKF选取2n+1个sigma点:

χ₀ = x̄ χᵢ = x̄ + (√((n+κ)P))ᵢ χᵢ₊ₙ = x̄ - (√((n+κ)P))ᵢ

其中κ是尺度参数,P是状态协方差矩阵。中心点的权重可以为正也可以为负,这个细节是UKF最麻烦的地方:如果κ取得不合适,中心点权重可能为负,理论上会导致协方差矩阵失去正定性,数值上表现为滤波发散。

但UKF的优点是它能捕捉到高斯分布的三阶矩,在低维问题中有很高的精度。状态维数在2到4维时,UKF的估算精度足够好,而且实现起来非常直观。

3.3 CKF的三阶球面径向容积规则

CKF是另一条路,基于三阶球面径向容积规则。它从高斯加权积分的数值近似出发,把积分分解成球面积分和径向积分两部分,最终得到一组非常简洁的容积点:

ξᵢ = √n · eᵢ,ξᵢ₊ₙ = -√n · eᵢ,i = 1, 2, …, n

一共2n个点,每个点的权重都是1/(2n)。这个结构和UKF最大的区别是:没有中心点,所以不存在负权重问题,数值稳定性天然更好。

从工程角度看,CKF的代码比UKF更简洁——不需要计算中心点置信权,不需要调κ这类尺度参数。你只要把状态维数n带进去,就能直接生成容积点。这在嵌入式开发里节省了很多调参时间和试错成本。

3.4 各项对比:精度、计算量、数值稳定性

把两者的完整差异整理成一张表,是我在项目评审时反复用过的材料:

对比项UKFCKF
采样点数2n+12n
有中心点权重有,可能为负无,全部为正
需要调节参数κ、α、β等无
三阶矩捕获能力有无(严格为二阶精度)
协方差正定性风险存在较小
数值稳定性中高
代码复杂度中低
高维(>5)表现可能出现非正定更稳健

不过在这里我必须说句公道话:在路面附着系数估计这个场景下,状态维数一般只有2到4维,UKF和CKF的精度差异几乎可以忽略不计。真正的差异出现在系统进入强非线性区域、或者面对模型失配和异常量测的时候——这也是后面“碰撞”与“共舞”的前提。

4. 碰撞:冰雪、对开和附着突变下的对比实测

4.1 测试工况怎么设计才公平

要对比UKF和CKF,光在一种工况下比没有意义,必须覆盖足够多的典型路面场景。我在仿真环境和一轮实车测试中采用的三种工况:

  • 工况A:整体低附着。模拟冰雪路面,μ稳定在0.2附近。考验滤波器在低附着下的小信噪比表现。
  • 工况B:对开路面。左轮μ=0.8,右轮μ=0.2,左右轮估计独立。考验滤波器在轮间差异大的情况下的独立性。
  • 工况C:附着突然变化。车辆从高附着路面驶入一片冰水混合区,μ从0.8突降到0.3,考验滤波器的响应速度和抗发散能力。

激励信号统一采用“基础扭矩+小幅正弦叠加”的模式。正弦幅值控制在保证不引起明显纵向冲击的前提下尽可能大,频率选1到3Hz。这个频率范围能覆盖μ-λ曲线的敏感区,又不会让整车产生让人不适的顿挫。

4.2 UKF的表现:跟得快但有时“闹脾气”

先说UKF在测试里的表现。在工况C这种附着突变场景下,UKF的优势非常明显:大约在转入冰面后60到80毫秒就能捕捉到附着下降的趋势,收敛速度很快。代价是它的输出伴随明显的超调和短期振荡——在峰值附着附近的估计值会先往下冲过头,再回调,这跟它对初始协方差参数的敏感性直接相关。

如果初始协方差设置不合理——比如设得太小、过于相信初始估计——UKF在突变时刻会表现出“固执”,估计值长时间咬住旧值不放。我们第一次测试时,就是因为协方差初值设得保守,导致附着突变后UKF几乎原地踏步,反而被CKF反超。这个问题只靠调参很难根治,因为没有一个固定的协方差初值能同时适配渐变工况和突变工况。

4.3 CKF的表现:稳重但反应慢半拍

CKF的走势和UKF截然不同。它在工况A(纯冰雪路面)上表现得非常稳定,估计曲线平滑,没有明显的抖动,对初始协方差的敏感度也明显低于UKF。在工况B(对开路面)上,左右轮两个独立滤波器都能维持在各自正确的水平,没有出现串扰。

但工况C给它出了难题:附着突变时,CKF的收敛时间明显比UKF长,大概要多出150到200毫秒。这个滞后在纯仿真里可能感觉不出来,但放到实际车辆的扭矩分配控制里,200毫秒足够让车辆在多变的冰雪路面上走出一段可观的距离。如果后续控制器完全依赖这个附着系数做扭矩决策,慢半拍可能意味着后轮先一步滑出去。

4.4 一组典型数据:误差、收敛时间、发散风险

把我在测试中得到的典型数据整理如下(注意这里是我在某模拟环境下的数据,不同车辆和平台会有差异,但趋势一致):

指标UKFCKF
工况A稳态RMSE0.0180.015
工况B左右轮误差均值0.0250.022
工况C 95%收敛时间约90ms约240ms
工况C最大超调0.120.04
初始协方差敏感度高低
模型失配时发散风险中高低

一句话总结就是:UKF“快而脆”,CKF“稳而钝”。这个差异在激励充分、模型匹配良好的条件下几乎被抹平,但只要工况往“突变”或“失配”方向走,两者的缺点就会被放大。既然单独用谁都不完美,下一步自然是考虑把它们结合起来。

5. 共舞:融合与切换策略的工程实现

5.1 思路一:基于新息卡方检验的自适应切换

共舞的第一种做法是“按需切换”。在正常情况下使用UKF,获得快速响应;通过新息(量测残差)来监测滤波器的健康状态,一旦检测到异常,就切换为CKF作为主力滤波器。

具体实现上,计算新息ν及其协方差S:

ν = z - ẑ d = νᵀ · S⁻¹ · ν

在滤波器正常工作、假设新息服从高斯分布的前提下,d近似服从卡方分布,自由度为量测维数。设阈值为χ²表查出的置信区间,当d超过阈值时,认定系统进入了非线性强、模型不准或路面突变的异常状态,此时切换到CKF,利用它的稳定性和对初始值不敏感的特点,把估计重新稳住;当d回归到阈值以内、且估计值连续若干周期稳定之后,再切回UKF,恢复快速跟踪能力。

这个方案的优点是实现简单,计算负担小;缺点是切换不可避免带来估计值的跳变。如果上层控制器直接使用这个估计结果,跳变可能引起扭矩阶梯式变化。缓解办法是切换时做一阶惯性过渡,让输出平滑变化。

5.2 思路二:双滤波器并行与加权融合

第二种方案更“共舞”——两个滤波器同时运行,各自输出估计结果,按某种置信度做加权融合。这里的关键是动态置信度设计。我采用的指标是“理论新息协方差与实际新息方差的匹配程度”,实际新息协方差偏大说明真实误差被低估,这个滤波器当前可信度就低。

权重可以这样计算:对每个滤波器,计算一个评价指标M = trace(S) 或马氏距离的平均值,然后取:

wᵤₖf = (1/Mᵤₖf) / (1/Mᵤₖf + 1/Mₖf) wₖf = 1 - wᵤₖf

这样做的好处是没有硬切换,加权结果连续平滑,两个滤波器的优势天然互补:正常时UKF权重大,保持快速性;异常时CKF权重自动抬升,拉住稳定性。全过程的输出始终是连续曲线,不会产生跳变。

代价也很明确:计算量翻倍。不过在我们2到4维状态的模型下,100Hz频率跑两套滤波器在主流嵌入式平台上问题不大。这也是我最推荐的方案,因为它在工程上最“无脑”——不需要根据工况判断切不切换,置信度自己会说话。

5.3 思路三:残差驱动的降级保护

第三种方案可以称为“主备冗余”。主滤波器用UKF,因为它快;CKF不参与输出,而是作为监控器常驻运行。每次滤波完成后,比较两套滤波器的状态估计值。如果两者偏差超过某个阈值,说明主滤波很可能发散,此时输出自动切换到CKF的估计值,并将CKF的协方差作为新状态重置给UKF。

这种结构适合对未来功能安全要求较高的场景。附着系数一旦估计错误,直接影响到四轮扭矩分配和稳定性控制,后果比单纯估计不那么准要严重得多。有个后备通道兜底,系统安全性和可用性都能上一个台阶。

5.4 三种策略的选型建议

方案实现复杂度输出平滑性鲁棒性适用场景
自适应切换低中中算力紧张、需要快速改造
双滤波加权融合中高中高平衡算力与稳定性的常规选择
主备降级保护中中高功能安全要求高的控制链路

我个人在项目里的落地顺序是:先做方案一,验证“两种算法确实有互补性”,然后升级到方案二,作为正式版本。方案三留给后续的功能安全迭代,因为它涉及更多的诊断逻辑和标定工作。

6. 实车与仿真测试中躲不开的那些坑

6.1 传感器时序不同步比算法误差更可怕

滤波器的精度上限,很大程度上取决于输入数据的质量。我在实际调试中遇到的最隐蔽问题,是电机扭矩指令和轮速数据之间的时间错位。

电机控制器发出扭矩是怎么实现的?你在CAN总线上发一个扭矩请求,经过通信延迟、电机响应延迟之后,实际扭矩才真正作用到车轮上。如果滤波器的观测方程里用的是“当前请求扭矩”而不是“实际作用扭矩”,那么激励的相位就跟实际不符。轮速信号经过滤波或AD变换之后也会有滞后。这种几十毫秒级别的相位差,在急加速和扫频激励时会让观测残差变大,滤波器会误认为模型不准,进而错误地放大过程噪声,导致估计值飘。

解决思路是:先在台架上标定一条“扭矩指令到轮端响应”的延迟曲线,然后在滤波器的时间更新里做相位补偿。很多做车辆状态估计的人忽视这一层,总觉得算法问题就是算法问题,其实有一半的“算法发散”,根子都在传感器数据对齐上。

6.2 轮胎磨损和胎温带来的模型失配

刷子模型的C₁参数会随轮胎磨损和胎温变化明显漂移。同一个路面附着条件,新胎和磨损胎的μ-λ曲线斜率可以差20%以上。如果模型里固定了C₁,估计结果就会被系统性拉偏。

应对办法有三个层级。第一层是把C₁纳入状态向量在线估计,像我前面说的那样同时估计μ和C₁;第二层是设定合理的轮胎状态切换条件,比如在车辆静止且安全的时刻,对模型参数做一次性重新标定;第三层是在滤波器的过程噪声里给C₁增加一定的扰动方差,让滤波器“不把C₁当作完全已知的常数”。我的建议是三层都做,单靠哪一层都不够稳。

6.3 激励不足时的发散问题与保护策略

匀速直线巡航时,滑移率很小,系统对附着系数的可观测性极低。这时UKF和CKF的输出都会慢慢漂向初始值或上一次的估计值,看起来像是“收敛了”,但实际是假收敛。如果这个假收敛值正好偏得离谱,那下一步一旦进入制动或加速工况,估计结果就会突然跳回来,很容易让人误以为算法坏了。

保护策略非常简单但非常有效:监测滑移率绝对值,当λ小于某个阈值(我习惯用0.01)时,冻结状态更新,只做预测。上层控制器继续使用冻结前的估计值,直到下一次充分激励出现,才恢复滤波器的更新。这样既避免了假收敛,又不会在关键时刻输出一个飘忽不定的值。

6.4 嵌入式平台的计算量实测与调优

最后说说硬件上的真实感受。我们在一块2.4GHz的嵌入式控制器上做了FP32精度的实测:4维状态下,UKF单个周期大约需要60微秒,CKF大约50微秒,双滤波并行融合大概120微秒。在100Hz的控制周期(10毫秒)下,这个计算量占比不到2%,完全在安全区。

真正常见的性能瓶颈反而不在滤波器本身,而在协方差的对称化和矩阵求逆。滤波器跑久了,因为浮点舍入误差,协方差矩阵会逐渐失去对称性,导致后续运算出现负对角元,最终发散。我的习惯是每个周期对协方差做一次“强制对称化”:先计算上三角,再镜像到下三角,成本极低,但能避免很多莫名其妙的问题。

矩阵求逆如果用标准的高斯消元法,在高维时开销大且容易出数值问题。建议直接做Cholesky分解后解线性方程组,既快又稳。CKF的容积点分布天然适合配合Cholesky分解使用,这一点在嵌入式实现时会有很直观的体感差距。

写到最后,说一点个人操作中的体会。做附着系数估计,滤波器用得越深、融合方案堆得越花哨,越要警惕:先把传感器对齐、激励设计和模型标定这三件基础事做扎实,滤波器才有发挥的空间。UKF和CKF的“碰撞”只是表象,真正有价值的“共舞”,是在理解了各自脾气之后,让它们在系统里各就各位、各司其职。

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

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

立即咨询