【PSINS】EKF、UKF、CKF三个滤波下的组合导航(松组合)对比

几种经典非线性滤波算法简单概括(EKF,UKF,CKF,PF) 几种经典非线性滤波算法概括 阅读详情

在这里插入图片描述

该 MATLAB 代码实现了扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和无迹卡尔曼滤波的变体(CKF)的对比,主要用于导航与定位领域,通过处理惯性测量单元(IMU)和GPS数据来估计运动轨迹。

说明:基于PSINS工具箱的EKF、UKF、CKF对比

该 MATLAB 代码实现了扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和无迹卡尔曼滤波的变体(CKF)的对比,主要用于导航与定位领域,通过处理惯性测量单元(IMU)和GPS数据来估计运动轨迹。

主要功能

  1. 参数初始化:

    • 清理工作空间并设置随机数生成器。
    • 定义采样时间间隔和初始的速度、姿态和位置(AVP)信息。
  2. 轨迹设置:

    • 通过一系列轨迹段(如匀速、加速、转弯和爬升)来模拟运动轨迹。
    • 使用trjsimu函数生成包含IMU数据的轨迹。
  3. 初始化滤波器:

    • 设置IMU误差模型和初始状态误差。
    • 初始化INS(惯性导航系统)和卡尔曼滤波器(KF)。
  4. 扩展卡尔曼滤波(EKF):

    • 在每个时间步中更新INS状态并进行KF更新。
    • 通过模拟GPS位置获取带噪声的观测值,进行观测更新。
    • 记录滤波结果并进行结果展示。
  5. 无迹卡尔曼滤波(UKF):

    • 类似于EKF的过程,但使用UKF算法进行状态更新。
    • 处理IMU数据并用GPS数据进行观测更新,记录滤波结果。
  6. 无迹卡尔曼滤波变体(CKF):

    • 重复UKF的流程,但使用CKF算法进行状态估计。
    • 记录估计的状态和协方差。
  7. 结果可视化:

    • 绘制真实轨迹、EKF、UKF和CKF的估计轨迹。
    • 误差比较:绘制不同滤波器在X、Y、Z轴上的位置误差及其累积分布函数(CDF)。
  8. 性能评估:

    • 输出各个滤波器在X、Y、Z轴上的最大误差,以量化不同滤波器的性能。

运行结果

轨迹曲线:
在这里插入图片描述
误差曲线:
在这里插入图片描述

代码

部分代码:

% 基于PSINS工具箱的EKF、UKF、CKF对比
% 2024-7-14/Ver1
clear;clc;close all;
rng(0);
glvs
psinstypedef(153);
ts = 0.1;       % sampling interval
%% 轨迹设置
avp0 = [[0;0;0]; [0;0;0]; [0;0;0]]; % init avp
% trajectory segment setting
traj_ = [];
seg = trjsegment(traj_, 'init',         0);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'accelerate',   10, traj_, 1);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'coturnleft',   45, 2, traj_, 4);
seg = trjsegment(seg, 'climb',        10, 2, traj_, 50);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'descent',      10, 2, traj_, 50);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'coturnleft',   45, 2, traj_, 4);
seg = trjsegment(seg, 'uniform',      100);
seg = trjsegment(seg, 'deaccelerate', 5,  traj_, 2); %2
seg = trjsegment(seg, 'uniform',      100);
% generate, save & plot
trj = trjsimu(avp0, seg.wat, ts, 1);
% trjfile('trj10ms.mat', trj);
%% 初始化
% initial settings
[nn, ts, nts] = nnts(2, trj.ts);
imuerr = imuerrset(0.03, 100, 0.001, 5);
imu = imuadderr(trj.imu, imuerr);
davp0 = avperrset([0.5;-0.5;20], 0.1, [1;1;3]);
ins = insinit(avpadderr(trj.avp0,davp0), ts);
% KF filter
rk = poserrset([1;1;3]);
kf = kfinit(ins, davp0, imuerr, rk);
kf.Pmin = [avperrset(0.01,1e-4,0.1); gabias(1e-3, [1,10])].^2;  kf.pconstrain=1;
len = length(imu); [avp_ekf, xkpk] = prealloc(fix(len/nn), 10, 2*kf.n+1);
timebar(nn, len, 'KF'); 
ki = 1;

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

