首页 / 资讯中心 / 文章详情

分布式驱动电动汽车路面附着系数估计:UKF与CKF滤波对比

分布式驱动电动汽车路面附着系数估计:UKF与CKF滤波对比 ★ FEATURED ARTICLE
做分布式驱动电动汽车控制的人几乎都会遇到一个绕不开的问题路面附着系数到底是多少。它不像车速和轮速那样可以直接从传感器读到也不能靠查表打天下因为同一段路轮胎磨损、胎压、速度、载荷一变实际能用的附着极限就全变了。我在这类纵向稳定控制项目中做过一轮比较完整的估计器开发核心思路就是把四个轮毂电机的扭矩、轮速和车辆状态全部利用起来分别用无迹卡尔曼滤波UKF和容积卡尔曼滤波CKF估计路面附着系数。这篇文章就把我从建模、滤波原理、参数调到对开路面和突变路面测试的完整过程展开讲尤其把两种滤波的差异和适用边界说透。1. 分布式驱动为什么天生适合做附着系数估计1.1 分布式驱动带来的“额外红利”传统燃油车或者集中式电驱动车想估计路面附着系数也不是不行但有个很尴尬的问题你很难精确知道每个车轮上到底输出了多少扭矩。发动机和变速箱之间的扭矩损失、离合器的滑动、半轴的扭转变形都会让“指令扭矩”和“实际轮端扭矩”差一截。差这一截轮端力估计就会偏附着系数估计自然也跟着漂。分布式驱动电动汽车在这方面有明显优势。四个轮边电机或者轮毂电机的扭矩响应非常快通常几毫秒就能把指令扭矩执行到位而且电机本身有精确的电流环可以通过电流和电机参数估算输出扭矩。换句话说轮端驱动扭矩可以当成已知量参与到估计里。这等于把一个原本“输入不可测”的系统变成了“输入基本已知”的系统。对滤波估计来说输入误差小了剩余的不确定性就能更多地集中在路面附着系数这个待估计量上。另外一个红利是激励能力强。附着系数估计本质上是靠轮胎力和轮胎滑移的关系反推出来的。如果没有足够的滑移率变化估计器是没有信息可用的。分布式驱动可以由单个电机主动叠加小幅扭矩扰动在不打扰驾驶员的情况下产生滑移率激励四个轮子还可以分别做不同频率的激励这样左右胎面接触的路面附着情况也能分开辨识。这在传统车上是很难实现的。1.2 估计出来的附着系数到底喂给谁有人可能会问做这么多工作估计出μ值以后给谁用。最直接的需求是纵向稳定控制里的驱动防滑和制动防抱死。传统系统靠滑移率阈值触发但阈值是标定出来的不一定适配当前路面。如果能把路面附着系数实时估计出来再和峰值附着系数对应的最优滑转率做映射扭矩控制就能真正做到“贴着附着极限跑”。在分布式驱动平台上估计结果更重要的应用是扭矩分配。比如对开路面左侧是高附着、右侧是低附着如果还是一味地按固定比例分配扭矩低附着侧很快打滑整车横摆力矩会突然变大。有了每个车轮对应的附着系数估计值扭矩分配层就可以主动减小低附着侧扭矩同时用另一侧扭矩补偿让车辆按照驾驶员意图行驶。我参与的某分布式样车项目里最初控制策略用的是固定阈值滑转率控制后来换成了附着系数估计加最优滑转率查表低速起步工况的表现提升很明显。这也是我把这个课题拿出来写的原因之一每一步踩坑都对实际工程有影响而不是纯粹的算法表演。2. 估计问题怎么建模状态量、观测量和轮胎模型2.1 状态方程与增广μ附着系数估计不能只靠一个轮胎模型硬算。静态公式“μ等于驱动力除以垂直载荷”听着简单实际一用就出问题因为轮胎力不是直接测出来的车辆在加速、制动、转向时还有载荷转移垂直载荷是动态变化的。所以我更习惯把问题放在滤波框架里用状态方程描述车辆运动和轮胎力生成过程再用传感器测量值去修正状态。我用的状态向量包含纵向车速、横向车速、横摆角速度、四个车轮转速和四个车轮对应的路面附着系数。写成向量就是x [v_x, v_y, γ, ω_fl, ω_fr, ω_rl, ω_rr, μ_fl, μ_fr, μ_rl, μ_rr]^T一共11维。前7个是车辆和车轮的运动状态后4个是待估计的路面附着系数。用“随机游走”模型描述μ的变化也就是μ方向没有先验动态知识只给它一个很小的过程噪声让滤波根据测量值自己调整。整车运动方程用的是常见的三自由度平面模型加四个车轮的旋转动力学。以纵向为例作用在车辆上的总纵向力包括四个轮胎纵向力由车辆质心处的加速度决定。轮胎力进入车身方程之前先通过车轮动力学方程和驱动扭矩建立联系。每个车轮的旋转方程可以写成J_w · dω_i/dt T_i - F_xi · R_e - T_br_iJ_w是车轮加电机转子的等效转动惯量T_i是电机输出扭矩F_xi是轮胎纵向力R_e是轮胎有效半径T_br_i是制动力矩。这里的关键点是F_xi本身又和μ相关所以状态方程是强耦合的。也正是这种耦合才让滤波可以通过轮速、加速度和横摆角速度的测量值反推出μ。2.2 轮胎模型为什么Dugoff比魔术公式更适合滤波轮胎力模型是整条估计链路的核心。轮胎模型决定了“给定μ、滑移率、侧偏角轮胎能产生多大的力”。模型越准估计偏差理论上越小但模型复杂度也会直接拖累滤波器的实时性和稳定性。魔术公式精度高对轮胎的非线性特性描述也细腻但参数非常多。要想在每个车轮上都有准确的BCDE参数代价很高而且魔术公式里μ和轮胎力之间的关系并不像Dugoff那样直观做状态增广滤波时雅可比或者数值积分都更麻烦。EKF被这类模型搞得头疼UKF和CKF虽然不显式计算雅可比但依然要对非线性函数做大量点传播轮胎模型越复杂计算负担越大。我实际项目中用的是Dugoff变形模型。它的核心思想是用一个限制因子把轮胎力约束在附着极限内。简化表达式大概是F_x C_x · λ/(1λ) · f(L)F_y C_y · tan(α)/(1λ) · f(L)其中λ是滑移率α是轮胎侧偏角C_x和C_y分别是纵滑刚度和侧偏刚度f(L)是一个饱和函数。L的表达式里包含μ以及纵向和侧向两部分力信息。当L小于1时轮胎处于线性或者过渡区f(L)呈二次函数衰减当L大于等于1时认为轮胎力已经完全饱和。用这个模型的直接好处是μ被显式地放进了轮胎力的表达式中状态增广之后滤波可以非常自然地通过修正μ来匹配实际轮胎力。另一个好处是计算开销小。对于嵌入式端的实时滤波一个车轮一次计算量少四个车轮加起来也不会让运行时间翻倍。2.3 观测方程与可观测性前提滤波不是“猜状态”而是“猜完再用测量值校正”。我选的观测量包括纵向加速度、侧向加速度、横摆角速度、四个轮速。也就是IMU的信号加上轮速信号。这些信号在分布式驱动车辆上基本都有不需要额外加传感器。观测方程需要把状态映射到这些观测量上。轮速可以直接用状态里的四个ω_i。纵向加速度和侧向加速度则由整车方程中的加速度表达式给出也就是说观测方程和状态方程共用同一个车辆动力学模型。这是滤波器的好处也是风险模型如果偏差大观测噪声矩阵R再小也救不回来。还有一个重要前提可观测性是工况相关的。如果车辆匀速直线行驶路面附着良好轮胎没有明显滑移那么附着系数对轮速和加速度的影响非常微弱信息量不足以让滤波器收敛。这种情况下不管UKF还是CKF都会出现μ估计值漂移。我在设计时会在估计器前面加一个激励触发逻辑只有当前滑移率或者侧偏角超过一定阈值才真正把μ作为活跃状态更新否则把μ冻结在上一次的估计值上。这个策略虽然朴素但在实际工程里非常管用。3. UKF和CKF的原理与差异3.1 UKF怎么选点UKF的思想是“概率分布比非线性函数更容易近似”。它不去对非线性函数求导而是在当前状态均值附近选一组sigma点让这些点经过非线性函数传播之后用加权统计量估计新的均值和协方差。UKF选点公式是经典的。假设状态维数是n当前状态均值是x协方差矩阵是P那么选取2n1个sigma点。第一个点是均值本身其余点是通过对协方差矩阵做Cholesky分解沿每个特征方向按一定缩放距离取正负两个点。缩放距离由参数λ决定而λ又由α、β、κ三个参数控制。参数不同sigma点的分布就不同滤波精度和数值稳定性也会不同。正因为有三个自由参数UKF在调参上特别灵活。对附着系数估计这种强非线性、突变工况多的问题调得好的UKF可以追踪得很快但调不好也会出现协方差矩阵奇异、估计结果剧烈抖动的情况。很多教科书推荐高斯分布下β取2κ按3-n取但在实际高维状态下这条经验并不总是好用后面我会细说。3.2 CKF怎么选点CKF走的是另一种路径用三阶球面-径向容积规则逼近高斯加权积分。看起来很高深落地却很朴素。CKF每个时间步只选2n个容积点每个点的权重完全相同都是1/(2n)。这些点同样是沿着协方差矩阵的Cholesky分解方向取正负两个但缩放的尺度直接是sqrt(n)没有额外的α、β、κ参数。这句话值得再强调一遍CKF没有自由调参参数。工程上这既是优点也是缺点。优点是模型搭好之后少了反复试参数的过程数值上四个容积点权重都是正的协方差不容易因为负权重而失去正定性。缺点是少了一个可调自由度当你想通过调参让估计对突变路面更敏感时能动的只剩过程噪声Q而不是滤波算法本身的点分布。从算法谱系上看CKF可以看作UKF在无迹变换参数取特定值时的特例。很多文献讨论过这个关系。UKF的2n1个点里均值点包含了更多分布信息所以在大范围非线性下可能有优势但CKF的正权重和简单结构让它在高维和长时间运行时更稳。两者到底谁好得放到具体工况里打分。3.3 一组表格看懂差别对比项UKFCKF采样点数2n12n可调参数α、β、κ无权重符号可能出现负权重全部为正权重均等于1/(2n)协方差保持能力参数不当时容易非正定通常更稳定理论精度对高斯分布可逼近三阶矩对高斯积分保持三阶精度调参工作量高经验性强低参数少计算量级别略高与UKF同量级略低这张表能看出来CKF最打动工程人的一点是“不挑参数”。在做项目的时候α、β、κ三个参数对UKF的影响很多时候要到测试台架上才能感受到而CKF几乎开箱即用。但事情也不能绝对化后面测试结果会说明UKF在某些特定工况下反而能给更“激动”的响应。3.4 为什么EKF在这里不好用插入一段EKF。很多人看到UKF和CKF会问EKF还能不能打。EKF的核心是把非线性函数在当前状态处做一阶泰勒展开然后用雅可比矩阵传播协方差。这要求模型可导而且要求局部线性化误差足够小。Dugoff模型里的f(L)是一个分段函数在轮胎力进入饱和区的那一点附近导数变化非常剧烈。EKF在这个区域很容易产生大的线性化误差协方差估计偏小滤波器对测量值的信任度也会出问题。更麻烦的是当状态里有μ这种参数到了边界比如低附着路面上μ接近0.2EKF的雅可比近似会变得非常敏感稍有不慎就发散。UKF和CKF本质上都是确定性采样滤波无需解析雅可比也不需要担心分段点是“断开”的。它们只是把状态点丢进原模型里算一遍非线性函数本身再复杂只要点的传播没有歧义就能工作。这也是我把比较对象限定在UKF和CKF之间的原因。4. 工程实现与关键参数设置4.1 典型整车参数状态方程不能空着跑整车参数必须先定下来。我做一个示例参数表实际项目里要用自己车辆的标定数据别直接抄。参数示例值说明整车质量1500 kg包含驾驶员和电池包的测试质量质心到前轴距离1.20 m影响纵向载荷转移质心到后轴距离1.40 m轴距2.6 m轮距1.55 m前轮距和后轮距近似相同车轮有效半径0.32 m随胎压变化需标定车轮转动惯量1.2 kg·m^2包含轮毂电机转子等效部分轮胎纵向刚度50000 N微调后匹配仿真车辆轮胎侧偏刚度60000 N/rad线性区近似值这些参数里车轮有效半径和车轮转动惯量对估计结果的影响最大。有效半径哪怕偏差百分之二轮端力反算出来的误差就会明显影响μ估计。我在项目里专门做了一次半径在线校准办法是空载时用GPS测速和轮速对比低速段取平均效果不错。4.2 协方差初始化初始协方差P0代表对初始状态估计的不确定程度。车速、横摆角速度这些状态可以直接从传感器初始化置信度高初值方差给小一点。轮速也一样有编码器读数初值可信。μ就比较麻烦。路面附着系数没有任何传感器可以直接测初始先验只能给一个中间值比如0.8但要把不确定性给大才能让滤波在启动后快速修正到真实值。我把μ对应的P0协方差设为0.1^2也就是初始标准差0.1。这个量级既能允许快速调整又不会让估计在启动瞬间乱飞。状态和协方差初始化对两种滤波的影响方向是一样的但程度不同。UKF如果初始协方差给得太大加上参数选择不当很容易在第一个时间步就出现Cholesky分解失败CKF的权重全为正对初始协方差的容忍度会高一些至少不会因为负权重把协方差“拉弯”。4.3 噪声矩阵Q和R设置心得过程噪声Q要反映状态方程模型误差。运动状态的通知噪声不能给太大否则滤波会把状态当成随机游走估计结果平滑性变差。四个μ的过程噪声建议先给一个很小的值比如1e-4量级等测试时再按工况调整。测量噪声R要贴近传感器真实精度。轮速传感器在低转速下分辨率下降R可以按轮速大小分段处理IMU的加速度噪声在高频段更明显采样前需要先做低通滤波。我在项目里把加速度R设为0.05 m/s^2量级横摆角速度R设为0.01 rad/s量级轮速R设为0.1 rad/s量级。这些值不是从手册抄来的而是先把车辆停在平地上采集一段静态数据统计传感器噪声方差得到的。给一个容易踩的坑过程噪声Q里μ对应的方差如果太小滤波器会把μ的变化完全归因于噪声导致估计更新很慢。高附着路面问题不大但从高附着突然跳到冰雪路面时估计跟不上实车就会有“该限扭没限扭”的危险。所以我在每个滤波周期里还会根据滑移率变化量动态放大μ的Q值相当于给估计器加了一个“工况突变唤醒”机制。4.4 滤波更新代码骨架CKF为例CKF的实现逻辑很清晰核心就是时间更新和测量更新两个阶段。我摘一段能表达思路的伪代码实际项目里需要处理更多边界条件。# CKF 时间更新 # x: 状态均值, P: 协方差, n: 状态维数 L cholesky(P) # P L * L^T # 生成 2n 个容积点先存成 n x 2n 矩阵 points zeros((n, 2 * n)) for i in range(n): points[:, i] x sqrt(n) * L[:, i] points[:, n i] x - sqrt(n) * L[:, i] # 每个容积点通过非线性状态方程 points_pred state_transition(points, u, dt) # 计算预测均值 x_pred mean(points_pred, axis1) # 计算预测协方差 P_pred zeros((n, n)) for i in range(2 * n): diff points_pred[:, i] - x_pred P_pred diff[:, None] diff[None, :] P_pred P_pred / (2 * n) QUKF的代码骨架在结构上几乎一样区别只在sigma点数量和权重。UKF多一个均值点并且每个点的权重不一样协方差更新要写成加权和的形式。两套滤波器放在同一个模型框架里切换测试只需要改采样函数这对对比试验非常方便。5. 仿真对比实录从对开路到突变路面5.1 测试场景设计仿真环境用的是某商用车动力学软件和车辆动力学模型滤波算法单独放在另一个进程里通过接口交换控制信号和传感器数据。我设计了三类标准场景。第一类是对开路面起步左侧路面附着系数0.8右侧0.3车辆在起步时左侧高附着、右侧低附着。这类工况考验估计器能不能区分左右轮的路面差异。第二类是突变路面先在0.8的高附着路面上稳定行驶5秒时进入一段冰雪路面附着系数直接降到0.2。这类工况考验滤波器对突变参数的跟踪速度。第三类是低附着连续正弦转向路面附着系数0.3车辆做变道或者蛇形考察在持续侧偏激励下估计的稳定性。5.2 估计结果怎么读看结果不能只看最后有没有收敛要看三个维度收敛时间、稳态误差、波动幅度。收敛时间指μ初值0.8到接近真值的时间稳态误差指稳定后估计值和真值之间的平均差波动幅度指估计值的标准差。对开路面场景里UKF和CKF都能把左右附着系数区分开。左前轮估计值都能落在0.78到0.83之间右前轮也都能落到0.28到0.33附近。稳态误差大都在0.05以内个别时刻误差会到0.08。差异更明显的是波动幅度CKF的估计曲线更平滑UKF如果参数调得激进曲线会带着高频小尖刺尤其是左侧高附着和右侧低附着切换的瞬态时刻。突变路面场景是最有意思的。0.8到0.2的突变对估计器来说很难。因为轮胎力模型从饱和状态一下进入低摩擦状态测量值的信噪比也变差。两种滤波都能在2秒内完成主要修正但响应速度有细微差别。CKF对突变的响应稍微快一点原因在于它的容积点全为正权重协方差估计更“老实”不会因为负权重造成过度自信。这个结论在我做多次蒙特卡洛试验后基本稳定。5.3 UKF与CKF各有胜负的边界如果只挑一个场景宣传“谁更好”我认为是不负责任的。低附着连续转向场景里UKF在特定参数下的估计均值更贴近真值因为UKF多了一个均值点对偏态分布和强非线性传递更敏感。在道路附着系数缓慢变化的工况下两者的差距并不大甚至很多时候差异小于传感器噪声的波动。真正的边界在于实时性和调参成本。CKF在嵌入式平台上的优势不是计算量低多少而是少了一组需要反复试的滤波参数。UKF虽然灵活但灵活意味着标定工作量更大一不小心还把协方差整出负特征值。工程项目交付节点临近时我大概率会选CKF先跑通再根据问题决定要不要换UKF做对比。毕竟估计结果只是整个底盘控制链路里的一环稳定性远比论文里的“精度高1%”重要。6. 掉过的坑和排查方法6.1 协方差半正定丢失滤波器发散的经典元凶就是协方差矩阵失去正定性。UKF的权重里可能包含负权重当状态维数高、非线性强时协方差计算结果很容易不再正定下一步Cholesky分解直接报错。排查要分两层。第一层看算法是不是数值问题。解决办法是改用平方根形式维持协方差矩阵的正定性但实现复杂度会上一个台阶。第二层看参数。UKF的α、β、κ不能盲目套教科书推荐值在高维状态里有些组合会让均值点权重变成很大的负数。我调试UKF时习惯打印每次迭代的最小特征值和点权重一旦发现异常优先回退到α1、κ0这类保守参数。CKF在这个问题上省心很多。所有容积点权重都是1/(2n)恒为正协方差更新不会因为负权重产生非正定的“人为事故”。但CKF也防不住模型异常导致的真非正定排查时还得看Q是否太小、R是否太大不能一上来怪算法。6.2 低附着工况估计发散低附着路面上轮胎力小测量值变化也小滤波器的修正量很弱。如果没有足够的滑移率激励μ估计值容易往下漂甚至漂到0。这个现象不是算法错而是信息不足。我试过最有效的办法是触发策略和过程噪声自适应。低附着时增加驱动扭矩小幅度扰动让滑移率保持在一个可以辨识的水平。同时在控制器层面禁止估计器在滑移率低于某个阈值时更新μ而是采用“保持并等待”的状态。这个策略让低附着工况的发散概率大幅下降。6.3 观测频率和决策频率要分开滤波器的更新频率和底盘控制器的决策频率不能简单画等号。IMU和轮速通常是100Hz或者更高但扭矩分配策略可能只需要50Hz。我最初把滤波器每收到一个测量就立刻更新结果发现高频更新反而放大了测量噪声估计结果在局部出现抖动。后来我把滤波更新频率固定在100Hz控制器决策频率挂在50Hz在控制器取用估计值之前再做一次缓存和平滑。这样做没有损失太多响应速度却让控制指令平稳了许多。这个习惯我一直保留着。6.4 调参经验速查表现象优先调整项调整方向估计响应太慢μ对应的过程噪声Q_μ适当加大Q_μ估计值高频抖动测量噪声R、观测低通滤波加大R增加平滑协方差分解失败UKF参数或P0初值用保守参数减少P0高附着正常、低附着漂移激励触发阈值降低触发门限增加扰动突变路面追不上Q_μ和激励检测窗口动态放大Q_μ缩短窗口这张表不是万能公式但能省不少排查时间。每一项背后都是实打实跑过的仿真和测试先把现象定位清楚再动参数比随机试数值靠谱得多。7. 一点个人体会几轮项目做下来我的结论是分布式驱动电动汽车的路面附着系数估计关键并不在于选UKF还是CKF而在于你有没有把轮胎模型、可观测性条件和激励策略想清楚。CKF像是一个稳定的执行者上手快、不闹脾气UKF像是一个上限更高但也不太好驾驭的选手调好了能出彩调不好就给你添乱。如果你刚开始做这个方向我建议先实现CKF把整个链路跑通把模型误差、传感器噪声、激励条件这些坑都排干净再决定要不要引入UKF做精度对比。如果做量产项目稳定性和标定成本往往比零点零几的估计误差更影响最终决策。最后再分享一个小技巧无论用哪种滤波都别只盯着μ的平均估计误差要加一个“估计可信度”输出也就是协方差对角元素里的对应项。这个值在控制层做扭矩分配权重时特别好用它能让系统在估计不确定时自动降低对μ的依赖这比任何滤波算法的花哨技巧都实在。
阅读完成 · 觉得有帮助?
咨询建站