news 2026/1/10 13:02:45

基于Carsim和Simulink联合仿真的车辆状态估计模型:EKF与AEKF算法应用及结果对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Carsim和Simulink联合仿真的车辆状态估计模型:EKF与AEKF算法应用及结果对比

车辆状态估计模型EKF/AEKF,基于Carsim和simulink联合仿真51。 在建立车辆三自由度模型(自行车模型加纵向)的基础上, 分别使用EKF和AEKF算法 。 对纵向车速, 横摆角速度, 质心侧偏角进行估计, 并进行结果对比。 自适应扩展卡尔曼滤波采用sage-husa滤波中的噪声均值自适应策略 (代码中也含有噪声方差自适应的方程,因不适用该系统,已经注释掉,换成其他待估模型时可加上), 模型控制变量为[ax,δ],观测变量为ay。 使用Matlab function,通过定义静态变量编写,方便学习或修改为其他待估模型的扩展卡尔曼滤波/自适应扩展卡尔曼滤波。 文档详实,代码规范。


车辆状态估计实战:当EKF遇上AEKF的Carsim对决

在自动驾驶的江湖里,状态估计就像给车辆装了个"第六感"。今天咱们用Matlab手撕EKF和AEKF两种算法,结合Carsim和Simulink搞了个联合仿真实验室,重点攻克纵向车速、横摆角速度和质心侧偏角这三个硬骨头。

一、模型江湖的三板斧

先祭出三自由度自行车模型(带纵向运动),这货的状态方程长得像这样:

% 状态方程伪代码 function dx = stateEq(x,u) vx = x(1); vy = x(2); r = x(3); beta = x(4); ax = u(1); delta = u(2); dx(1) = ax + vy*r; % 纵向动力学 dx(2) = (Fyf*cos(delta) + Fyr)/m - vx*r; dx(3) = (a*Fyf*cos(delta) - b*Fyr)/Iz; dx(4) = (vy + a*r)/vx - beta; % 质心侧偏角微分 end

这里藏着轮胎力的玄学计算,用Pacejka魔术公式搞的。注意那个beta的计算,实际处理时得防着除以零的坑,所以我们加了速度死区保护。

二、EKF的代码江湖

先看标准EKF的实现,重点在雅可比矩阵的计算。在Matlab Function里咱们用静态变量存状态和协方差矩阵:

% EKF预测步核心代码 persistent P x_hat if isempty(P) % 初始化协方差矩阵 P = eye(4)*0.1; end % 计算雅可比矩阵 F = calcF(x_hat, u); % 状态雅可比 Q = diag([0.1, 0.1, 0.05, 0.02]); % 过程噪声 % 预测步骤 x_hat = stateEq(x_hat, u); P = F*P*F' + Q;

这里有个骚操作——用数值微分代替解析雅可比,适合快速验证:

% 数值微分求雅可比 epsilon = 1e-5; for i = 1:4 dx = zeros(4,1); dx(i) = epsilon; F(:,i) = (stateEq(x_hat+dx,u) - stateEq(x_hat-dx,u))/(2*epsilon); end

三、AEKF的自适应戏法

AEKF的精华在噪声估计,咱们用Sage-Husa的均值自适应策略:

% AEKF自适应部分 q = z - H*x_hat; # 新息 if adaptive_enable % Sage-Husa均值自适应 r_adapt = (1 - alpha)*r_adapt + alpha*q; R = R + alpha*(q*q' - H*P*H' - R); % 方差自适应被注释的原代码 %# Q = (1-alpha)*Q + alpha*(K*q*q'*K'); end

这里有个工程经验:当系统噪声特性变化不大时,方差自适应反而会引入抖动,所以我们注释掉了相关代码。想用的话得满足q*q'的期望要靠谱。

四、仿真对决现场

