欢迎光临
我们一直在努力

【PSINS工具箱】EKF定位和RTS平滑,153模型(15维状态、3维观测),用于融合GNSS和IMU数据。附滤波后、平滑后的结果对比。附代码下载链接

在这里插入图片描述

基于 PSINS 工具箱,构建了一套完整的 IMU/GPS 组合导航仿真与后处理框架。包含加速、匀速、转弯、爬升和下降等多种机动状态的三维运动轨迹,在此基础上模拟理想 IMU 输出,并引入典型惯导器件误差模型生成含噪 IMU 测量数据。扩展卡尔曼滤波(EKF) 实现 IMU/GPS 组合导航解算,并在滤波结果的基础上进一步引入 RTS 平滑算法,对全时段状态进行后向优化,系统性对比滤波与平滑前后的定位性能差异 原创代码,非AI生成,禁止翻卖

文章目录

  • 程序详解
  • 运行结果
  • MATLAB源代码

程序详解

在状态建模方面,系统采用经典的惯性导航误差状态模型,以位置、速度、姿态误差及惯性器件零偏为状态量。系统状态传播由惯导机械编排方程驱动,其离散形式可概括为

x

k

=

Φ

k

1

x

k

1

+

w

k

1

,

\\mathbf{x}*{k} = \\boldsymbol{\\Phi}*{k-1}\\mathbf{x}*{k-1} + \\mathbf{w}*{k-1},

xk=Φk1xk1+wk1, 其中

Φ

k

1

\\boldsymbol{\\Phi}*{k-1}

Φk1为状态转移矩阵,

w

k

1

\\mathbf{w}*{k-1}

wk1表示系统噪声。GPS 提供的位置观测用于对惯导解进行周期性校正,观测更新采用 EKF 框架完成。

在此基础上,引入 RTS(Rauch–Tung–Striebel)平滑算法,利用全时间段的前向滤波结果与状态转移信息,对历史状态进行后向递推修正。RTS 平滑通过平滑增益矩阵综合相邻时刻的预测与滤波信息,有效削弱了随机噪声对状态估计的影响,显著提升了轨迹的连续性和整体精度。

程序最终从多个角度对结果进行分析与展示,包括三维轨迹对比、位置误差时序曲线、误差累积分布函数(CDF)以及误差统计指标(绝对均值、标准差和最大误差)。结果清晰表明,相比单纯 EKF 滤波,引入 RTS 平滑后的位置估计在稳态精度和整体一致性方面均得到明显改善。

运行结果

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

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

CDF图像: 在这里插入图片描述

误差统计特性对比: 在这里插入图片描述

MATLAB源代码

部分代码如下:

% 基于PSINS工具箱的IMU数据生成与GPS组合导航,EKF滤波,随后使用RTS平滑,对比滤波和平滑前后的轨迹
% 作者:matlabfilter
% 2026-01-22/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]]; % 初始化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, '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);

%% 初始化设置
[nn, ts, nts] = nnts(2, trj.ts);
imuerr = imuerrset(30, 100, 0.1, 50);
imu = imuadderr(trj.imu, imuerr);
davp0 = avperrset(1*[0.5;0.5;20], 1, 1*[1;1;3]);
ins = insinit(avpadderr(trj.avp0,davp0), ts);
%% 滤波程序

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

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

赞(0)
未经允许不得转载:171主机测评 » 【PSINS工具箱】EKF定位和RTS平滑,153模型(15维状态、3维观测),用于融合GNSS和IMU数据。附滤波后、平滑后的结果对比。附代码下载链接
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址