从球面积分到滤波算法:容积卡尔曼滤波(CKF)的数学之美 本文深入探讨了容积卡尔曼滤波(CKF)的数学原理与工程应用。CKF基于三阶球面-径向容积准则,仅需2n个对称的容积点,即可高精度逼近非线性高斯状态的后验分布。相比EKF和UKF,CKF无需调参、数值稳定,在目标跟踪、组合导航等高维非线性估计问题中展现出显著优势。 阅读详情

相关推荐

三种滤波(EKF、UKF、CKF)的对比,含MATLAB源代码

使用MATLAB模拟三维的滤波,状态更新和观测更新均为非线性的,模拟一定强度的机动性,可用于卡尔曼滤波方法的对比学习,自己修改成需要的运动模型后,可以用于组合导航(GPS+DVL形式)。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 2010

CKF MCSCKF UKF EKF滤波性能对比

在非线性滤波中,比较了CKF MCSCKF UKF EKF 几种非线性滤波的性能 用MATLAB进行仿真.八维非线性滤波中,CKF,MCSCKF 比较稳定.EKF UKF 表现不好.

helldoger的博客 5327

【PSINS】EKF、UKF、CKF三个滤波下的组合导航(松组合)对比,订阅专栏后可查看完整代码

基于PSINS的MATLAB工具箱。工具箱给的例程只有单独的EKF等滤波算法,这个程序将三种方法汇总在一起,并进行对比。EKF:扩展卡尔曼滤波UKF:无迹卡尔曼滤波CKF:容积卡尔曼滤波。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 1911

PSINS中19维组合导航模块sinsgps详解(滤波部分)

上述代码先进行的是惯导算法更新 2.为创建卡尔曼滤波的状态转移矩阵 3.卡尔曼滤波的时间更新 4. 是计算和对应的时间差值,和数据所在的行数 5. 量测更新方法标识的初始化 6. 为进行杆臂补偿 7. 上述代码块表示为,计算时间内的位置增量 8. 上述代码为根据提供的观测量的维度,设计卡尔曼滤波的观测值和系数矩阵 9. 为进行卡尔曼滤波的量测更新 10. 10. 数据存储 11. 卡尔曼滤波的反馈校正 12. 数据存储············································

十八与她的博客 1340

【基于PSINS】CKF滤波,观测量为航向角、位置、速度(共7维),附完整代码

本代码通过扩展观测维度和改进 CKF 算法,实现了高精度的 SINS/GPS 组合导航,适用于无人机、自动驾驶等场景。实验结果表明,滤波后导航误差显著降低,验证了方法的有效性。代码结构清晰,涵盖数据加载、滤波处理、结果分析全流程,可作为惯性导航算法的参考实现。如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 482

【PDR定位导航MATLAB代码(9)】基于行人航位推算的三维IMM-CKF行人导航,融合定位增强精度。附下载链接

向三维行人导航中的多运动模式估计问题,将带漂移的PDR位置观测与IMM-CKF滤波结合,可以直观看到纯PDR轨迹、融合轨迹、误差曲线和模型概率的变化。只有一个文件,适合学习、滤波算法改造和行人定位方案验证

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 201

基于【PSINS工具箱】提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航

背景与应用本代码旨在通过 CKF 方法优化速度观测,使用 GNSS 数据来提高惯性导航系统的定位精度。CKF 是一种改进的卡尔曼滤波器,适用于处理非线性系统的状态估计问题。输入数据代码从名为的文件中读取轨迹数据,该数据包含了 IMU(惯性测量单元)和 GNSS 的观测信息。初始的 IMU 数据通过imuadderr函数添加了噪声,模拟现实环境中传感器的误差。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 1021

