首页 > 其他分享 >【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,CKF滤波

【基于PSINS工具箱】以速度为观测量的SINS/GNSS组合导航,CKF滤波

时间:2024-11-06 09:49:48浏览次数:5  
标签:初始化 CKF 误差 代码 SINS GNSS IMU

在这里插入图片描述

基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式为CKF),无需下载,订阅专栏后可直接复制

文章目录

工具箱

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

程序简述

原有例程的 153 153 153组合导航是 S I N S SINS SINS/ G P S GPS GPS下的位置观测或位置+速度观测,本文所述的代码是仅三轴位置观测的,使用CKF来滤波。
最后输出速度对比、速度误差、姿态对比、姿态误差、位置对比、位置误差等图片。如下:

运行结果

  • 三轴AVP曲线:
    在这里插入图片描述

  • 三轴速度误差曲线:
    在这里插入图片描述

  • 滤波后 X X X轴速度累积概率分布函数:
    在这里插入图片描述
    误差的特技特性输出:
    在这里插入图片描述

代码

部分代码如下:

% 【PSINS】153 CKF 观测为GNSS的速度
% V:matlabfilter
% 2024-11-05/Ver1

% 清空工作空间,清除命令窗口,关闭所有图形窗口
clear; clc; close all;

rng(0); % 设置随机数种子为0,以确保结果可重复
glvs % 调用全局变量设置
psinstypedef('test_SINS_GPS_UKF_153_def'); % 设置PSINS类型

% 读取轨迹文件
trj = trjfile('trj10ms.mat');  % 读取轨迹数据(可视化注释已注释掉)

% 初始设置
[nn, ts, nts] = nnts(2, trj.ts); % 获取时间序列的参数
imuerr = imuerrset(0.03, 100, 0.001, 5); % 设置IMU误差参数
imu = imuadderr(trj.imu, imuerr);  % 对IMU数据添加误差
% imuplot(imu); % (注释掉的)绘制IMU数据

% 设置初始姿态误差
davp0 = avperrset([1; 1; 10]*60, 0.1, [1; 1; 3]); % 设置初始姿态误差
ins = insinit(avpadderr(trj.avp0, davp0), ts); % 初始化惯性导航系统

% CKF滤波器初始化
rk = [0.1, 0.1, 0.1]'; % 观测噪声权重
kf = kfinit(ins, davp0, imuerr, rk); % 初始化卡尔曼滤波器

len = length(imu); % 获取IMU数据长度
% 预分配内存以提高效率
[avp_CKF_vel, xkpk] = prealloc(fix(len/nn), 10, 2*kf.n+1);
timebar(nn, len, '15-state SINS/GPS CKF Simulation.'); % 显示进度条

ki = 1; % 初始化计数器
for k = 1:nn:len-nn+1
    k1 = k + nn - 1;  % 计算当前时间窗口的结束索引
    wvm = imu(k:k1, 1:6);  % 获取当前时间窗口的IMU数据

完整代码下载链接:https://gf.bilibili.com/item/detail/1106602012

程序讲解

这段 MATLAB 代码实现了基于 CKF(Cubic Kalman Filter,立方卡尔曼滤波)的速度观测处理,主要用于模拟和分析惯性导航系统(INS)与全球导航卫星系统(GNSS)结合的情况。以下是对代码的详细介绍:

代码功能概述

  1. 背景与应用

    • 本代码旨在通过 CKF 方法优化速度观测,使用 GNSS 数据来提高惯性导航系统的定位精度。CKF 是一种改进的卡尔曼滤波器,适用于处理非线性系统的状态估计问题。
  2. 输入数据

    • 代码从名为 trj10ms.mat 的文件中读取轨迹数据,该数据包含了 IMU(惯性测量单元)和 GNSS 的观测信息。
    • 初始的 IMU 数据通过 imuadderr 函数添加了噪声,模拟现实环境中传感器的误差。

代码结构与关键步骤

  1. 环境初始化

    • 使用 clear; clc; close all; 清除工作空间、命令窗口和关闭所有图形窗口,以确保代码运行时环境的干净。
    • 使用 rng(0); 设置随机数生成器的种子,以便于结果的可重复性。
  2. 参数设置

    • 通过 nnts 函数提取时间序列参数,确定数据处理的步长和时间间隔。
    • 使用 imuerrset 函数初始化 IMU 的误差参数,定义加速度计和陀螺仪的误差特性。
    • davp0 设置了初始的姿态误差,这对后续的 INS 初始化至关重要。
  3. INS 初始化

    • 通过 insinit 函数结合姿态误差和时间序列,初始化惯性导航系统的状态。
  4. CKF滤波器设置

    • 初始化 CKF 的相关参数,包括观测噪声权重和状态协方差矩阵。
    • 使用 prealloc 函数为结果数据预分配内存,优化性能。
  5. 主循环

    • 使用一个循环遍历所有的 IMU 数据,进行状态更新和滤波处理:
      • 从 IMU 数据中提取当前时间窗口的观测值,调用 insupdate 更新 INS 状态。
      • 计算当前状态的 CKF 更新,并将更新后的状态与 GNSS 数据进行融合。
      • 每当时间达到整数秒时,生成带噪声的 GNSS 速度观测,并使用 CKF 更新滤波器状态。
      • 保存每次迭代的估计结果和状态协方差,用于后续分析。
  6. 结果处理与绘图

    • 使用 avpcmpplot 函数比较真实的 GNSS 姿态与 CKF 估计的速度。
    • 绘制速度误差,展示在 X、Y、Z 轴的速度估计与真实值之间的差异。
    • 最后,绘制速度误差的累积概率分布函数(CDF),直观展示滤波结果的统计特性。

