【滤波跟踪】基于可观测性约束的扩展卡尔曼滤波(OC-EKF) 2D SLAM 仿真代码,对比四种滤波算法(Ideal EKF、Standard EKF、FEJ-EKF、OC-EKF)matlab代码

简介: ✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。🔥 内容介绍 2D SLAM 技术致力于同时确定机器人在二维空间中的位置和构建周围环境的地图。在机器人导航领域,它是实现自主移动的核心技术,使机器人能够在未知环境中探索并找到路径。在自动驾驶领域,2D SLAM 为车辆提供高精度的定位和地图信息,辅助车辆做出决策。

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

👇 关注我领取海量matlab电子书和数学建模资料

🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。

🔥 内容介绍

2D SLAM 技术致力于同时确定机器人在二维空间中的位置和构建周围环境的地图。在机器人导航领域,它是实现自主移动的核心技术,使机器人能够在未知环境中探索并找到路径。在自动驾驶领域,2D SLAM 为车辆提供高精度的定位和地图信息,辅助车辆做出决策。

在 2D SLAM 过程中,传感器(如激光雷达、摄像头等)会产生大量含有噪声的数据。滤波算法的作用是对这些数据进行处理,通过融合传感器信息来估计机器人的位姿以及地图特征,从而实现准确的定位和地图构建。不同的滤波算法在处理非线性系统和噪声方面各有特点,对 2D SLAM 系统的性能影响显著。因此,深入了解和对比不同滤波算法在 2D SLAM 中的应用具有重要意义。

扩展卡尔曼滤波(EKF)基本原理

扩展卡尔曼滤波(EKF)是一种广泛应用于非线性系统状态估计的算法。由于实际中的 2D SLAM 系统通常是非线性的,EKF 通过对非线性方程进行线性化近似来处理此类问题。

四种滤波算法原理

  1. Ideal EKF(理想扩展卡尔曼滤波):Ideal EKF 假设系统模型和测量完全准确,不存在任何噪声和误差。在这种理想情况下,EKF 能够完美地跟踪系统状态变化,准确估计机器人位姿和地图信息。虽然在现实世界中,这种理想条件几乎不可能实现,但 Ideal EKF 作为一种理论参考模型,有助于我们清晰地理解 EKF 的基本原理和潜在的最佳性能表现,为评估其他实际应用的滤波算法提供了一个理论上限。
  2. Standard EKF(标准扩展卡尔曼滤波):Standard EKF 是实际应用中常用的算法,它充分考虑了系统噪声和测量噪声的影响。在 2D SLAM 中,机器人的运动模型(如里程计模型)和传感器观测模型(如激光雷达测量模型)通常是非线性的。Standard EKF 通过计算 Jacobian 矩阵对这些非线性方程进行线性化处理,以此来近似估计系统状态。然而,这种线性化近似不可避免地引入了误差,尤其是在系统状态变化较大或非线性程度较高的情况下,线性化误差可能会逐渐累积,导致估计精度下降。尽管如此,在许多实际场景中,Standard EKF 仍能提供较为可靠的状态估计。
  3. FEJ - EKF(First - Estimate - Jacobian EKF,首估计雅可比扩展卡尔曼滤波):FEJ - EKF 为了简化计算过程,在整个估计过程中使用初始线性化点来计算 Jacobian 矩阵(即首估计雅可比矩阵)。这样做的好处是减少了每次迭代中计算 Jacobian 矩阵的次数,从而降低了计算量。然而,由于使用固定的首估计雅可比矩阵,当系统状态发生较大变化时,该矩阵可能无法准确反映系统的非线性特性,导致估计误差逐渐积累,影响最终的估计精度。因此,FEJ - EKF 在系统状态变化较为平缓的场景下可能表现良好,但在复杂多变的 2D SLAM 环境中,其性能可能受到限制。
  4. OC - EKF(基于可观测性约束的扩展卡尔曼滤波):OC - EKF 是在 Standard EKF 基础上发展而来的一种改进算法,它引入了可观测性分析。在 2D SLAM 中,系统的某些状态可能在特定情况下难以准确观测,这会影响滤波算法的估计精度和稳定性。OC - EKF 通过构建可观测性矩阵来评估系统状态的可观测性,该矩阵反映了系统状态与观测值之间的关系。依据可观测性条件,OC - EKF 对滤波过程进行约束,例如,当某些状态的可观测性较差时,适当调整卡尔曼增益,减少这些状态对估计结果的影响,或者采取其他措施来增强对这些状态的观测。通过这种方式,OC - EKF 能够提高估计精度,增强滤波稳定性,尤其在处理 2D SLAM 中复杂的非线性问题和不确定的观测环境时,展现出更好的性能。

算法对比意义

