UKF与CKF在分布式驱动电动汽车路面附着系数估计中的应用 做底盘控制或者动力学仿真的朋友应该都有体会路面附着系数这个东西平时你心里有个数——柏油路大概0.8雨天压过标线可能掉到0.4冰雪路面直接奔着0.2以下去了。可一旦要把它写进算法里实时估计事情就没那么轻松了。它不像轮速、电流、加速度那样有现成传感器它本质上是个看不见的轮胎力学参数只能通过车辆对外部激励的响应去反推。这几年分布式驱动电动汽车普及之后这个问题的解法有了明显变化轮毂电机扭矩能精确测量、响应又快到毫秒级等于给附着系数估计提供了一台高带宽的激励发生器和一把高精度的观测尺。但激励条件变好不等于估计器就好写非线性建模、滤波算法选型、噪声协方差整定每一步都有坑。这篇博文就是围绕基于无迹卡尔曼滤波UKF和容积卡尔曼滤波CKF的分布式驱动电动汽车路面附着系数精准估计模型这个方向把从模型搭建、算法推导到仿真对比、工程落地的完整链路讲清楚。适合正在做车辆状态估计、底盘控制策略或者刚接触非线性卡尔曼滤波的研究生和工程师参考。我尽量说人话公式只保留必要的重点放在为什么这么做和实际跑起来会碰到什么。1. 路面附着系数为什么难测以及分布式驱动带来的玩法变化1.1 附着系数不是直接物理量它的信息藏在轮胎非线性区里先把手感建立起来。路面附着系数μ的物理定义并不复杂它是轮胎与地面之间可用纵向力、侧向力与垂直载荷的比值上限μ F_x / F_z。可问题在于这个比值不是恒定的它和滑移率、侧偏角、轮胎垂向载荷都强耦合。拿纯纵向着陆的工况举例μ随滑移率s的变化呈现明显的非线性在小滑移率区间比如0~5%轮胎工作在近似线性区附着系数随s快速增长过了峰值点之后进入非线性区s继续增大μ反而下降。关键就在这里——如果车辆一直稳定行驶在小滑移率区间你从轮速和车速信号里能看到的只是那条近似线性段的斜率也就是轮胎的纵向刚度而不是峰值附着系数本身。峰值附着系数恰恰需要轮胎进入比较大的滑移率区间才能暴露出来。而传统车辆想跑到大滑移率意味着驾驶员要猛踩制动或者大力加速工况苛刻不说还伴随着失稳风险。1.2 分布式驱动给了三个实打实的有利条件分布式驱动电动汽车四轮轮毂电机或轮边电机独立驱动在这个问题上和传统集中式车辆有本质区别。第一个优势是电机扭矩精确可知。传统车想获得驱动扭矩得先建模发动机的转矩特性、液力变矩器、变速箱传动效率一长串不确定性下来扭矩信号的误差可能超过10%。而轮毂电机的输出扭矩几乎可以直接拿指令扭矩加上一个小的标定修正来近似误差通常在2%~5%以内。这对于需要以扭矩作为已知输入的估计器来说是质的改善。第二个优势是响应速度。电机的转矩响应时间在几十毫秒量级对比发动机进排气和涡轮的几百毫秒延迟完全不在一个数量级。高带宽的扭矩激励意味着更容易把轮胎激发到非线性区也意味着估计器能更早拿到足够的信息来更新附着系数。第三个优势是四轮独立可控。左右轮、前后轴的扭矩分配可以单独设计这给主动激励带来了空间。举个例子你可以让左前轮施加一个小的扫频扭矩扰动同时保持其他三个轮的输出稳定然后利用车身响应去分离估计某个特定轮胎的附着条件。这种主动激励被动观测的组合拳传统车很难做到分布式驱动却天然支持。1.3 总体技术路线把附着系数估计问题改写成状态估计问题有了上面这些条件工程上普遍采用的路线就是状态估计框架把车辆纵向速度、各车轮转速以及当前的路面附着系数一起放入状态向量利用容易测量到的轮速信号作为观测量用非线性卡尔曼滤波器UKF或CKF在车辆运行过程中递推估计。核心思路是附着系数不能直接测但它的变化会通过轮胎力改变车辆和车轮的运动状态而运动状态能测。滤波器做的就是由果溯因在每一步融合模型预测和测量修正把隐含的μ给捞出来。2. 估计模型搭建状态量、轮胎模型、观测方程一次说清2.1 车辆纵向动力学与车轮旋转动力学模型是估计器的基础模型错了滤波器再高级也白搭。路面附着系数估计的模型一般包括两部分。车轮旋转动力学方程对每个车轮i有[ J_{\omega i} \dot{\omega}i T{di} - F_{xi} r_i - T_{bi} ]其中Jω是车轮转动惯量ω是车轮角速度Td是驱动扭矩Tb是制动力矩Fx是轮胎纵向力r是车轮滚动半径。这个方程的物理含义很好理解电机输入扭矩一部分用来克服轮胎与地面之间的纵向力产生的阻力矩剩下的部分改变车轮转速。F_xi本身就是附着系数和垂直载荷的函数F_xi μ_i(s_i) · F_zi。如果μ估计错了这个方程预测的ω_dot就会和实测轮速变化率对不上滤波器就是靠这个对不上来修正μ的。车辆纵向动力学方程[ m \dot{V} \sum_{i1}^{4} F_{xi} - F_{aer} - F_{roll} ]m是整车质量V是纵向车速F_aer是空气阻力F_roll是滚动阻力。这个方程连接了四个车轮的总驱动力和整车加速度。2.2 轮胎-路面摩擦模型Burckhardt模型和它的参数化现在需要把μ和滑移率s的关系明确表达出来。工程中常用的参数化模型是Burckhardt模型[ \mu(s) c_1 (1 - e^{-c_2 s}) - c_3 s ]c1、c2、c3是三个与路面条件相关的参数。不同路面的典型参数值大致如下路面类型c1c2c3峰值附着系数近似干沥青1.280123.990.520.81湿沥青0.85733.820.350.52雪路0.190494.130.06460.19冰路0.05306.390.0010.05有了这个模型给定滑移率s和路面类型参数就能计算出当前轮胎纵向力系数。反之如果滤波器里的状态量μ代表当前路面的最高附着能力就需要在模型内部根据当前μ反推或匹配一组c参数。常见做法有多种最直接的一种是把μ直接作为Burckhardt模型的缩放因子或者把μ设为待估计状态而c参数取某种名义路面的固定值通过模型误差来让滤波器迭代修正。我仿真时更常用的做法是把μ直接放进Burckhardt模型计算纵向力然后利用模型中的μ与状态向量中的μ对应从而把路面变了这个信息通过观测残差传递回状态估计。这种做法的好处是物理意义清晰坏处是当实际路面和模型假设的路面形状匹配度不高时估计会有偏。没有完美的模型但Burckhardt模型在大多数纵向着陆工况下已经够用。2.3 滑移率的计算和状态向量选择驱动工况下滑移率定义为[ s_i \frac{\omega_i r_i - V}{\omega_i r_i} ]制动工况下是[ s_i \frac{V - \omega_i r_i}{V} ]计算本身不复杂但它要同时用到轮速和车身纵向速度。车身速度的来源是个麻烦点——实车上没有直接测车速的传感器通常要用轮速间接估计或者依赖高精度的GPS/惯性组合。如果车速信号不准滑移率就算不准附着系数的估计一定会被污染。状态向量方面我建议最常用的五维配置[ x [V, \omega_{fl}, \omega_{fr}, \omega_{rl}, \omega_{rr}, \mu]^T ]也就是车辆纵向速度、四个车轮的转速和路面附着系数。如果你用的是前后轴平均轮速模型也可以把状态向量压缩到三维[ x [V, \omega_f, \mu]^T ]降维的好处是滤波器计算量更小、调参更简单但代价是丢失了左右轮和前后轴的差异信息。在四轮独立驱动的场景里我更倾向于保留四个轮速的状态配置因为这能充分利用分布式驱动下各轮扭矩独立可控的特点——某一个轮进入非线性区时其他轮的信号可以作为冗余校验。2.4 随机游走模型把附着系数塞进状态向量的关键一招这里有个建模细节值得单独讲μ本身是有时变特性的物理量它随路面变化而改变但变化规律很难用一个确定的微分方程来描述。工程上处理这类参数有一个经典手段——把它建模为随机游走过程[ \mu(k1) \mu(k) w_{\mu} ]wμ是过程噪声方差大小代表了你认为μ变化得有多快。这个式子其实什么都没说它只是告诉滤波器μ在每个采样周期可以随机变化一点。滤波器通过观测方程的残差来感知μ的真实变化。如果wμ的方差设得很大估计器会快速跟踪μ的突变但同时容易抖动如果设得很小稳态精度好但路面突变时需要很长时间才能跟上来。这个权衡是整篇文章里最需要反复实验调整的点之一后面我会专门讲整定方法。观测方程就相对简单了。四个轮速本身就是状态量的一部分直接作为观测值[ y [\omega_{fl}, \omega_{fr}, \omega_{rl}, \omega_{rr}]^T v ]如果你的系统里还有GPS车速可用也可以把V加进观测向量。观测噪声v的协方差矩阵R可以用实车轮速信号的方差来离线标定。3. UKF和CKF的推导实现UT变换和容积变换的本质区别3.1 为什么EKF在这里吃亏在进入UKF和CKF之前先说说为什么经典的扩展卡尔曼滤波EKF在这个场景下不好使。EKF的做法是在每个时间步把非线性系统在当前状态附近做一阶泰勒展开用Jacobian矩阵代替原来的非线性函数。问题在于路面附着系数估计模型里的非线性程度很高——Burckhardt模型带指数项轮胎力随滑移率变化的曲线在峰值点附近有明显的弯折。一阶线性化在这种强非线性下会引入不可忽略的截断误差轻则估计精度下降重则滤波器发散。UKF和CKF的共同思路是与其把非线性函数线性化不如直接让有限个采样点穿过非线性函数用这些点传播后的统计量来近似状态的后验分布。这两者不需要算Jacobian对于强非线性系统通常有更好的精度和鲁棒性。3.2 UKF无迹变换的一步到位UKF的核心是无迹变换Unscented Transform。它的假设是对于一个n维高斯随机变量x我可以用2n1个精心挑选的sigma点来代表它的分布。这些点被设计为和原始分布的均值、协方差完全一致选定之后把每个点都通过非线性函数f传播再对传播后的点加权求均值和协方差就得到了输出分布的近似。sigma点的选取方式如下[ \chi_0 \bar{x} ] [ \chi_i \bar{x} \sqrt{(n\lambda)P}i, \quad i1,\dots,n ] [ \chi{in} \bar{x} - \sqrt{(n\lambda)P}_i, \quad i1,\dots,n ]其中λ α²(nκ) - n√((nλ)P)_i表示协方差矩阵平方根的第i列。权重为[ W_0^{(m)} \frac{\lambda}{n\lambda}, \quad W_0^{(c)} \frac{\lambda}{n\lambda} (1 - \alpha^2 \beta) ] [ W_i^{(m)} W_i^{(c)} \frac{\lambda}{2(n\lambda)}, \quad i1,\dots,2n ]这里α控制sigma点离均值的远近一般取1e-3到1κ是次级缩放参数通常取0β用于融入先验分布信息高斯分布时取2。你可能已经发现了UKF有3个需要用户指定的参数。这几个参数在低维系统里不太敏感但维度升高之后alpha取不好会导致sigma点散布过远把非线性函数上的大尺度信息带进来反而造成估计偏差。3.3 CKF球面径向容积规则和恒正权重CKF走的另一条路。它不依赖sigma点配权重的任意性而是从数值积分的角度出发用球面径向规则推导出2n个容积点权重均等都是1/(2n)[ \xi_i \sqrt{n} ,[\mathbf{e}_1, \dots, \mathbf{e}_n, -\mathbf{e}_1, \dots, -\mathbf{e}_n]_i ] [ W_i \frac{1}{2n}, \quad i1,\dots,2n ]这里的e_i是n维标准基向量。通俗理解就是在n维空间里系统性地选2n个点均匀分布在单位球面上。这些点先经过协方差矩阵平方根变换映射到状态分布的实际位置再穿过非线性函数。实现上基本分为时间更新和量测更新两大步。时间更新时把容积点通过状态方程传播加权求均值协方差量测更新时再把传播后的点通过观测方程生成预测量测计算新息协方差和互协方差最后按标准卡尔曼增益公式更新。CKF和UKF最大的区别有两点。第一CKF没有需要手动调的参数权重恒正这带来了数值稳定性上的优势——当系统维度较高或者协方差矩阵出现病态时UKF的负权重可能让协方差估计失去正定性CKF则更稳。第二CKF容积点的数目是2n而不是2n1在维度相同的条件下计算量与UKF基本持平平均每个点少算一个实际差异不大。3.4 两种滤波器在算法流程上的差异对照我直接给一个对比表格方便你快速理解对比项UKFCKF采样点个数2n12n待调参数α、β、κ共3个无权重特性W0(c)可能为负恒正精度基准三阶高斯分布下可更高三阶数值稳健性协方差不正定时易发散正定性保持更好工程调试成本需要额外花时间调sigma参数拿来即用就这个附着系数估计场景状态维度5~6非线性存在于轮胎模型来说两种滤波器都能用但如果你是一个偏工程落地的团队我强烈建议先把CKF作为baseline跑通再换UKF对比一下精度差异。很多时候差异小到不值得为那点精度去多调三个参数。4. 仿真验证中的表现对比收敛速度、鲁棒性和计算量的实测体会4.1 一个典型仿真工况干沥青到冰雪路面的突变我自己做对比测试时最常设定的场景是车辆以恒定驱动扭矩在μ0.85的干沥青路面上直线行驶滑移率稳定在5%以内第3秒时路面突然切换为冰雪路面μ降到0.2。这个工况虽然极端但在冬季的实际路况中真的有——高架桥桥面背阴处一瞬间从沥青山路过渡到冰面完全可能。对滤波器来说这种突变是压力测试能同时考察稳态精度和动态跟踪能力。初始状态设置上μ的初值我给0.8协方差初值Pμ设为0.1²相当于容许滤波器在0.5~1.1范围内搜索真实值。过程噪声里μ对应部分的方差Qμ取1e-3量级观测噪声R按轮速传感器1%的典型误差标定。对比时确保两种滤波器的初始条件、噪声参数完全一致只改变算法本身。4.2 两种滤波器在切换过程中的实际表现仿真跑下来两者的整体趋势是一致的在第3秒路面突变之前估计值都稳定在0.8附近误差小于0.03突变发生之后因为随机游走模型本身没有突变先验两种滤波器都有一段延迟大概0.3~0.5秒左右μ的估计值开始向0.2爬。这里有个细节值得注意爬坡过程不是单调的由于车辆动力学在瞬态过程中有振荡μ估计值也会出现一次明显超调随后再回落到真值附近。对比起来CKF在切换过程中的收敛速度略快于UKF超调量也稍小。我的理解是CKF的容积点均匀且权重恒正在高斯假设下能更平稳地把新息信息映射回状态协方差避免过度自信的预测。而UKF经过仔细调参后稳态抖动会更低——因为你可以通过减小α让sigma点更贴近当前均值减少大范围非线性带来的局部畸变。这里有个有意思的权衡UKF的能力上限更高但上限需要用参数调出来CKF则是开箱即用基本不会跑飞。另外一个值得记录的观察是在μ0.85的稳态阶段如果加入测量白噪声UKF的稳态误差波动略大但只要alpha在1e-2到1e-3量级两者的差别对上层控制来说基本可以忽略。真要追求极致精度建议在后处理阶段用滑窗平滑器如RTS平滑能把稳态误差再压缩30%以上但这属于进阶话题。4.3 维度变化对两种滤波器的影响规律我额外做了一组不同状态维度的对比测试三维模型车速、平均前轮速、μ和五维模型四个轮速加车速加μ。三维模型下两种滤波器的精度差异非常小小到基本可以随机选择。五维模型下维度升高之后UKF需要更认真地调alpha否则sigma点容易超出Burckhardt模型的有效域导致每个时间步的预测协方差偏大。CKF在五维模型下表现稳定不需要额外调整。这个规律比较大如果你的项目只需要一个粗略的μ估计用于ABS阈值逻辑三维模型就够了算法选哪个都行如果你要做的是四轮独立扭矩分配、附着系数实时精确估计这种活状态维度上去之后CKF的免调参优势会逐渐放大。这算是我用一个下午跑对比实验得到的最有价值的结论之一。5. 工程化落地时的参数整定与避坑经验5.1 Q和R的初值怎么定现场标定的土办法很多刚接触滤波器的同学一上来就问Q和R应该设多少这个问题其实可以通过实测来回答。R矩阵观测噪声协方差最容易标定车辆在平坦路面直线匀速稳定行驶记录轮速传感器的输出直接计算一段数据的方差这个方差就是R的对角线初值。要注意的是轮速信号里除了传感器白噪声外还有齿圈偏心、轮毂变形导致的周期性误差所以最好多取几段不同车速下的数据取一个中间值或者用FFT把周期性误差分量滤掉后再统计方差。Q矩阵过程噪声协方差相对麻烦因为它代表的是模型本身的不确定性不能直接从传感器的物理噪声推导。我的实践方法是反过来标定先在附着系数已知的场地大部分研发场地都有低附着系数测试跑道跑一段把μ初值设在真实值附近然后从小到大地调整Qμ观察估计结果。Qμ太小时估计值就像冻住了一样路面变化了也不动Qμ太大时估计值会被测量噪声带着来回抖。调到两者平衡的那个量级基本就是靠谱的初值。5.2 低滑移率可观测性陷阱为什么直线匀速时估计值乱飘这是我在实际测试中踩过最深的一个坑。理论上无论滑移率多大系统的数学模型都是成立的滤波器应该能一直工作。但实际跑起来你会发现当车辆处于低速直线匀速行驶、没有明显驱动/制动激励时μ的估计值会逐渐偏离真实值甚至在初始值附近缓慢漂移滤波器看起来是发散了。原因要回到可观测性。附着系数μ对系统输出的影响必须通过轮胎力F_x μ(s)·F_z这个通道体现。当滑移率很小比如2%以下时μ(s)曲线近似线性轮胎力对s的敏感度极高、对μ的敏感度极低——这意味着不管μ取0.5还是0.8车辆的运动状态几乎没有差别观测方程提供不了足够的信息来区分不同的μ。滤波器只能靠随机游走模型的预测撑着估计值自然就飘了。这不是滤波器选型能解决的问题而是传感器激励信息不足的系统性问题。工程上的妥协方案是当检测到低滑移率状态持续超过一定时间时把这个估计值冻结或者施加一个小的扭矩扫描激励分布式驱动正好擅长这个而不是傻傻地继续让滤波器自由更新。我的经验是这一条逻辑看起来简单但它直接决定了估计器在实车上是能用还是只能跑仿真。5.3 轮速信号滤波滤过头一样会出问题轮速信号是附着系数估计器的主输入信号质量直接决定估计结果。工程上最常见的错误是把轮速信号用低通滤波器处理得过狠想消除噪声结果把轮速的动态信息也削掉了。我见过一个典型问题采样率100Hz的轮速信号有人直接用一阶低通截止频率10Hz结果轮速数据看起来丝滑得不得了但滑移率被严重延迟估计出来的μ对路面突变反应迟钝完全跟不上真实情况。我的建议是轮速信号先做一个20~50Hz的带通或低通滤波主要目的是剔除齿圈加工误差和齿槽通过频率带来的周期性噪声保留60Hz以上带宽的动态信息。如果你用的是编码器类型的轮速传感器分辨率较高甚至可以不做滤波直接进估计器靠滤波器内部的观测噪声协方差R来吸收噪声。记住一句话滤波器本来就假设观测有噪你把它滤过头了反而破坏了那个假设。5.4 路面突变时的加速收敛技巧前面提到随机游走模型在路面突变时要花0.3~0.5秒才跟过来这在很多安全场景下太慢了。我试过几种加速手段最实用的一个思路是突变检测协方差重置在运行过程中实时监测μ估计值的导数当连续几个采样周期内∣μ̇∣超过某个阈值时判定路面发生了突变然后把P矩阵中μ对应的协方差项重置为一个较大的值比如0.2²。这样下一个时间步滤波器会认为μ的不确定性突然变大从而给观测残差更高的权重迅速把估计值拉到新的真值附近。这个技巧还能换个角度理解随机游走模型的Qμ是常温配置负责稳态下的精细跟踪突变检测逻辑相当于高温配置只在检测到大变化时才调高处理速度。我测试下来配合这个逻辑路面突变后的收敛时间可以缩短一半以上。注意的是阈值不能设得太灵敏否则正常行驶中μ估计值的微小波动也会触发重置导致估计结果抖动加剧。5.5 实时性评估与嵌入式部署策略最后聊聊部署。我前面推荐的五维UKF/CKF采样率50~100Hz在常见的MCU或者数字信号处理器上单次滤波周期大概是几百微秒到一毫秒量级实时性压力并不大。真正需要注意的反而是内存和协方差矩阵的更新因为每次迭代都要做矩阵平方根分解。对于C代码实现来说我建议预分配固定大小的数组避免动态内存分配如果MCU乘法单元较弱可以考虑用Cholesky分解替代矩阵求逆的标准算法数值稳定性更好。还有一点工程细节仿真里用的浮点双精度到嵌入式上如果换成单精度要全流程重新做一遍离线验证特别是R/Q协方差比较悬殊或者存在病态矩阵的时候单精度数值误差可能让滤波器在极端工况下出现发散。别问我为什么知道问就是吃过亏。稳妥的做法是先用MATLAB/Simulink的code generation工具生成C代码然后用硬件在环测试作为最终验收标准确保估计器的行为在仿真和实车上的一致性。另外个人经验建议在部署前做一轮多工况覆盖测试不光测高附着和冰雪路面还要测洒水的湿滑路、砂石路、起伏路面以及各种路面切换组合。附着系数估计器这类算法真正考验你的不是数学推导能力而是对车辆物理、传感器特性和边界工况的理解深度。模型和算法都是工具怎么用好它们才是这个项目里最花时间的地方。