当前位置: 首页 > web >正文

【PSINS工具箱】MATLAB例程,平面上的组合导航,观测量为位置、速度、航向角,共5维。状态量为经典的15维

在这里插入图片描述

PSINS工具箱里面无论153还是156、159,都是三维空间上的滤波,这里给出平面上的滤波配置,使用EKF,观测为位置、速度、航向角(共2+2+1=5维)

文章目录

  • 程序功能
    • 主要步骤
  • 运行结果
  • MATLAB代码

程序功能

本文介绍的代码为二维平面下的位置、速度和航向角观测融合的 EKF 滤波仿真。功能如下:

  • 构建一个具有加速、匀速、转弯等运动特性的二维运动轨迹;
  • IMUIMUIMU数据(陀螺和加速度)添加噪声与系统误差;
  • 使用EKFEKFEKF滤波器融合 航向角 + 速度 + 位置观测信息
  • 对比滤波前后结果,评估滤波对速度和位置估计精度的改善效果;
  • 输出轨迹对比图、误差曲线、误差统计指标、热力图和性能评估表。

主要步骤

  1. 初始化与轨迹生成

    • 设置采样周期 ts=0.1s
    • 构造运动轨迹(匀速、加速、减速、转弯等);
    • 生成理想的惯性数据 trj
  2. IMU误差建模

    • 使用 imuerrset 设置陀螺零偏、随机游走、加速度误差等;
    • 在理想IMU数据上添加误差,得到含噪数据 imu
  3. 滤波器初始化

    • 设置初始姿态、速度和位置误差;
    • 构建 15维状态扩展卡尔曼滤波器(含姿态误差、速度误差、位置误差、陀螺零偏、加速度计零偏);
    • 设置过程噪声矩阵 Q、观测噪声矩阵 R、初始协方差矩阵 P
  4. 滤波循环

    • 利用惯导更新 insupdate
    • 每隔1秒引入观测(航向角、速度、位置);
    • 调用 kfupdate 更新滤波器状态并反馈至惯导解算;
    • 存储滤波结果用于后续分析。
  5. 结果分析与可视化

    • 绘制速度、位置误差曲线;
    • 绘制滤波后轨迹与真实轨迹对比图;
    • 绘制位置误差热力图;
    • 计算误差统计指标(MAE、RMSE、最大误差、标准差、95%分位数);
    • 生成滤波性能评估表格和报告。

运行结果

轨迹示意图:
在这里插入图片描述

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

输出的误差特性:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

MATLAB代码

部分代码如下:

% 【PSINS】二维平面上的位置、速度、航向角为观测的155,滤波方法为EKF
% 作者:matlabfilter
% 2025-08-20/Ver1
% 清空工作空间,清除命令窗口,关闭所有图形窗口
clear; clc; close all;
rng(0); % 设置随机数种子为0,以确保结果可重复
glvs % 调用全局变量设置
psinstypedef(153); % 设置PSINS类型ts = 0.1;       % sampling interval
avp0 = [[0;0;0]; [0;0;0]; [0;0;0]]; % 初始化avp
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, '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);% 初始设置
[nn, ts, nts] = nnts(2, trj.ts); % 获取时间序列的参数
% imuerr = imuerrset(0.03, 100, 0.001, 5); % (注释掉的)设置IMU误差参数
imuerr = imuerrset(8, 14, 0.18, 57); % 设置IMU误差参数
imu = imuadderr(trj.imu, imuerr);  % 对IMU数据添加误差
% imuplot(imu); % (注释掉的)绘制IMU数据% 设置初始姿态误差
davp0 = avperrset(0.1*[1; 1; 1], 0, [1; 1; 3]);%% 速度观测EKF
ins = insinit(avpadderr(trj.avp0, davp0), ts); % 初始化惯性导航系统

完整代码:
https://download.csdn.net/download/callmeup/91717545

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

http://www.xdnf.cn/news/18701.html

相关文章:

  • ModbusTCP与EtherNet/IP协议转换:工控机驱动步进电机完整教程
  • 智慧矿山误报率↓83%!陌讯多模态融合算法在矿用设备监控的落地优化
  • 安装即是已注册,永久可用!
  • Sql server的行转列
  • 数据结构:顺序表
  • C# 项目“交互式展厅管理客户端“针对的是“.NETFramework,Version=v4.8”,但此计算机上没有安装它。
  • 玳瑁的嵌入式日记D24-0823(数据结构)
  • 【基础-判断】使用http模块发起网络请求时,必须要使用on(‘headersReceive’)订阅请求头,请求才会成功。
  • 游戏广告投放数据分析项目:拆解投放的“流量密码”
  • 图像边缘检测
  • qwen2.5vl(2):lora 微调训练及代码讲解
  • Android Studio下载gradle文件很慢的捷径之路
  • 个人禁食伴侣FastTrack
  • 数据库类型与应用场景全解析:从传统关系型到新兴向量数据库
  • MySQL深分页的处理方案
  • React学习(十一)
  • 深入理解 React useEffect
  • 三、Bpmnjs 核心组件与架构介绍
  • 【c++进阶系列】:万字详解多态
  • 分库分表系列-基础内容
  • piecewise jerk算法介绍
  • 密码实现安全基础篇 . KAT(已知答案测试)技术解析与实践
  • SpringBoot自动配置原理解析
  • Reactor 反应堆模式
  • 游游的数组询问
  • SOC估算方法-蜣螂优化算法结合极限学习
  • NVIDIA Nsight Systems性能分析工具
  • 【Linux系统】进程信号:信号的处理
  • 【基础-判断】订阅dataReceiveProgress响应事件是用来接收HTTP流式响应数据。
  • 基于LLM的跨架构物联网静态漏洞挖掘检测 摘要