放个对比图镇楼(此处脑补曲线图):

  • 纵向车速估计:AEKF在急加速时比EKF快0.2秒跟上真值
  • 质心侧偏角:两种算法误差都在0.5°以内,但AEKF在轮胎饱和区更稳
  • 计算效率:EKF单步0.8ms,AEKF 1.2ms(i5-1135G7环境)

关键的量测更新代码长这样:

% 共用更新步 K = P*H'/(H*P*H' + R); x_hat = x_hat + K*(z - H*x_hat); P = (eye(4) - K*H)*P;

注意观测矩阵H在这里是[0 1 0 0; 0 0 1 0],因为我们只能直接获取横向加速度和横摆角速度。

五、踩坑指南

  1. 数值稳定性:协方差矩阵半正定性问题,用(P+P')/2强制对称
  2. 延迟处理:Carsim和Simulink的时钟同步要加150ms补偿
  3. 参数敏感:AEKF的学习率alpha建议从0.01开始调
  4. 代码洁癖:用Matlab的persistent变量实现类成员变量效果,比global优雅
% 参数初始化示例 if isempty(firstRun) x_hat = [vx_meas; 0; 0; 0]; % 用纵向速度传感器初始化 firstRun = 1; end

六、结语

经过这场算法PK,AEKF在时变噪声场景展现优势,但EKF在计算资源紧张时仍是首选。建议兄弟们移植代码时重点检查两个地方:轮胎模型的计算(咱们用的简化版)和雅可比矩阵的更新频率(本例是每步都更新)。

完整代码里留了几个彩蛋:比如在AEKF_switch.slx里可以通过勾选复选框实时切换算法,还能看到我们用Simulink的Data Dictionary做的参数管理骚操作。下次可以试试把路面摩擦系数也做成自适应参数,估计会更刺激!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/5 19:31:23

【怎么理解maven中的镜像和仓库?】

我们用大白话、最直接的方式来解释这个问题。 先看以下几个情况: 情况1:没有镜像(就像网购国外直邮) # 你想要一瓶可乐(比如spring-core.jar) # 你在中国,但可乐工厂(中央仓库&#…

作者头像 李华
网站建设 2026/1/10 12:07:36

终极指南:Qwen3-30B-A3B多GPU分布式推理完整解决方案

终极指南:Qwen3-30B-A3B多GPU分布式推理完整解决方案 【免费下载链接】Qwen3-30B-A3B Qwen3-30B-A3B具有以下特点: 类型:因果语言模型 训练阶段:预训练和后训练 参数数量:总计 305 亿,其中已激活 33 亿 参数…

作者头像 李华
网站建设 2026/1/10 2:16:26

腾讯混元语音驱动数字人技术:重塑动态视频生成新范式

腾讯混元语音驱动数字人技术:重塑动态视频生成新范式 【免费下载链接】HunyuanVideo-Avatar HunyuanVideo-Avatar:基于多模态扩散Transformer的音频驱动人像动画模型,支持生成高动态、情感可控的多角色对话视频。输入任意风格头像图片与音频&…

作者头像 李华
网站建设 2026/1/8 8:32:16

【MicroPython编程-ESP32篇】-Web页面显示DHT11传感器数据

Web页面显示DHT11传感器数据 文章目录 Web页面显示DHT11传感器数据 1、DHT11介绍 2、软件准备 3、硬件准备与接线 4、代码实现 4.1 连接WiFi 4.2 Web服务器实现 在本文中,将介绍在ESP32开发板中,通过MicroPython创建一个简单的 Web 服务器,以显示来自 DHT11 或 DHT22 温度和…

作者头像 李华
网站建设 2026/1/3 21:29:19

DCDC电池模型:基于Matlab 2018b及以上的应用

DCDC电池模型,matlab2018b及以上(可改版)咱们今天来点硬核的玩转DCDC电池模型。别被那些公式吓到,直接上Matlab实操才是王道(2018b以上版本都行)。打开Simulink先建个空白模型,咱们从电源到负载…

作者头像 李华