在 2D SLAM 应用中,对比这四种滤波算法(Ideal EKF、Standard EKF、FEJ - EKF、OC - EKF)具有重要意义。不同的算法在估计精度、计算效率和稳定性等方面各有优劣。例如,Ideal EKF 提供了理论上的最佳性能参考;Standard EKF 是常用的实际算法,但存在线性化误差;FEJ - EKF 牺牲一定精度换取计算效率;OC - EKF 则在提高精度和稳定性方面有独特优势。通过对比这些算法在不同场景下的性能表现,我们可以根据具体的应用需求和硬件条件,选择最适合的滤波算法,从而优化 2D SLAM 系统的性能,实现更准确的定位和地图构建。

总结

四种滤波算法(Ideal EKF、Standard EKF、FEJ - EKF、OC - EKF)在 2D SLAM 中各有其背景原理和特点。Ideal EKF 作为理论参考,展现了 EKF 的理想性能;Standard EKF 是实际应用基础;FEJ - EKF 在计算效率上有所侧重;OC - EKF 通过可观测性约束提升了精度和稳定性。理解这些算法的原理以及对比它们的性能,对于优化 2D SLAM 系统,推动机器人导航和自动驾驶等相关领域的发展具有关键作用。

⛳️ 运行结果

📣 部分代码

close all


% % setup

for nr= 1%1:nRuns

   figure

   plot(xR_true(1,:,nr), xR_true(2,:,nr), 'b-.','Linewidth',1), hold on

   plot(xL_true(1,:,nr), xL_true(2,:,nr), 'b*','Linewidth',1)

   title('Robot trajectory and landmarks')

   legend('True Trajectory','True Landmarks')

   xlabel('x (m)','FontWeight','bold'), ylabel('y (m)','FontWeight','bold')

   axis equal

   print('-dpng','setup_sim')

end




% % robot % %


start= 1;  incr= 5;


% Robot NEES

figure, hold on

