💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
文献来源:
一个紧密结合的磁场辅助惯性导航系统,提出了一个紧密结合的磁场辅助惯性导航系统。该系统利用磁强计传感器阵列测量本地磁场的空间变化。通过递归更新的多项式磁场模型,将场中的变化映射到阵列的位移和方向变化,进而用于辅助惯性导航系统。模拟结果显示,在40秒轨迹结束时,所得到的导航系统定位误差降低了三个数量级,与独立惯性导航系统相比。因此,所提出的导航解决方案有潜力解决当前磁场同时定位与地图构建(SLAM)系统所面临的一个关键挑战——勘测阶段的长度非常有限,只能测绘未访问区域。
磁场是普遍存在且稳定的矢量场,如果能够准确测量,它可以成为一种信息丰富且可靠的定位源 [1];建筑物内部磁场变化的示例如图1所示。在环境中,扭曲的地球磁场和磁化材料提供了与位置高度相关的指纹信息。因此,在全球导航卫星系统(GNSS)无法覆盖的环境中,如室内和水下 [2], [3],磁场成为定位的可行且强大的信息源。
事实上,基于磁场的同时定位与地图构建(SLAM)技术,即将磁场测量与惯性导航系统(INS)的导航解决方案融合,已被证明是最有前景的可扩展室内定位技术之一 [4]。然而,当使用低成本惯性传感器时,惯性导航系统的误差增长率通常在每分钟10米左右 [5]。因此,使用低成本惯性传感器时,新区域映射的勘测阶段长度极为有限。因此,为了增加当前基于磁场的SLAM解决方案的可用性,我们需要稳健的磁场航迹推算技术,以减少导航误差漂移率。
由于最近的传感器技术发展,可以建造性能优越且价格实惠的磁力计矢量传感器阵列。这些阵列允许收集磁场的快照“图像”,进而在SLAM过程中实现更快速和更丰富的特征学习。此外,磁力计阵列测量必须符合易于建模的物理定律。这使我们能够以这样一种方式对其进行建模,即能编码位置转换和方向变化,使其非常适合用于补充或修正惯性导航系统。因此,在本文中,我们提出了一种紧密集成磁场辅助惯性导航的方法。与纯惯性导航系统相比,得到的导航系统具有显著减少的误差增长率。因此,所提出的导航方法有望大大延长基于磁场的SLAM系统中可接受的勘探阶段长度。
📚2 运行结果
可视化代码:
settings = getSettings();
timeVector = 0:1/settings.fs:(settings.duration-1/settings.fs);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Magnetic field %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
tmp = load(settings.model);
m.moments = tmp.mm(:, 1:end-2);
m.pos_dipoles = tmp.MM;
m.f_earth = tmp.mm(:, end-1);
clear tmp
[Xq,Yq,Zq]=meshgrid(-1:0.4:1,-1:0.4:1,0:0.2:1);
m.pos_grid=[reshape(Xq,1,numel(Xq)); reshape(Yq,1,numel(Yq)); reshape(Zq,1,numel(Zq))];
% Allocate memory
m.f_grid=m.f_earth*ones(1,size(m.pos_grid,2));
% Location loop
for ii=1:size(m.pos_grid,2)
% Dipole loop
for kk=1:size(m.moments,2)
m.f_grid(:,ii)= m.f_grid(:,ii)+dipole(m.pos_grid(:,ii),m.pos_dipoles(:,kk),m.moments(:,kk));
end
end
quiverC3D(m.pos_grid(1,:)',m.pos_grid(2,:)',m.pos_grid(3,:)',m.f_grid(1,:)',m.f_grid(2,:)',m.f_grid(3,:)','Colorbar',true,'LineWidth',0.5);
title('Generated magnetic-field','FontSize',12,'FontName','Times New Roman')
xlabel('x [m]','FontSize',12,'FontName','Times New Roman')
ylabel('y [m]','FontSize',12,'FontName','Times New Roman')
zlabel('z [m]','FontSize',12,'FontName','Times New Roman')
axis tight;
print('figures/magnetic-field', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% trajectory plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
plot3(position(:, 1), position(:, 2), position(:, 3), 'k');
hold on;
plot3(position(end, 1), position(end, 2), position(end, 3), '.', 'markerSize', 15);
title("Trajectory",'FontSize',12,'FontName','Times New Roman');
for n=1:100:size(position, 1)
u = rotatepoint(orientation(n), [0.1 0 0]);
quiver3(position(n,1),position(n,2),position(n,3),u(1),u(2),u(3),'r');
u = rotatepoint(orientation(n), [0 0.1 0]);
quiver3(position(n,1),position(n,2),position(n,3),u(1),u(2),u(3),'b')
u = rotatepoint(orientation(n), [0 0 0.1]);
quiver3(position(n,1),position(n,2),position(n,3),u(1),u(2),u(3),'g')
end
axis equal;
grid minor;
xlabel('x [m]','FontSize',12,'FontName','Times New Roman')
ylabel('y [m]','FontSize',12,'FontName','Times New Roman')
zlabel('z [m]','FontSize',12,'FontName','Times New Roman')
saveas(gcf, 'figures/groundtruth', 'epsc');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% position plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
a = area(timeVector, error_struct.stdPosErr(:, 1));
a.FaceColor=[.5 .5 .5];
a.FaceAlpha = 0.3;
set(gca, 'YScale', 'log')
plot(timeVector, error_struct.msePosErr(:, 1), 'r','LineWidth', 2);
plot(timeVector, error_struct_1.msePosErr(:, 1), 'k--','LineWidth', 2);
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m]','FontSize',12,'FontName','Times New Roman')
title('position error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,2)
hold on;
a = area(timeVector, error_struct.stdPosErr(:, 2));
a.FaceColor=[.5 .5 .5];
a.FaceAlpha = 0.3;
set(gca, 'YScale', 'log')
plot(timeVector, error_struct.msePosErr(:, 2), 'r','LineWidth', 2);
plot(timeVector, error_struct_1.msePosErr(:, 2), 'k--','LineWidth', 2);
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m]','FontSize',12,'FontName','Times New Roman')
title('position error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
a = area(timeVector, error_struct.stdPosErr(:, 3));
a.FaceColor=[.5 .5 .5];
a.FaceAlpha = 0.3;
set(gca, 'YScale', 'log')
plot(timeVector, error_struct.msePosErr(:, 3), 'r','LineWidth', 2);
plot(timeVector, error_struct_1.msePosErr(:, 3), 'k--','LineWidth', 2);
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m]','FontSize',12,'FontName','Times New Roman')
title('position error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/position', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% velocity plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
curve1 = error_struct.stdVelErr(:, 1);
curve2 = zeros(size(error_struct.stdVelErr(:, 1)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseVelErr(:, 1), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m/s]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Velocity error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,2)
hold on;
curve1 = error_struct.stdVelErr(:, 2);
curve2 = zeros(size(error_struct.stdVelErr(:, 2)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseVelErr(:, 2), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m/s]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Velocity error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
curve1 = error_struct.stdVelErr(:, 3);
curve2 = zeros(size(error_struct.stdVelErr(:, 3)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseVelErr(:, 3), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m/s]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Velocity error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/velocity', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% orientation plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
curve1 = error_struct.stdQErr(:, 1) * 180 / pi;
curve2 = zeros(size(error_struct.stdQErr(:, 1)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma Upd');
h.FaceAlpha = 0.8;
plot(timeVector, 2 * error_struct.mseQErr(:, 1) * 180 / pi, 'r','LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Orientation error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
%
subplot(3,1,2)
hold on;
curve1 = error_struct.stdQErr(:, 2) * 180 / pi;
curve2 = zeros(size(error_struct.stdQErr(:, 2)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma Upd');
h.FaceAlpha = 0.8;
plot(timeVector, 2 * error_struct.mseQErr(:, 2) * 180 / pi, 'r','LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Orientation error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
curve1 = error_struct.stdQErr(:, 3)* 180 / pi;
curve2 = zeros(size(error_struct.stdQErr(:, 3)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma Upd');
h.FaceAlpha = 0.8;
plot(timeVector, 2 * error_struct.mseQErr(:, 3)* 180 / pi, 'r','LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Orientation error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/orientation', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% acc bias plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
curve1 = error_struct.stdAccBiasErr(:, 1);
curve2 = zeros(size(error_struct.stdAccBiasErr(:, 1)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseAccBiasErr(:, 1), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m $s^{-2}$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Acceleration bias error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,2)
hold on;
curve1 = error_struct.stdAccBiasErr(:, 2);
curve2 = zeros(size(error_struct.stdAccBiasErr(:, 2)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseAccBiasErr(:, 2), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m $s^{-2}$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Acceleration bias error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
curve1 = error_struct.stdAccBiasErr(:, 3);
curve2 = zeros(size(error_struct.stdAccBiasErr(:, 3)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseAccBiasErr(:, 3), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [m $s^{-2}$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Acceleration bias error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/accbias', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% mag bias plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
curve1 = error_struct.stdMagBiasErr(:, 1);
curve2 = zeros(size(error_struct.stdMagBiasErr(:, 1)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseMagBiasErr(:, 1), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$\mu T$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('magnetometer bias error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,2)
hold on;
curve1 = error_struct.stdMagBiasErr(:, 2);
curve2 = zeros(size(error_struct.stdMagBiasErr(:, 2)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseMagBiasErr(:, 2), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$\mu T$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('magnetometer bias error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
curve1 = error_struct.stdMagBiasErr(:, 3);
curve2 = zeros(size(error_struct.stdMagBiasErr(:, 3)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseMagBiasErr(:, 3), 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$\mu T$]','FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('magnetometer bias error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/magbias', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% gyro bias plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure;
subplot(3,1,1)
hold on;
curve1 = error_struct.stdGyroErr(:, 1) * 180 / pi;
curve2 = zeros(size(error_struct.stdGyroErr(:, 1)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseGyroErr(:, 1)* 180 / pi, 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}/s$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Gyroscope bias error x-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,2)
hold on;
curve1 = error_struct.stdGyroErr(:, 2)* 180 / pi;
curve2 = zeros(size(error_struct.stdGyroErr(:, 2)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseGyroErr(:, 2)* 180 / pi, 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}/s$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Gyroscope bias error y-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
subplot(3,1,3)
hold on;
curve1 = error_struct.stdGyroErr(:, 3)* 180 / pi;
curve2 = zeros(size(error_struct.stdGyroErr(:, 3)));
inBetween = [curve1; flipud(curve2)];
x = [timeVector fliplr(timeVector)];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','\sigma');
h.FaceAlpha = 0.8;
plot(timeVector, error_struct.mseGyroErr(:, 3)* 180 / pi, 'r', 'LineWidth', 2, 'DisplayName','Upd');
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('error [$^{\circ}/s$]', 'FontSize',12,'FontName','Times New Roman', 'interpreter','latex');
title('Gyroscope bias error z-axis','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
print('figures/gyrobias', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% coefficient plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
f=figure;
t = tiledlayout(3, 5);
for i = 1 : 15
nexttile,
hold on;
a = area(timeVector, error_struct.stdThetaErr(:, i));
a.FaceColor=[.5 .5 .5];
a.EdgeColor='none';
a.FaceAlpha = 0.3;
plot(timeVector, error_struct.mseThetaErr(:, i), 'r', 'LineWidth', 2, 'DisplayName','Upd');
%
set(gca, 'YScale', 'log')
ylim([1e-3, 1])
title(strcat('$\theta_{', num2str(i), '}$'),'FontSize',12,'FontName','Times New Roman','interpreter','latex');
grid minor;
box on
end
h = axes(f, 'visible', 'off');
title(t, 'Coefficient error');
xlabel(t,'time [s]','FontSize',12,'FontName','Times New Roman')
ylabel(t, 'error','FontSize',12,'FontName','Times New Roman')
print('figures/coefferr', '-depsc', '-r600', '-painters' );
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% ANEES plot %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
lowerBound = (1 - 2 / (9 * 3e4) - 2.576 * sqrt(2 / (9 * 3e4)))^3;
upperBound = (1 - 2 / (9 * 3e4) + 2.576 * sqrt(2 / (9 * 3e4)))^3;
figure;
plot(timeVector(2:end), NEES_metric/30, 'r', 'LineWidth', 2, 'DisplayName','ANEES');
hold on;
curve1 = lowerBound * ones(size(timeVector(2:end))).';
curve2 = upperBound * ones(size(timeVector(2:end))).';
inBetween = [curve1; flipud(curve2)];
x = [timeVector(2:end) fliplr(timeVector(2:end))];
h = fill(x, inBetween, [.5 .5 .5], 'DisplayName','0.99 confidence interval');
h.FaceAlpha = 0.5;
xlabel('time [s]','FontSize',12,'FontName','Times New Roman')
ylabel('value','FontSize',12,'FontName','Times New Roman');
title('Average normalized estimation error squared (ANEES) ','FontSize',12,'FontName','Times New Roman')
grid minor;
box on
legend;
print('figures/ANEES', '-depsc', '-r600', '-painters' );
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
🌈4 Matlab代码、数据、文章
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取