MATLAB惯性导航算法验证环境:卡尔曼滤波闭环调试沙盒

惯性导航系统(INS)是无人系统与高精度定位的核心技术,其性能高度依赖误差建模与状态估计算法。卡尔曼滤波器作为主流估计框架,需在真实传感器误差(如陀螺零偏、加表刻度因子、安装失准角)下验证可观测性与收敛性。该工具提供面向工程复现的MATLAB脚本级验证沙盒,支持EKF/UKF/CKF多滤波器对比、可配置误差注入及实测数据闭环调试,显著降低从理论模型到硬件问题归因的验证门槛。适用于MEMS惯导算法开发、课程设计及鲁棒性摸底,尤其适配无RTK标定条件下的快速验证场景。

weixin_29185167的博客 298

基于【PSINS工具箱】提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航、附下载链接

背景与应用本代码旨在通过 CKF 方法优化速度观测,使用 GNSS 数据来提高惯性导航系统的定位精度。CKF 是一种改进的卡尔曼滤波器,适用于处理非线性系统的状态估计问题。输入数据代码从名为的文件中读取轨迹数据,该数据包含了 IMU(惯性测量单元)和 GNSS 的观测信息。初始的 IMU 数据通过imuadderr函数添加了噪声,模拟现实环境中传感器的误差。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 914

UKF-CKF-EKF代码比较(matlab)

无迹卡尔曼滤波(UKF), 容积卡尔曼滤波(CKF), 扩展卡尔曼滤波(EKF)三种卡尔曼滤波算法的比较,使用的是matlab代码

平方根容积卡尔曼滤波 CKF 及UKF和EKF

包含平方根容积卡尔曼滤波(CKF),无迹卡尔曼滤波(UKF),扩展卡尔曼滤波(EKF)的matlab仿真程序。

【基于PSINS工具箱的程序设计】专栏目录,持续更新……

在进行上层设计时,借助工具箱完成底层的复杂计算是很有必要的。也能利用工具箱学习惯导解算。本专栏分享若干自己基于PSINS编写的滤波、导航程序。如果没有工具箱,自己网上面下载或私信我,我给你啊 -😃。

matlabfilter的博客,所有代码可联系获取 1242

EKF+UKF+CKF+PF的效果对比-三维非线性滤波-MATLAB例程

程序背景是组合导航下的卡尔曼滤波,三维状态量可以理解成三维的位置,也可以理解成三维的速度。相应的,三维的输入量可以理解成三维的速度,也可以理解成三维的加速度,比较灵活。 程序结构如下: 初始化→运动模型建立→滤波参数设置→EKF→UKF→CKF→PF→误差计算→结果绘制

03-PSINS工具箱学习(三)让AI解释PSINS中的各种卡尔曼滤波函数

原始 Markdown文档、Visio流程图、XMind思维导图见:https://github.com/LiZhengXiao99/Navigation-LearningPSINS 中的 Kalman 滤波代码都在百行以内,没调用什么函数,而且通用性很强,拿去让 AI 解释,效果挺好。

实践出真理,接毕设/课设项目开发指导 2201

STM32串口接收避坑指南:为什么你的USART_IT_IDLE中断不触发?附完整调试流程

本文深入解析STM32串口接收中断机制,特别是USART_IT_IDLE中断不触发的常见原因及解决方案。通过详细分析中断标志清除顺序、波特率配置、硬件连接等关键因素,并提供完整的调试流程和代码示例,帮助开发者快速定位并解决串口通信问题。

weixin_42519985的博客 346

SAP成本核算-事中控制(成本对象控制/成本归集与结算)

本文详细介绍了SAP系统中工单成本归集与结算的全流程管理。主要内容包括:1)工单成本三阶段归集(投料、报工、入库)的具体操作与计算方法;2)工单实际成本结算七步骤:从实际费用归集、成本分割、作业价格计算到差异结算的全过程;3)关键注意事项如测试运行验证、价格单位确认、无在制品处理等。通过标准价计算、实际作业重估等机制,系统实现了生产成本从计划到实际的精确核算,最终生成财务所需的差异结算凭证。所有操作均提供单工单和批量处理两种方式,满足不同业务场景需求。