plot([start:incr:nSteps],neesR_avg_id(start:incr:end)','g:','Linewidth',3);

plot([start:incr:nSteps],neesR_avg_std(start:incr:end)','b-o','Linewidth',1);

plot([start:incr:nSteps],neesR_avg_fej(start:incr:end)','m-.','Linewidth',2);

plot([start:incr:nSteps],neesR_avg_ocekf_1(start:incr:end)','k--','Linewidth',2);


xlabel('Time (sec)','FontWeight','bold'), ylabel('Robot pose NEES','FontWeight','bold')

legend( 'Ideal-EKF','Std-EKF','FEJ-EKF','OC-EKF')%,'OC-EKF3','Robocentric')

print('-dpng','slam_robot_nees_oc3_sim')


% Robot RMSE

figure

subplot(2,1,1), hold on

plot([start:incr:nSteps],rmsRp_avg_id(start:incr:end)','g:','Linewidth',3);

plot([start:incr:nSteps],rmsRp_avg_std(start:incr:end)','b-o','Linewidth',1);

plot([start:incr:nSteps],rmsRp_avg_fej(start:incr:end)','m-.','Linewidth',2);

plot([start:incr:nSteps],rmsRp_avg_ocekf_1(start:incr:end)','k--','Linewidth',2);

ylabel('Position RMSE (m)','FontWeight','bold')

legend( 'Ideal-EKF','Std-EKF','FEJ-EKF','OC-EKF')%,'OC-EKF3','Robocentric') %#ok<*LEGINTPAR>

subplot(2,1,2), hold on

plot([start:incr:nSteps],rmsRth_avg_id(start:incr:end)','g:','Linewidth',3);

plot([start:incr:nSteps],rmsRth_avg_std(start:incr:end)','b-o','Linewidth',1);

plot([start:incr:nSteps],rmsRth_avg_fej(start:incr:end)','m-.','Linewidth',2);

plot([start:incr:nSteps],rmsRth_avg_ocekf_1(start:incr:end)','k--','Linewidth',2);

xlabel('Time (sec)','FontWeight','bold'),

ylabel('Heading RMSE (rad)','FontWeight','bold')

print('-dpng','slam_robot_rms_oc3_sim')



NEES_Robot = [mean(neesR_avg_id(1:end)),mean(neesR_avg_std(1:end)), mean(neesR_avg_fej(1:end)), mean(neesR_avg_ocekf_1(1:end)) ]

RMS_Position = [mean(rmsRp_avg_id(1:end)),mean(rmsRp_avg_std(1:end)), mean(rmsRp_avg_fej(1:end)),   mean(rmsRp_avg_ocekf_1(1:end)) ]

RMS_Heading = [mean(rmsRth_avg_id(1:end)),mean(rmsRth_avg_std(1:end)), mean(rmsRth_avg_fej(1:end)), mean(rmsRth_avg_ocekf_1(1:end))]




% % landmarks % %


% NEES

figure

bar([neesL_avg_id,...

   neesL_avg_std,...

   neesL_avg_fej,...

   neesL_avg_ocekf_1 ]);

ylabel('Avg. Landmark NEES','FontWeight','bold')

print('-dpng','lm_nees')



% RMSE

figure

bar([rmsL_avg_id,...

   rmsL_avg_std,...

   rmsL_avg_fej,...

   rmsL_avg_ocekf_1  ]);

ylabel('Avg. Landmark RMSE','FontWeight','bold')

print('-dpng','lm_rms')



NEES_L = [neesL_avg_id,neesL_avg_std,neesL_avg_fej, neesL_avg_ocekf_1]

RMS_L = [rmsL_avg_id,rmsL_avg_std,rmsL_avg_fej, rmsL_avg_ocekf_1 ]

🔗 参考文献


🍅往期回顾扫扫下方二维码

相关文章
|
传感器 机器学习/深度学习 数据采集
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
【航迹关联】基于NNDA、PDA、JPDA三种算法实现航迹关联附matlab代码
1495 0
LaTeX中的多行数学公式
LaTeX中的多行数学公式
4488 0
LaTeX中的多行数学公式
|
7月前
|
机器学习/深度学习 资源调度 安全
【滤波跟踪】卡尔曼滤波电池SOC估计无迹(UEKF)+EKF扩展+安时法对比仿真
✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页: Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码及仿真咨询内容私信。 🔥  内容介绍 一、电池 SOC 估计的重要性与挑战 电池荷电状态(SOC)反映了电池剩余电量,对于电动汽车、储能系统等应用至关重要。精确估计 SOC 有助于优化电池使用策略、保障系统安全运行并延长电池寿命。然而,电池的复杂电化学特性使得 SOC 估计颇具挑战。电池的内阻、容量等参数会随温度、充放电倍率及使用时间变化,且电池的充放电过程涉及复杂的电化学反应,呈
329 1
|
7月前
|
存储 机器学习/深度学习 自然语言处理
56.大模型应用:大模型瘦身:量化、蒸馏、剪枝的基础原理与应用场景深度解析.56
本文深入对比大模型轻量化三大核心技术:量化(降精度,快部署)、蒸馏(知识迁移,高精度)、剪枝(删冗余,结构精简)。详解原理、分类、适用场景、代码实现及选型建议,助开发者根据硬件条件、精度要求与落地周期科学决策。
1727 16
|
7月前
|
存储 算法 机器人
【路径规划】基于时空A星算法求解带时间约束的多机器人路径规划问题附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 多机器人系统在现代各个领域发挥着越来越重要的作用。在工业生产中,多台机器人协同完成复杂的装配任务,能够提高生产效率和产品质量;在物流配送和智能仓储场景下,多机器人协作实现货物的快速搬运和存储,优化物流流程。而路径规划是多机器人系统实现高效协同工作的核心问
391 10
|
6月前
|
存储 安全 API
纽约州校园数据泄露激增背景下的安全治理与技术防御研究
本文基于纽约州2025年校园数据泄露激增72%的实证,剖析K-12教育机构在身份管理、钓鱼防护、数据加密、终端管控与应急响应中的系统性短板,构建零信任闭环防御体系,并提供可落地的代码示例,助力学区低成本、高实效筑牢未成年人数据安全防线。(239字)
302 7
|
6月前
|
云计算 开发者
阿里云省钱攻略:优惠券领取与使用一看就会
阿里云是阿里巴巴旗下主流云平台,本文详解其优惠券(代金券、满减券、折扣券)的领取渠道(权益中心/活动页)与使用技巧,助开发者高效抵扣账单、显著降低上云成本。
366 8
|
7月前
|
算法 安全 数据处理
【图像加密】基于Shuffling 和 Diffusion算法进行图像加密附matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 基于混沌的图像加密算法性能,主要取决于底层混沌系统的非线性特性。本文提出了一种混合一维与二维混沌映射(MOTDCM),其具有更宽的超混沌区间、更大的最大李雅普诺夫指数,以及比现有大多数混沌系统更复杂的非线性动力学特性。通过利用 MOTDCM 生成的超混沌序
262 19
|
7月前
|
算法 安全 机器人
【机械臂路径规划】基于随机采样的最优路径规划方法RRT解决 2D 空间内双连杆机器人避障避障路径附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 一、引言 在机器人应用领域,机械臂的路径规划至关重要。对于 2D 空间内的双连杆机器人,要在存在障碍物的环境中实现高效、安全的运动,就需要找到一条避开障碍物的最优路径。基于随机采样的快速探索随机树(RRT)算法为解决此类问题提供了有效途径。该算法通过在配置
263 15
|
7月前
|
数据挖掘 数据处理 开发者
【数据分析】基于状​​态任务网络(STN)建模的水泥厂和钢粉厂的模拟数据附Matlab代码
✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 👇 关注我领取海量matlab电子书和数学建模资料 🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。 🔥 内容介绍 在现代工业生产中,水泥厂和钢粉厂作为基础材料生产企业,其运营过程涉及众多复杂的环节和大量的数据。对这些数据进行深入分析和有效模拟,能够帮助企业全面了解生产状况,及时发现潜在问题,进而优化生产流程、提高产品质量、降低生产成本以及增强企业的市场竞争力。然而,
193 11