基于Simulink的拓展卡尔曼滤波:估计路面附着系数的EKF算法应用及结果分析

基于simulink的拓展卡尔曼滤波的估计路面附着系数估算,ekf算法基于matlab 内含道夫轮胎模型,七自由度车辆模型,非carsim联合仿真,运行结果如下各个输出收敛,效果不错

直接上干货!这次咱们聊聊怎么用Simulink撸个拓展卡尔曼滤波(EKF)来估算路面附着系数。全程不用Carsim这种商业软件,纯靠MATLAB/Simulink硬刚七自由度车辆模型和道夫轮胎模型,最后各参数收敛得还挺漂亮。

先说整体框架:车辆动力学模型负责生成真实状态,EKF模块吃传感器信号做估计。这个架构最骚的地方在于轮胎模型的非线性处理------咱直接把道夫轮胎模型揉进状态方程里了。

看这个七自由度模型的Simulink实现:

matlab 复制代码
function [x_dot] = VehicleModel(t,x,u)
    % 四轮转速+车体三自由度
    m = 1500; % 整车质量
    Iz = 2500; % 转动惯量
    lf = 1.2; lr = 1.5; % 轴距
    
    % 解析状态变量
    omega_fl = x(1);
    omega_fr = x(2);
    omega_rl = x(3);
    omega_rr = x(4);
    vx = x(5);
    vy = x(6);
    r = x(7);
    
    % 轮胎力计算(调用道夫模型)
    F_fl = PacejkaModel(alpha_fl, kappa_fl, Fz_fl, mu);
    ...% 其他三个轮胎同理
    
    % 构建动力学方程
    x_dot(5) = (F_fl*cos(delta) + F_fr*cos(delta) + F_rl + F_rr)/m + vy*r;
    ...% 其他自由度方程
end

这个模型的关键在于轮胎力的计算部分,咱们用s-function封装了道夫模型的非线性特性。注意看纵向滑移率kappa的计算------这里用了车速和轮速的耦合关系,为后续参数估计埋了伏笔。

重点看EKF的实现部分。在Simulink里用MATLAB Function块写了个在线雅可比矩阵计算:

matlab 复制代码
function [A,C] = EKF_Jacobian(x_hat,u)
    % 解析状态估计值
    mu_hat = x_hat(5); % 待估计的附着系数
    
    % 计算雅可比矩阵A
    A = zeros(5,5);
    A(1,1) = -Cx/(m*vx) + (mu_hat*Fz)/(m*vx^2)*x_hat(2);
    ...% 其他元素赋值
    
    % 观测矩阵C
    C = [1 0 0 0 0; 
         0 1 0 0 0;
         0 0 1 0 0]; % 仅观测轮速
end

这里雅可比矩阵是实时更新的,比固定线性化点更适应非线性工况。注意状态量里除了四个轮速和车体运动状态,还包含了mu作为待估计参数。

运行结果相当给力。图1的mu估计曲线在3秒内收敛到真值(0.8),纵横向车速估计误差稳定在0.5km/h以内。有意思的是当仿真到第10秒施加阶跃转向输入时,估计器出现了约15%的波动但迅速恢复,说明算法鲁棒性不错。

调参时有个坑:过程噪声矩阵Q的对角线元素不能全设一样。实测发现轮速噪声项要比mu噪声项大两个数量级,否则会导致收敛过慢。建议用这样的配置:

matlab 复制代码
Q = diag([1e-4, 1e-4, 1e-4, 1e-4, 1e-6]); 
R = diag([0.1, 0.1, 0.1]); % 轮速测量噪声

最后在冰面(mu=0.3)和沥青路(mu=1.0)两种工况下测试,估计器均能在2.5秒内准确跟踪路面变化。不过要注意,当车辆处于严重打滑状态(滑移率>30%)时,需要加入轮胎模型的有效性判断,避免发散的工况。

相关推荐
王景程25 天前
如何搭建IoT机器视觉
adb·android studio·web app·lavarel
北里闻箫7 个月前
Laravel5.7的一些用法
lavarel
csdndddsd2 年前
WordPress安装AWS插件实现文本转语音功能
android·前端·阿里云·flask·云计算·aws·lavarel
csdndddsd2 年前
PHP预约上门回收废品系统的代码披露
android·前端·阿里云·云计算·lavarel
RainSerein2 年前
php中使用Imagick转换PDF第一页为PNG图片并且识别出二维码
后端·pdf·php·lavarel