首页 > 其他分享 >【逐行解析】PSINS工具箱中的UKF组合导航的代码解析(test_SINS_GPS_UKF_153)

【逐行解析】PSINS工具箱中的UKF组合导航的代码解析(test_SINS_GPS_UKF_153)

时间:2024-09-18 15:23:21浏览次数:11  
标签:trj kf avp ins UKF 解析 逐行 GPS

在这里插入图片描述

详解工具箱的UKF153代码,最后给出运行结果的解读和代码修改思路

文章目录

工具箱

本程序需要在安装工具箱后使用,工具箱是开源的,链接:http://www.psins.org.cn/kydm

程序简述

程序实现基于UKF(无迹卡尔曼滤波)的SINS(捷联惯性导航系统)与GPS集成导航仿真。
顺序如下:
通过循环迭代,从IMU数据中提取加速度和角速度。 → \rightarrow →更新INS状态,进行一步预测。 → \rightarrow →如果检测到GPS信号(时间戳能被1整除),则进行GPS位置模拟并更新卡尔曼滤波器。 → \rightarrow →记录当前的AVP估计值和相关协方差。

函数详解

% 源代码:SINS/GPS intergrated navigation simulation using UKF.
% 下载自www.psins.org.cn网站
% 中文注释来自matlabfilter(闲鱼、VX同号)
% 2024-09-17/Ver1

