当前位置: 首页 > news >正文

基于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做的参数管理骚操作。下次可以试试把路面摩擦系数也做成自适应参数,估计会更刺激!

http://www.cnnetsun.cn/news/42462.html

相关文章:

  • 【怎么理解maven中的镜像和仓库?】
  • comsol枝晶生长,沉积模型,包括:典型,形状成核,随机成核,均匀沉积,雪花晶形成过程。 适...
  • 终极指南:Qwen3-30B-A3B多GPU分布式推理完整解决方案
  • 腾讯混元语音驱动数字人技术:重塑动态视频生成新范式
  • 【MicroPython编程-ESP32篇】-Web页面显示DHT11传感器数据
  • DCDC电池模型:基于Matlab 2018b及以上的应用
  • Day 38 - Dataset 和 DataLoader
  • [C#][winform]基于yolov11的打架行为检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面
  • 2022年TRC SCI1区TOP,基于随机分形搜索算法的多无人机四维航迹优化自适应冲突消解方法,深度解析+性能实测
  • 《智能世界2035》——华为预测十年以后智能世界的模样
  • FLAC3D随机裂隙建模:从基础到复杂网络
  • 终极指南:TUnit服务虚拟化测试实践
  • 速读顶会论文:GoodSpeed - 让分布式LLM推理既快又公平的自适应推测解码框架
  • 基于MATLAB的零件表面缺陷检测系统设计与实现
  • c++类和对象(上)
  • Windows11中使用VS2022编译运行libevent网络库
  • wgpu实例化渲染技术深度解析:从性能瓶颈到GPU并行计算优化
  • 构建下一代实时语音处理框架:dora-rs架构深度解析
  • cmark终极指南:高性能Markdown解析器的完整使用教程
  • 基于Java的安全检查巡视智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产指标智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 基于Java的安全生产水利工程智慧管理系统的设计与实现全方位解析:附毕设论文+源代码
  • 极客时间-DeepSeek应用开发实战
  • Vue.Draggable高效拖拽排序实战指南:5分钟掌握核心用法
  • c语言学习打卡
  • LangChain 文档转换器与字符分割器组件的使用
  • 科研绘图不用愁!虎贲等考 AI 用算法代替画笔,手残党也能轻松搞定学术视觉表达
  • 告别论文恐惧!虎贲等考 AI 化身灵感合伙人,带你解锁课程论文的知识创造之旅
  • ComfyUI-SeedVR2视频超分项目FP8量化技术深度解析
  • 全网最全的软件测试面试八股文(含真题答案+文档)