1. 项目概述与核心需求拆解
1.1 为什么要估计轮胎侧偏刚度
做车辆动力学控制的人,大概率都绕不开轮胎侧偏刚度这个参数。它直接决定了车辆在转向工况下的横摆响应特性——说白了,就是车子在转弯时是偏转向不足、中性转向还是转向过度,以及车身姿态变化的快慢。这个参数一旦偏离真实值,ESP、ESC、四轮转向、主动前轮转向这些上层控制策略的参数标定全都要跟着重新走一遍。
问题在于,轮胎的侧偏刚度并不是一个固定值。它会随垂直载荷变化、随胎压变化、随路面附着系数变化,还会随着轮胎磨损、温度上升而慢慢漂移。出厂标定值只能代表某个特定状态下的“名义值”,真正装车跑起来之后,实际侧偏刚度可能和标定值差出20%甚至更多。对于做稳定性控制的工程师来说,如果控制器内部假设的轮胎特性和实际物理特性长期不一致,控制效果会肉眼可见地变差,严重的时候甚至可能触发误干预。
所以就有了“在线估计”这个需求。也就是说,在车辆行驶过程中,利用可测的传感器信号(横摆角速度、侧向加速度、方向盘转角、车速等),反推出当前前后轴轮胎的实际侧偏刚度,然后实时更新到控制器的参数表里。这也是标题里面“递归最小二乘法估计”这个技术路线出现的根本原因。
1.2 什么是递归最小二乘法,为什么选它
递归最小二乘法(Recursive Least Squares,RLS)本质上是最小二乘法的一种递推实现形式。普通最小二乘法需要把一段历史窗口内的所有数据采集完,然后一次性做矩阵求逆解算出参数;而RLS是每来一个新样本,就基于上一时刻的参数估计结果做一次局部修正,不需要重新求解整个矩阵方程。
RLS的核心优势有三个:
- 计算量固定,每步更新只涉及矩阵乘法和加法,适合嵌入式实时运行;
- 收敛速度快,理论上RLS的收敛速度远快于LMS这类梯度类算法,因为它隐式地对输入信号的自相关矩阵做了白化处理;
- 可以引入遗忘因子,让算法对参数漂移保持跟踪能力,这对车辆行驶中轮胎特性缓慢变化这个场景特别合适。
当然RLS也不是没有代价,它需要维护一个协方差矩阵P,数值稳定性比LMS敏感,初值选择不当或者激励不足时会出现发散。这个在后面“常见问题”部分我会专门展开讲。
1.3 这个项目具体在做什么,适合谁参考
结合标题来看,整个项目做的事情是:在恒定转角变化速度的仿真工况下,利用车辆动力学模型产生的仿真数据,通过RLS在线估计车辆前后轮胎的侧偏刚度,并用仿真结果图来验证估计效果。
“恒定转角变化速度”这个约束条件值得仔细咀嚼一下。它指的是方向盘转角的变化速率保持恒定,也就是一个斜坡输入。这个工况在实车测试中常用来考察车辆的瞬态响应和稳态转向特性。为什么这个项目选择这个工况,而不是阶跃输入或者正弦扫频输入?这里有很深的门道,我放到后面“模型与工况选择”部分专门解释。
这篇内容适合以下几类人阅读:正在做车辆状态参数估计方向课题的研究生、搞底盘电控系统开发的工程师、对车辆动力学仿真建模感兴趣的测试工程师。如果你只是想了解RLS的基本原理,这篇文章同样能给你一个完整的从模型到仿真再到参数调优的实操参考。
2. 模型搭建与工况选择的底层逻辑
2.1 二自由度车辆模型:够用但不完美
车辆动力学模型有很多种,从最简单的自行车模型到复杂的21自由度甚至更高自由度的多体动力学模型,复杂度跨度非常大。对于侧偏刚度估计这个任务来说,二自由度单轨模型(也就是自行车模型)是主流选择。
为什么?首先要明确一点——我们现在要做的是“估计”,不是“高精度仿真”。估计问题的本质是利用模型结构搭起一个输入到输出的映射关系,然后通过测量输出反推参数。如果模型太复杂、自由度太多,未知参数数量就会爆炸,可观测性变差,估计问题反而解不出来或者解不稳定。
二自由度模型只考虑车辆的侧向运动和横摆运动两个自由度,假设左右两侧轮胎的受力可以合并到车辆中轴线上的等效轮胎上,这样前后轴就各自只有一个等效侧偏刚度参数需要估计。模型方程如下:
侧向运动方程:
m * (v_dot + u * r) = F_yf + F_yr
横摆运动方程:
I_z * r_dot = a * F_yf - b * F_yr
其中轮胎侧向力简化为线性模型:
F_yf = -C_f * α_f,F_yr = -C_r * α_r
前轮侧偏角:
α_f = δ - (v + a * r) / u
后轮侧偏角:
α_r = -(v - b * r) / u
符号说明:m为整车质量,I_z为绕Z轴的转动惯量,a和b分别为质心到前轴和后轴的距离,u为纵向车速,v为侧向速度,r为横摆角速度,δ为前轮转角,C_f和C_r分别为前后轴等效侧偏刚度。
注意,这里的C_f和C_r是等效侧偏刚度,也就是把整个前轴或者整个后轴的轮胎看成一个整体时的刚度值,单位是N/rad。单条轮胎的侧偏刚度大概是这个等效值除以轴上的轮胎数,但用于整车控制策略时,直接用等效值更方便。
二自由度模型的假设前提是轮胎工作在线性区,也就是侧偏角比较小(通常认为5度以内),轮胎侧向力与侧偏角近似成线性关系。这个假设在常规驾驶工况下基本成立,但在极限操控工况下会失准。这也是本项目的应用边界,后面我会再提到。
2.2 恒定转角变化速度工况:为什么不是阶跃,也不是正弦
标题中特意强调了“恒定转角变化速度”,也就是方向盘转角以恒定斜率持续增加(或减小)的斜坡输入。选择这个工况不是随意的,它有几个深刻的原因:
第一,从系统辨识的角度看,要估计动态系统的参数,输入信号必须满足持续激励条件。所谓持续激励,简单说就是输入信号要足够“丰富”,能把系统的各个模态都激发出来。阶跃输入的频率成分太窄,只包含低频信息,对某些参数的可辨识性差;正弦扫频虽然频率成分丰富,但实现起来复杂,而且稳态评估不如斜坡直观。
第二,斜坡输入下,车辆的侧向加速度和横摆角速度会经历从瞬态到稳态的完整过渡过程。瞬态阶段包含了系统的动态响应信息,这对估计横摆动力学相关的参数很有帮助。稳态阶段则能提供精确的增益信息——在稳态转向下,横摆角速度增益与前后轴侧偏刚度有明确的解析关系,这相当于给估计问题提供了很好的“锚点”。
第三,从工程对标的角度看,恒定转角变化速度是ISO标准中稳态回转试验的延伸工况。ISO 4138中规定的稳态回转试验是用固定半径行驶逐步加速,而恒定转角变化速度测试则是在试验场直接匀速行驶同时缓慢转动方向盘,考察车辆对逐渐增加的转向输入的非线性响应。这个工况下的数据可以直接和标准试验数据进行对比分析。
当然,这个工况也有它的短板。斜坡输入的频率成分依然比较有限,主要是低频为主,对系统高频特性的激励不够充分。如果后续要做更精细的轮胎参数辨识,可能需要结合多种工况的数据融合使用,这个问题后面我会展开。
2.3 线性轮胎模型还是非线性轮胎模型
在二自由度模型的框架下,轮胎模型的选择直接影响参数估计的物理含义。线性轮胎模型假设F_y与α成正比,比例系数就是侧偏刚度C。这个模型结构简单,待估参数少,而且C的物理意义明确,数值稳定。
但是实车工况下,侧偏角大了之后,轮胎侧向力会进入饱和区,F_y与α之间呈现明显的非线性关系,这时候用线性模型估出来的C实际上是“等效线性化”的结果,也就是在某个工作点附近的局部斜率,而不是真正的常数。这在恒定的转角变化速度工况下尤其需要注意——因为随着转角持续增加,轮胎实际的工作点一直在移动,侧偏角持续增大。
从估计的角度看,这既是麻烦也是机会。麻烦在于,如果一味增大转向输入,车辆会逐渐偏离线性区,模型失配会导致估计结果出现偏差。机会在于,通过对不同时间段的数据进行分段估计,可以观察侧偏刚度随侧偏角/载荷转移的变化趋势,这本身就是非常有价值的信息。
我在实际项目中通常的做法是:先用线性模型跑通整个估计流程,确认RLS算法实现没有问题,然后引入一个简单的非线性轮胎模型(比如Fiala模型或者Pacejka模型的简化形式),在非线性工况下验证估计结果的合理性。标题里既然明确说的是“侧偏刚度”,那我们先聚焦线性模型下的估计方法,非线性扩展最后简单提一下方向。
3. RLS算法实现与参数配置详解
3.1 回归方程的构造:怎么把动力学方程写成最小二乘形式
使用RLS的第一步,是把待估计的动力学方程改写成“测量值等于回归向量乘以参数向量”的标准形式。这一步是整个流程的关键,做得好能让后面的数值计算非常顺利。
从二自由度模型的横摆运动方程出发:
I_z * r_dot = a * F_yf - b * F_yr
把轮胎力表达式代入,并整理侧偏角的表达式,可以得到:
I_z * r_dot = -a * C_f * (δ - (v + a * r) / u) + b * C_r * (v - b * r) / u
展开后把含C_f和C_r的项分别聚合:
I_z * r_dot = -a * C_f * δ + a * C_f * (v + a * r) / u + b * C_r * (v - b * r) / u
这个式子里面有v(侧向速度),但侧向速度通常不是直接测量的量,在实际车辆上需要通过侧向加速度积分或者状态观测器来获取,这是最麻烦的地方。
好在有一个替代方案。我们可以利用侧向运动方程消掉v,或者更聪明一点——直接采用横摆角速度作为测量输出,并构造一个不显含v的回归形式。具体做法是利用侧向加速度a_y的测量值。
侧向加速度与轮胎力的关系为:
m * a_y = F_yf + F_yr
结合F_yf + F_yr的表达式,可以把横摆方程中的某些项替换掉,最终整理成如下形式:
I_z * r_dot = -a * C_f * δ + a * C_f * α_f + b * C_r * α_r
而α_f和α_r本身包含了v,我们可以用侧向加速度的测量来间接表达α_f和α_r的某种组合。一个更实用的做法是,把前后轴侧偏角分别看作前轮转角δ、横摆角速度r和侧向加速度a_y的线性组合,因为:
r_dot可以用r的差分近似获得,这个在仿真中可以直接计算;
α_f和α_r的加权组合可以从a_y的表达式中解出来。
在实际仿真项目中,我建议大家直接用如下回归模型:
y = φ_1 * C_f + φ_2 * C_r
其中:
y = δ * (-a)
φ_1 = δ - (v + a * r) / u,这是前轮侧偏角;
φ_2 = (v - b * r) / u,这是后轮侧偏角(取合适的符号约定)。
然后将横摆运动方程改写为:
I_z * r_dot = -a * C_f * φ_1 + b * C_r * φ_2
移项后得到:
I_z * r_dot + a * C_f * φ_1 - b * C_r * φ_2 = 0
这个形式并不是完美的标准回归形式,因为C_f和C_r都以乘积因子出现。要想解耦,需要把模型写成矩阵形式,利用横摆方程和侧向方程联立求解。
3.2 标准RLS递推公式与遗忘因子
假设我们已经构造好了如下标准最小二乘形式:
y(k) = Φ(k)ᵀ * θ + e(k)
其中θ = [C_f, C_r]ᵀ是待估参数向量,Φ(k)是和当前时刻测量值相关的回归向量,y(k)是模型输出。
在车辆动力学问题中,最自然的选择是让y(k)等于横摆角加速度的测量值乘以转动惯量,即y(k) = I_z * r_dot(k),而回归向量则包含横摆方程中与C_f和C_r相乘的各项。另一种做法是直接把横摆角速度作为模型输出,通过将微分方程离散化后构造自回归形式的外源输入模型。两种方法各有优劣,前者的物理意义直观,后者对噪声的鲁棒性更好,大家可以都尝试一下再决定。
标准的带遗忘因子RLS递推过程如下:
增益向量:
K(k) = P(k-1) * Φ(k) / (λ + Φ(k)ᵀ * P(k-1) * Φ(k))
参数更新:
θ_hat(k) = θ_hat(k-1) + K(k) * (y(k) - Φ(k)ᵀ * θ_hat(k-1))
协方差矩阵更新:
P(k) = (I - K(k) * Φ(k)ᵀ) * P(k-1) / λ
其中λ是遗忘因子,取值范围通常在0.95到1之间。λ = 1表示不遗忘,所有历史数据权重相同,适合参数恒定的情况;λ越小,旧数据被遗忘的速度越快,算法对参数漂移的跟踪能力越强,但对噪声也更敏感。
关于遗忘因子的选择,我在实际项目中积累了一些经验可以参考:如果车辆工作在正常铺装路面、轮胎状态相对稳定,λ建议取0.98到0.995之间,这样估计结果平滑;如果路面附着变化剧烈或者轮胎状态可能在短时间内发生突变(比如压过积水坑),λ建议取0.95到0.97,让算法能更快跟上参数的变化。太小的λ(比如小于0.9)会让协方差矩阵P持续膨胀,最终导致参数估计值剧烈震荡,这个坑我踩过,后面再细说。
3.3 协方差矩阵初值与参数初值的设置
RLS的初值设置直接决定了估计过程的收敛速度和稳定性。两个关键量分别是参数向量θ_hat(0)和协方差矩阵P(0)。
θ_hat(0)的设置相对简单。如果你有名义上的侧偏刚度标定值,直接用标定值作为初值即可;如果没有,可以取一个物理上合理范围内的猜测值。根据我的经验:乘用车前轴等效侧偏刚度的数量级通常在-60000到-120000 N/rad之间,后轴在-80000到-140000 N/rad之间,负号表示侧向力方向与侧偏角方向相反。取初值时可以先设一个中间值,比如C_f(0) = -80000,C_r(0) = -100000。参数初值不准确没关系,RLS会在几百毫秒内修正过来,但初值如果偏离物理范围太远,可能会导致收敛过程中的参数震荡幅度过大。
P(0)的设置更为关键。P(0)反映了初始时刻对参数估计不确定性的量化,通常取为单位矩阵乘以一个大数。常用的做法是取P(0) = 1000 * I或者P(0) = 10000 * I。这里的逻辑是:初始参数不确定度越大,P(0)就应该越大,这样增益向量K(k)在初期会比较大,参数能被快速修正。
但是P(0)不能无限大,否则初期几步的参数更新幅度会非常夸张,可能出现参数跳变到完全不符合物理意义的值,然后花很长时间才拉回来。我一般的做法是先跑一次开环仿真,观察横摆角速度的估计残差量级,然后反推P(0)的合理量级。一个简单的方法是:P(0)对角元设置成标称参数的方差估计值,如果标称值是-80000,不确定度大约是±20000,那P(0)对角元就可以取20万的平方也就是4e10。但实际仿真中我发现这个量级太大,容易导致数值溢出,取1e6到1e8之间比较稳妥,具体还需要根据噪声水平微调。
4. 仿真实操:从模型搭建到结果分析
4.1 仿真环境与整体流程
这个项目的仿真我是在MATLAB/Simulink环境下完成的,但大家也可以根据自己的习惯用CarSim、CarMaker或者Python的车辙车辆动力学库。MATLAB的优点是控制算法和车辆模型可以在同一个环境下调试,数据记录和处理也方便;Python的优点是免费且代码可读性更好,适合做算法原型验证。
整体仿真流程分四步走:
- 第一步,搭建车辆动力学参考模型。我用的是二自由度模型,并在Simulink中用S-Function实现,设置好整车参数;
- 第二步,设计转向输入。产生一个恒定变化率的斜坡转向角输入信号,模拟方向盘匀速转动;
- 第三步,运行仿真并采集数据。记录横摆角速度、侧向速度、前轮转角等信号,设置合理的采样时间;
- 第四步,将数据送入RLS估计模块,在线估计C_f和C_r,并对比估计值和真值。
整车参数我按某常见B级乘用车来设定:m = 1500 kg,I_z = 2500 kg·m²,a = 1.2 m,b = 1.4 m。前轴等效侧偏刚度真值C_f = -80000 N/rad,后轴等效侧偏刚度真值C_r = -100000 N/rad。车速保持在u = 20 m/s,也就是72 km/h,这个速度下车辆动态特性适中,适合做参数估计。
仿真时间设成10秒,转向角从0开始以每秒2度的速度线性增加,到第8秒时达到16度左右,保持2秒后结束。这样整个过程中车辆经历了从直线行驶到明显转弯的完整过渡。
4.2 核心代码实现与关键注释
RLS估计模块我用了一个嵌入到Simulink中的MATLAB Function块来实现,核心代码如下所示:
function [Cf_hat, Cr_hat] = RLS_estimator(delta, r, v, u, Ts, P_prev, theta_prev, lambda) % RLS估计器:估计前后轴等效侧偏刚度 % 输入: % delta - 前轮转角 (rad) % r - 横摆角速度 (rad/s) % v - 侧向速度 (m/s) % u - 纵向车速 (m/s) % Ts - 采样时间 (s) % P_prev - 上一时刻协方差矩阵 2x2 % theta_prev - 上一时刻参数向量 [Cf_hat; Cr_hat] % lambda - 遗忘因子 % 整车参数 m = 1500; % 质量 kg Iz = 2500; % 转动惯量 kg*m^2 a = 1.2; % 质心到前轴距离 m b = 1.4; % 质心到后轴距离 m % 计算前轮转角导数(用差分近似) persistent last_delta if isempty(last_delta) last_delta = delta; end delta_dot = (delta - last_delta) / Ts; last_delta = delta; % 侧偏角计算 alpha_f = delta - (v + a * r) / u; alpha_r = -(v - b * r) / u; % 横摆角加速度计算(用差分近似r_dot) % 实际项目中推荐使用滤波后的微分信号,避免噪声放大 persistent last_r if isempty(last_r) last_r = r; end r_dot = (r - last_r) / Ts; last_r = r; % 构造回归方程: y = Phi' * theta % 从横摆运动方程推导: % Iz * r_dot = -a * Cf * alpha_f + b * Cr * alpha_r % 将右侧展开为参数线性组合: % Iz * r_dot = [-a*alpha_f, b*alpha_r] * [Cf; Cr] % 移项得到: % y = Phi' * theta % 其中 y = Iz * r_dot, Phi = [-a*alpha_f; b*alpha_r] y = Iz * r_dot; Phi = [-a * alpha_f; b * alpha_r]; % RLS递推更新 K = P_prev * Phi / (lambda + Phi' * P_prev * Phi); innovation = y - Phi' * theta_prev; theta_new = theta_prev + K * innovation; P_new = (eye(2) - K * Phi') * P_prev / lambda; % 输出估计结果 Cf_hat = theta_new(1); Cr_hat = theta_new(2); end这段代码有几个细节值得注意。
第一,横摆角加速度r_dot我用的是差分近似,这在实际应用中会放大传感器噪声。在仿真环境中因为数据干净所以问题不大,但如果后续要做实车数据验证,强烈建议先对r信号做低通滤波,或者用状态观测器来获取r_dot,否则估计结果会被噪声严重污染。
第二,回归向量Φ的两个分量分别是-a * α_f和b * α_r,符号不要搞错。我发现很多初学者在这里容易把符号弄混,导致估计出的侧偏刚度正负号不对,然后花大量时间排查算法问题,其实只是公式带入出错。
第三,这个实现里没有加入参数投影功能。所谓参数投影,就是在每一步更新后,判断估计值是否落在物理合理的范围内,如果超出范围就拉回边界。比如侧偏刚度理论上不可能大于0(线性轮胎模型的侧偏刚度都是负的),如果估计值变成了正的,说明算法出了问题,就应该重置或者投影。在实车应用中这个功能很有必要,可以防止估计器发散后输出不合理参数给上层控制器。
4.3 仿真结果怎么看:恒定转角变化速度下的典型特征
跑完仿真,我们来看结果图里能读出什么信息。
在斜坡转向输入下,RLS估计的侧偏刚度曲线通常呈现以下特征:前0.5秒内,由于协方差矩阵初值较大,参数从初始猜测值快速向真值收敛,这个阶段曲线的斜率很陡,有时还会伴随一定的超调;0.5到2秒之间,参数逐渐逼近真值附近,但仍有小幅波动;2秒之后,参数基本稳定在真值附近的窄带内,波动幅度取决于遗忘因子和噪声水平。
从稳态值来看,如果算法设计正确,C_f估计值应该收敛在-80000 N/rad附近,C_r应该收敛在-100000 N/rad附近。收敛精度通常用相对误差来评估,好的情况下能做到3%以内,接受范围是5%。
但随着转向角的持续增大,一个有趣的现象会出现:如果仿真模型用的是非线性轮胎而不是纯线性模型,那么当转角增加到一定程度后,后轴侧偏角增大,轮胎进入非线性区,RLS估计出的等效C_r绝对值会开始变小。这就是前面2.3节提到的“等效线性化”效应。这个现象不是算法错误,而是模型假设和工作点变化共同决定的。在做结果分析时,要特别关注这个拐点出现的时间,它实际上对应了车辆从线性区过渡到非线性区的临界点。
我在做这个仿真时特别注意了一个细节:随着转角增大,前后轴载荷会发生转移——转弯时外侧车轮载荷增加,内侧车轮载荷减小,而轮胎侧偏刚度本身对垂直载荷是非线性依赖的。载荷向一侧转移时,两个轮胎的综合侧偏刚度会有所下降。也就是说,即使轮胎完全在线性区,等效侧偏刚度也会随侧向加速度增大而略有变化。RLS估计出的“恒定”参数实际上是一个缓慢漂移的变量,这在分析结果时要清楚地区分“估计误差”和“参数真实变化”两种因素。
5. 常见问题与排查技巧实录
5.1 参数发散问题:协方差矩阵的“炸弹”效应
RLS最常见的问题就是参数发散,症状是估计值在某个时刻突然跳到极大值或极小值,然后再也拉不回来。
造成发散的原因通常有几个:一是输入信号激励不足,导致信息矩阵接近奇异;二是遗忘因子太小,导致协方差矩阵P随时间指数增长;三是观测信号中有大幅噪声或野值,导致增益向量被异常样本放大。
排查思路建议按照下面的顺序来:先从时域曲线上找出发散的时间点,看看在那个时刻前后输入信号是否发生了明显的形态变化;然后检查P矩阵的对角元素是否在发散前已经变得非常大;再看新息序列(innovation sequence)是否突然出现了远大于正常水平的异常峰值。
解决手段最有效的是两条:一是给P矩阵加上限幅,也就是当P的对角元素超过某个阈值时,强制将其拉回到阈值以内;二是引入参数投影机制,将估计值约束在物理合理范围内,比如C_f和C_r的绝对值在1e4到3e5之间。这两个手段叠加使用,基本可以保证估计器在绝大多数工况下不出现灾难性发散。
5.2 激励不足导致的可辨识性问题
RLS能不能正确估计出参数,前提是输入信号能充分激励车辆动力学模型。如果车辆一直匀速直线行驶,前轮转角恒定为0,那么侧偏角始终为0,轮胎力也为0,任何一组侧偏刚度数值都能让模型输出一致,这时候参数在数学上是不可辨识的。
在恒定转角变化速度工况下,这个风险相对较小,因为转角在持续增加,车辆一直在经历侧向运动。但有一个隐蔽的坑要注意:在转角刚开始增加的很短时间内(前0.1到0.2秒),车辆还处于瞬态响应初期,横摆角速度的幅值很小,信噪比很低。如果在这个阶段就启动了RLS并且遗忘因子设置得比较小,算法可能会被低信噪比数据带偏,产生一段错误的收敛轨迹。后续即使信号变好,也需要一段时间才能纠偏。
解决这个问题的办法是增加一个“激励检测”环节:只有当侧向加速度超过某个阈值(比如1 m/s²)或者横摆角速度超过某个阈值时,才启动RLS更新;否则保持上一时刻的参数估计值不变。这是一个非常有效的工程手法,能显著提升估计结果的稳定性。
5.3 采样时间与离散化误差的权衡
仿真中的采样时间选择也会影响估计效果。从信息量的角度看,采样间隔越小,单位时间内获得的数据点越多,对动态过程的描述越精细;但间隔过小会带来两个问题:一是相邻样本之间的信息相关性过高,信息矩阵的条件数变差;二是差分计算横摆角加速度时,如果横摆角速度信号本身带有噪声,差分会放大高频噪声,导致回归方程中的y值严重失真。
我一般建议采样时间取1到10毫秒之间,具体根据车辆动力学响应频率来定。二自由度模型的固有频率通常在1到2 Hz左右,横摆角速度的高频成分一般不超过10 Hz,取5毫秒采样就能很好地覆盖这个频段。如果采样频率远高于信号频段,可以对数据进行降采样后再送入RLS,这比直接高频运行RLS效果更好。
顺便提一下,在Simulink中搭建RLS模块时,我推荐把车辆模型和RLS估计器的采样时间设置成不同的步长,车辆模型用定步长求解器(比如1毫秒),RLS估计器每5毫秒或10毫秒触发一次更新。这样做既保证了解算精度,又减少了估计器的计算频率,更接近实车ECU的运行逻辑。
5.4 多参数相关性与不可观测问题
一个容易被忽略的问题是多参数同时估计时,参数之间存在强相关性,导致即使输入激励充分,单个参数仍然无法独立辨识。在二自由度模型里,C_f和C_r的某些线性组合可能对横摆响应的影响相似,当两个参数的比值恰好使得对横摆力矩贡献相同,数据就很难区分它们是发生了“联合漂移”还是“单个变化”。
解决思路有三种:一是降低估计维度,比如已知后轴侧偏刚度变化规律的前提下,只估计前轴侧偏刚度;二是引入额外的测量信号,比如在前后轴各自安装侧偏角传感器或者车轮力传感器,增加信息量;三是利用工况约束,比如在恒定转角变化速度工况中,低速时后轮侧偏角相对较小,C_r对响应的贡献相对有限,这时优先保证C_f的估计精度,等侧向加速度增大后再让C_r逐步进入活跃估计状态。
6. 项目延伸方向探讨
到这里,基于RLS的侧偏刚度估计的核心内容已经讲得比较完整了。最后再说几个可以在后续工作中继续深入的方向,给有兴趣的读者做个指引。
第一个方向是多工况数据融合。单一恒定转角变化速度工况虽然设计得当,但它的激励频带毕竟有限。后续可以在仿真中将斜坡输入与正弦扫频、随机输入等不同工况的数据串联起来,用一个统一的RLS框架分段更新,提升参数在全工况范围内的适用性。更进一步的,可以采用多个RLS估计器并行运行,每个估计器针对一个特定工况,然后根据当前驾驶状态在线切换或者加权融合估计结果。
第二个方向是时变遗忘因子的自调节。固定遗忘因子是一种折中方案,实际中我们可以设计一个自适应的遗忘因子调节策略:当估计残差突然增大时,自动减小遗忘因子,让算法快速响应可能的参数突变;当残差平稳时,逐渐增大遗忘因子,减小稳态波动。这种策略能同时兼顾跟踪速度和稳态精度,在路面附着突变场景下特别有价值。
第三个方向是向非线性轮胎模型的扩展。前面提到,RLS在线性模型下估计的是等效线性刚度,当车辆进入非线性区后,估计结果会偏离线性真值,并且随工作点变化。如果要估计完整的轮胎特性曲线,可以考虑使用带参数的Pacejka魔术公式模型,然后用扩展卡尔曼滤波或者粒子滤波来估计模型参数。这个方向的计算复杂度会显著增加,但给出的信息量也大得多,能够直接用于极限工况下的车辆稳定性控制。
就我自己做这个项目的体会来说,RLS本身并不复杂,真正考验功力的地方在于模型怎么建、工况怎么选、参数怎么调、结果怎么解读。这一整套方法论打通了,后面做EKF、UKF或者其他更高级的估计器,思路也都是相通的。希望这篇文章能帮你把这条路走通。