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

在这里插入图片描述

详解工具箱的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/Ver1glvs %工具箱统一初始化,将必备的变量加入工作区
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+1k1 = 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 noisekf = 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;endtimebar;
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)));

修改后的结果

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143329.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

十三 系统架构设计(考点篇)

1 软件架构的概念 一个程序和计算系统软件体系结构是指系统的一个或者多个结构。结构中包括软件的构件,构件 的外部可见属性以及它们之间的相互关系。 体系结构并非可运行软件。确切地说,它是一种表达,使软件工程师能够: (1)分…

猎板PCB大讲堂——全球电子产品中PCB阻燃性能的法规与标准概述

今天猎板PCB来说说PCB的板材的阻燃性!猎板发现有些PCB平台在售的板厂大多为非阻燃系列,而在许多国家和地区,电子产品及其组件,包括印刷电路板(PCB),都必须遵守严格的安全标准,其中包…

面试官:你们是如何在数据库中存储密码?

我有一个朋友,姑且就先称呼他为小王吧,前几日,小王去面试; 面试官问:如何在数据库中存储密码? 场景: 小王是应聘者,张总是面试官,面试主要围绕密码存储和相关的安全技术…

基于PHP+MySQL组合开发的在线客服源码系统 聊天记录实时保存 带完整的安装代码包以及搭建部署教程

系统概述 随着互联网技术的飞速发展,企业与客户之间的沟通方式日益多样化,在线客服系统作为连接企业与客户的桥梁,其重要性不言而喻。然而,市场上现有的在线客服系统往往存在成本高、定制性差、维护复杂等问题。针对这些痛点&…

idea插件开发的第四天-完善JSON工具

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在Tools插件之上进行开发本次demo将使用idea的一些组件优化 Tools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了idea插件的开发难度,并提供开发者模块,可以极大的为开发者开…

C++源代码封装成dll动态链接库,并在WPF项目中使用的步骤说明

文章目录 1. 创建并生成C的DLL(C动态链接库)(1)新建项目-->开发语言选定C,在搜索栏搜索“动态链接库”-->配置项目名称和路径-->添加类,此处命名为My_C_Class(2)实现类的功能&#xff…

Logstash 安装与部署(无坑版)

下载 版本对照关系:ElasticSearch 7.9.2 和 Logstash 7.9.2 ; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接:https://artifacts.elastic.co/downloads/logstash/logst…

Flask-WTF的使用

组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构: my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── templat…

什么样的无线麦克风好?罗德、西圣、优篮子无线麦克风实测对比

在这个人人都在用短视频分享记录生活的时代,拍摄生活Vlog和短视频已经深入我们生活的方方面面,美食分享、搞笑视频以及直播等等,不过既然说到视频创作,那么光有好的内容画面肯定是远远不够的,试想一段视频里杂音不断&a…

单片机带隙电压基准电路

单片机带隙电压基准电路 一、带隙电压基准电路概述 带隙电压基准电路在单片机中占据着至关重要的地位。它能够为各种模拟集成电路提供稳定的参考电压,确保电路的正常运行。例如,在高精度的比较器中,带隙电压基准电路可以提供一个精确的参考…

【可测试性实践】C++单元测试:gtest gmock

引言 google test是目前C主流的单元测试框架,本文介绍如何在工程引入gtest和gmock,并提供入门参考示例。根据黄金圈思维我们先思考Why(为什么做),为什么我们要进行单元测试,为什么要引入mock手段来测试代码…

IBM中国研发部裁员:全球化背景下的中国IT产业挑战与机遇

文章目录 每日一句正能量前言整体分析人才发展裁员对中国IT人才市场的影响:IT从业者提升竞争力的策略: 产业未来后记 每日一句正能量 一切美好的事物都是曲折地接近自己的目标,一切笔直都是骗人的,所有真理都是弯曲的,…

设计一个高质量的API接口:提升应用性能的关键步骤

在当今的软件开发世界中,API(应用程序编程接口)接口扮演着至关重要的角色。一个设计精良的API不仅能够提高开发效率,还能提升用户体验,并确保系统的可扩展性和安全性。本文将探讨如何设计一个高质量的API接口&#xff…

蓝卓标杆客户镇洋发展,荣获IDC中国未来企业大奖

9月11-12日,2024 IDC中国年度盛典暨颁奖典礼在上海正式举办,年度盛典公布了2024 IDC中国未来企业大奖等系列奖项,以此表彰不同机构/组织/个人在数字化转型大背景下的努力与成绩。 其中,浙江镇洋发展股份有限公司(以下简…

【sgCreateCallAPIFunction】自定义小工具:敏捷开发→调用接口方法代码生成工具

<template><div :class"$options.name" class"sgDevTool"><sgHead /><div class"sg-container"><div class"sg-start"><div style"margin-bottom: 10px">调用接口方法定义列表</div…

Gradio导入AIGC大模型创建web端智能体聊天机器人,python(2)

Gradio导入AIGC大模型创建web端智能体聊天机器人&#xff0c;python&#xff08;2&#xff09; 选用这个大模型&#xff1a; https://huggingface.co/HuggingFaceTB/SmolLM-1.7B-Instructhttps://huggingface.co/HuggingFaceTB/SmolLM-1.7B-Instruct原因是该模型相对比较小&am…

使用Dev-C++实现比大小的C语言程序

使用Dev-C++实现比大小的C语言程序 引言一、Dev-C++开发环境简介与安装1.1 Dev-C++简介1.2 Dev-C++安装步骤二、初识C语言与Dev-C++的使用2.1 C语言基础2.2 创建一个新的C项目2.3 编写简单的C程序2.4 编译与运行三、编写比大小的C程序3.1 程序需求3.2 程序设计3.3 编写代码3.4 …

dubbo三

dubbo dubbo架构各层说明 URL举例解析 消费者引用服务过程 项目初始化

.ideavimrc在idea打不开

### bug修复 自己不知道搞了啥导致.ideavimrc文件打不开&#xff0c;如图点击无反应 ![[Pasted image 20240917004710.png|400]] 后面发现是格式类型的错误 参考[这篇文章](https://blog.csdn.net/qq_41147260/article/details/85002668) **修复** - AltCtrls 打开设置 - Edi…

win11:重命名文件自动改变位置

你用的系统有个小bug 就是在桌面上重命名文件之后 文件会自动跳转到左上角 有些不注意的以为文件丢了 分类摆放好的文件 重命名之后还得拉回原来的位置 其实简单设置一下 就可以修复这个小bug 1、我们找到设置 在搜索栏搜索“个性化”&#xff0c;选择---‘开始’菜单设置 2、…