glvs %工具箱统一初始化,将必备的变量加入工作区
psinstypedef('test_SINS_GPS_UKF_153_def'); %UKF153的初始化
trj = trjfile('trj10ms.mat'); %导入导航的数据
% initial settings
[nn, ts, nts] = nnts(2, trj.ts); %设定采样值
imuerr = imuerrset(0.03, 100, 0.001, 5); %IMU的误差设定
imu = imuadderr(trj.imu, imuerr);  % 给IMU理想值加上误差
davp0 = avperrset([1;1;10]*60, 0.1, [1;1;3]); %设置初始的AVP误差
ins = insinit(avpadderr(trj.avp0,davp0), ts); %初始化INS
% UKF 滤波部分
rk = poserrset([1;1;3]); %设置GPS的三轴误差(1,1,3分别代表纬度精度高度方向1m,1m,3m的误差)
kf = kfinit(ins, davp0, imuerr, rk); %卡尔曼滤波的初始化
len = length(imu); [avp, xkpk] = prealloc(fix(len/nn), 10, 2*kf.n+1);
timebar(nn, len, '15-state SINS/GPS UKF Simulation.'); 
ki = 1;
for k=1:nn:len-nn+1
    k1 = k+nn-1;  
    wvm = imu(k:k1,1:6);  t = imu(k1,end); %从imu里面提取出来加速度、角速度和时间戳
    ins = insupdate(ins, wvm); %INS更新(一步预测的迭代)
    kf.px = ins;
    kf = ukf(kf); %更新kf的相关系数
    if mod(t,1)==0 %检测t是否能被1整除(如果能整除,表示此刻有GPS信号)
        posGPS = trj.avp(k1,7:9)' + davp0(7:9).*randn(3,1);  % GPS pos simulation with some white noise
        kf = ukf(kf, ins.pos-posGPS, 'M');  % UKF滤波函数
        [kf, ins] = kffeedback(kf, ins, 1, 'avp'); %状态校正
        avp(ki,:) = [ins.avp', t]; %将当前时刻的滤波值赋给avp矩阵
        xkpk(ki,:) = [kf.xk; diag(kf.Pxk); t]';  ki = ki+1;
    end
    timebar;
end
avp(ki:end,:) = [];  xkpk(ki:end,:) = []; 
% show results
insplot(avp); %绘制滤波得到的avp值
avperr = avpcmpplot(trj.avp, avp); %计算滤波值的误差(并绘制误差图)
kfplot(xkpk, avperr, imuerr); %绘制误差的状态和方差


运行结果解读

运行得到avp图像:
在这里插入图片描述

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

状态协方差曲线:
在这里插入图片描述

修改思路

% 绘制三维的轨迹(真值和滤波后的值)
figure;
plot3(trj.avp(:,8),trj.avp(:,7),trj.avp(:,9)); %真值
hold on
plot3(avp(:,8),avp(:,7),avp(:,9)); %滤波后的值
legend('真值轨迹','滤波后的轨迹')
xlabel('经度');ylabel('纬度');zlabel('高度');

% 计算经度误差值(只是一个示例,可以更改为纬度和高度)
fprintf('经度误差的平均值为%d\n',mean(avperr(:,8)));

修改后的结果

在这里插入图片描述

在这里插入图片描述

标签:trj,kf,avp,ins,UKF,解析,逐行,GPS
From: https://blog.csdn.net/callmeup/article/details/142315982

相关文章

  • 为什么HTTPS会引入SSL/TLS协议:深入解析网络安全的基石
    目录1.什么是HTTPS?2.为什么需要HTTPS?3.SSL/TLS协议的作用4.SSL/TLS的工作流程5.为什么HTTPS要引入SSL/TLS?在当今这个数字化时代,网络安全已经成为了我们不可忽视的重要议题。作为软件工程领域的博主,今天将深入探讨一个关键的网络安全技术——SSL/TLS协议,以及它在HTT......
  • 解析亚马逊最新《白皮书》,看出海ERP如何帮助企业实现“全方位创新,高质量出海”
    在当前全球电商的快速发展背景下,中国出口跨境电商正以前所未有的速度增长,这不仅体现在产业规模的扩大,更在于综合实力的提升。亚马逊中国副总裁、亚马逊全球开店亚太区市场及合作拓展负责人邱胜指出,中国出口跨境电商的“加速度”发展,带来了地域分布的广泛化、出口品类的多元化、人才......
  • Java 8 新特性:Lambda 表达式与函数式接口全面解析(OOF(面向函数编程))
    在Java8中,引入了一系列重要的新特性,极大地提升了开发者的编程体验和代码简洁性。其中,Lambda表达式和函数式接口是最具影响力的特性,尤其在推动Java进入函数式编程领域方面具有里程碑意义。本文将全面深入地讨论Lambda表达式、函数式接口(包括Java内置函数式接口与自......
  • 文献管理不再是难题!必装Zotero插件大解析!
     还在为海量文献管理头疼吗?还在为找不到合适的插件犯愁吗?别急,今天我就要带你解锁Zotero的终极武器-那些让你爱不释手的必备插件!作为一个从小白到文献管理达人的过来人,我可以负责任地说:没有这些插件,你的Zotero只能发挥一半功力!安装了这些插件,你的效率绝对能飙升!......
  • Spring Cloud全解析:服务调用之自定义Feign的配置
    自定义Feign的配置Feign的默认配置类是FeignClientsConfiguration,其内部定义了Feign默认使用的编码器、解码器、契约、重试机制等@Bean@ConditionalOnMissingBeanpublicDecoderfeignDecoder(){//解码器,将字节数组反序列化为方法返回值类型的对象,默认只支持反序列化为St......
  • JavaScript 的 this 指向问题深度解析
    JavaScript中的this指向问题有很多博客在解释,仍然有很多人问。上周我们的开发团队连续两个人遇到相关问题,所以我不得不将关于前端构建技术的交流会延长了半个时候讨论this的问题。与我们常见的很多语言不同,JavaScript函数中的this指向并不是在函数定义的时候确定的,......
  • mongodb 中rs.stauts()命令参数解析
    转载请注明出处:rs.status()命令用于获取MongoDB副本集的状态信息。它提供了关于副本集中各个节点的详细信息,包括节点的健康状况、角色、选举状态等。以下是查看一个mongo集群状态返回的参数:rs0:PRIMARY>rs.status(){"set":"rs0","date":ISODa......
  • 深入解析 Apache Ranger
    一.概述1.什么是ApacheRanger?ApacheRanger是一个为大数据平台提供集中化安全管理的开源框架,专门用于确保Hadoop生态系统中的数据安全。Ranger通过提供细粒度的访问控制和监控,帮助组织实现对数据的全面安全管理,确保数据访问的透明性、可控性和合规性。2.背景与发......
  • Vue2 和 Vue3 区别 — 源码深度解析
    Vue2和Vue3区别—源码深度解析Vue.js作为前端领域中的一款热门框架,其每一次版本迭代都牵动着无数开发者的心。今天,我们将深度解析Vue2与Vue3之间的最主要区别,通过源码对比,带你领略这两个版本背后的奥秘。文章目录Vue2和Vue3区别—源......
  • Zookeeper 3.8.4 安装和参数解析
    安装zookeeper之前必须先安装JDK,有关Linux环境JDK可以参考我以前写的博文1、关于Linux服务器配置java环境遇到的问题2、Linux环境安装openJDK3、Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境文章目录1.zookeeper安装2.参数解析1.zookeeper安......