结论

这段代码通过 CKF 方法有效地处理了 IMU 和 GNSS 的融合问题,展示了如何在动态环境中利用不同传感器的数据提高系统的定位精度。其结构清晰,便于理解和扩展,适合在实际应用中进行进一步的研究和优化。

标签:初始化,CKF,误差,代码,SINS,GNSS,IMU
From: https://blog.csdn.net/2401_86544394/article/details/143502691

相关文章

  • 基于【PSINS工具箱】提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航
    基于【PSINS工具箱】,提供一个MATLAB例程,仅以速度为观测量的SINS/GNSS组合导航(滤波方式可选EKF/UKF/CKF),无需下载,订阅专栏后可直接复制文章目录工具箱程序简述运行结果程序源代码程序讲解代码功能概述代码结构与关键步骤结论工具箱本程序需要在安装工具箱后使用,......
  • C/C++ stackful 有栈协同程式的一些缺点。
    在阅读本文之前,可以先查阅本人以下其它文章:C++20标准协同程序(协程)基于编译器展开的stackless协程。_协同编译具体-CSDN博客C/C++如何正确的切换协同程序?(基于协程的并行架构)_c++怎么切换运行程序-CSDN博客 关于Go协同程序(Coroutines协程)、Go汇编及一些注意事项。_go......
  • IC-GVINS: A Robust, Real-Time, INS-Centric GNSS-Visual-Inertial Navigation Syste
    IC-GVINS:ARobust,Real-Time,INS-CentricGNSS-Visual-InertialNavigationSystemIC-GVINS:一种稳健的实时以惯性导航系统为中心的全球导航卫星系统视觉惯性导航系统XiaojiNiu${}^{\circledR}$,HailiangTang${}^{\circledR}$,TishengZhang${}^{\circledR......
  • 【基于PSINS工具箱的程序设计】专栏目录,持续更新……
    文章目录重要的文章后续更新方向专栏介绍在进行上层设计时,借助工具箱完成底层的复杂计算是很有必要的。也能利用工具箱学习惯导解算。本专栏分享若干自己基于PSINS编写的滤波、导航程序。如果没有工具箱,自己网上面下载或私信我,我给你啊-......
  • Dockfile
    Dockfile官方文档操作说明描述ADD添加本地或远程文件和目录。ARG使用构建时变量。CMD指定默认命令。COPY复制文件和目录。ENTRYPOINT指定默认可执行文件。ENV设置环境变量。EXPOSE描述您的应用程序正在监听哪些端口。FROM从基础图像创建......
  • EKF、UKF、CKF的对比(MATLAB代码)
      扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)和容积卡尔曼滤波(CKF)。通过对比这三种算法在相同动态系统下的表现,用户能够深入理解每种滤波器的优缺点,为自己的项目选择最合适的技术方案。主要特点三种滤波算法对比:同时实现EKF、UKF和CKF,便于用户直观比较不同算法在相同条件下......
  • luckfox1106初次使用
    luckfox1106初次使用下载rk驱动https://files.luckfox.com/wiki/Luckfox-Pico/Software/DriverAssitant_v5.12.zip安装驱动SD卡烧录工具https://files.luckfox.com/wiki/Luckfox-Pico/Software/SocToolKit_v1.98_20240705_01_win.zip右键以管理员方式运行......
  • WPF slider IsSelectionRangeEnabled TickFrequency
    <Windowx:Class="WpfApp426.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft......
  • gnss信号转发器 北斗卫星转发器 gps信号转发器
    在现代社会的工作中,我们都会使用到卫星信号。但存在一个现象,那就是卫星信号不能够穿透建筑物,生产车间、实验室等室内环境下的测试工作就会遇到困难。SYN2309型GNSS信号转发器是由西安同步电子科技有限公司精心设计、自行研发生产的一款增益可调的GNSS全频段卫星信号转发系统,主要功......
  • ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块种类及特点
    ATGM331C-5T系列模块通过UART作为主要输出通道,按照NMEA0183的协议格式输出。产品选型:性能指标:出色的定位导航功能,支持BDS/GPS卫星导航系统的单系统授时,以及任意组合的多系统联合定位,并支持QZSS和SBAS系统。支持A-GNSS冷启动捕获灵敏度:-148dBm跟踪灵敏度:-16......