【PSINS】CNS/SINS滤波和GPS/SINS滤波的对比|matlab代码|速度对比、位置对比

在这里插入图片描述

PSINS

本文所述的代码需要基于PSINS工具箱,工具箱的讲解:

两个滤波的不同点

CNS/SINS滤波

使用184的滤波结构:18维状态量、4为观测量
CNS探测角度(以恒星为观测)和高度(以地球为观测),滤波时观测量为角度(三维)+高度(一维)。

GPS/SINS滤波

使用183的滤波,观测量为GPS的三维位置。

滤波结果

运行程序,得到如下运行结果:
CNS观测的角度值:
请添加图片描述

CNS滤波值与真值的对比:
请添加图片描述

GPS滤波值与真值的对比:
请添加图片描述

下面是一些原创的对比图
三维轨迹对比:
请添加图片描述

纬度经度高度对比(两个算法绘制在一起):
请添加图片描述

滤波后X轴(纬度)位置累积概率分布函数:
请添加图片描述
累积分布函数(Cumulative Distribution Function,简称CDF)是一种描述随机变量取值的概率分布的函数。对于一个随机变量X,它的累积分布函数F(x)定义为X小于等于x的概率,即:
F ( x ) = P ( X ≤ x ) F(x) = P(X ≤ x) F(x)=P(Xx)
累积分布函数可以用来计算和描述随机变量取值的概率。

例如,对于一个标准正态分布的随机变量X,它的累积分布函数可以表示为:
F ( x ) = P ( X ≤ x ) = ∫ [ − ∞ , x ] ( 1 / √ ( 2 π ) ∗ e ( − t 2 / 2 ) ) d t F(x) = P(X ≤ x) = ∫[-∞, x] (1/√(2π) * e^(-t^2/2)) dt F(x)=P(Xx)=[,x](1/√(2π)e(t2/2))dt
其中e是自然对数的底,π是圆周率。这个累积分布函数可以用来计算X小于等于某个具体取值x的概率。

代码部分

代码由如下部分组成:
在这里插入图片描述
源代码如下:

% SINS/CNS与SINS/GPS的对比 184 EKF
% 2024-7-24/Ver1
clear;clc;close all;
rng(0);
glvs
psinstypedef('test_SINS_CNS_def');
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);%% CNS simulation
mu = [1;2;5]*glv.min;
rk = [[10;10;30]*glv.sec;10];
[qis, utc0] = cnssimu(trj.avp, rk(1:3), mu, [2021;11;22;12*3600; -0.1;37]);
%% initial settings
[nn, ts, nts] = nnts(1, trj.ts);
imuerr = imuerrset(0.03, 100, 0.001, .5);
imu = imuadderr(trj.imu, imuerr);
davp0 = avperrset([0.5;-0.5;20], 0.01, [1;1;3]);
ins = insinit(avpadderr(trj.avp0, davp0), ts);
fprintf('剩余代码下载链接如下:https://gf.bilibili.com/item/detail/1105873012');
%% KF filter
Cie0 = cnsCie(utc0(1:3), utc0(4),  utc0(5), utc0(6));
  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MATLAB卡尔曼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值