小九啥也不会 1363

我的创作纪念日(四周年)

一般情况下,休息日和每晚八点以后会干点自己喜欢的事,如果有MATLAB、组合导航等方面的个人定制、程序购买,欢迎联系我。如果想稍微有点收入,提高原力值到1000+,等级到5级以后,即可发布付费资源。每天发两篇文章,流量券可以帮助快速涨粉。兼职创作者,平时白天有本职工作。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 295

QT串口通信控制LED上位机开发教程

串口通信是嵌入式系统与PC端交互的基础技术,通过UART协议实现设备间的数据传输。QT框架提供了跨平台的串口编程支持,结合其GUI模块可以快速开发上位机控制程序。在工业自动化和物联网领域,这种上下位机架构广泛应用于设备监控和控制场景。本案例展示了如何使用QT的SerialPort模块实现LED控制功能,包含串口参数配置、指令发送等核心功能实现,为嵌入式GUI开发提供实践参考。

weixin_42598278的博客 582

《IMM交互式多模型滤波MATLAB实践》专栏目录,持续更新……

【逐行注释】基于CV/CT模型的IMM|MATLAB程序|源代码复制后即可运行,无需下载【matlab代码】3个模型的IMM例程(匀速、左转、右转),附源代码(可复制粘贴)(CV、CA、左转CT、右转CT)的交互式多模型系统,介绍与MATLAB例程四个模型(CV、CA、左转CT、右转CT)的交互式多模型系统,介绍与MATLAB例程交互式多模型(IMM)是一种用于动态系统状态估计的算法,特别适合处理目标运动模式变化的情况。在现实世界中,目标的运动状态可能会因为环境变化或其他因素而发生变化。

matlabfilter的博客,所有代码可联系获取 990

开源数显表

开源数显表,广泛应用于车床、铣床、磨床、镗床、火花机、线切割等。市面上此类液晶数显表多数都是基于此项目。 一、基本配置 硬件 主控:STM32F407VGT6 LCD:群创AT070TN92 显示驱动:RA8875 光栅尺:3 x 输入(X/Y/Z) 串口:1 x MAX3232 继电器:2 x 输出 存储:AT24C64 模拟输入:LM324C 电源:AC 220V 软件 工程版本:Keil 5 STM32库:V1.4.0 图形界面:uCGUI 多语言支持:中文、英文 二、项目文

m0_70934529的博客 435

Stm32L0 STM32CUBE中UART和使用LPUART1以及串口不进中断问题解决

/* 开启串口1中断 */ LL_USART_EnableIT_RXNE(LPUART1); /* 开启串口2中断 */ LL_USART_EnableIT_RXNE(USART2);

シ❤゛甜虾的个人博客 7686

【亲测免费】 UKF、CKF 和 EKF 代码比较 (Matlab)

UKF、CKF 和 EKF 代码比较 (Matlab) 【下载地址】UKFCKF和EKF代码比较Matlab 本仓库提供了一个资源文件,用于比较三种常见的卡尔曼滤波算法:无迹卡尔曼滤波(UKF)、容积卡尔曼滤波(CKF)和扩展卡尔曼滤波(EKF)。这些算法在信号处理、导航、机器人等领域中广泛应用,用于状态估计和滤波 ...

gitblog_09707的博客 598

科研——ICONIP论文修改和提交

ICONIP说明文档

Blackoutdragon的博客 6645
上一篇: Sage husa下的自适应粒子滤波(PF)代码
下一篇: 【开源 MATLAB卡尔曼滤波 极简代码】一维、线性的卡尔曼滤波,可用于温度滤波、湿度滤波等,附完整的代码
MATLAB卡尔曼
MATLAB卡尔曼 毕昇杯全国一等奖获得者 毕昇杯全国一等奖获得者 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄14年 7622粉丝 1415原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值