【磁场】扩展卡尔曼滤波器用于利用高斯过程回归进行磁场SLAM研究(Matlab代码实现)

   💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

 ⛳️赠与读者

👨‍💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。

     或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎

💥1 概述

扩展卡尔曼滤波器用于利用高斯过程回归进行磁场SLAM

摘要:我们提出了一种计算效率高的算法,利用环境磁场的变化来通过同时定位和建图(SLAM)来补偿集成航位推算测量(即死 reckoning 估计)中的位置漂移。当磁场地图用拉普拉斯基函数在立方体域中表示的降秩高斯过程(GP)时,我们能够获得学习磁场梯度的解析表达式。现有的使用降维高斯过程回归进行磁场SLAM的方法使用了 Rao-Blackwellized 粒子滤波器(RBPF)。对于每个传入的测量,使用 RBPF 训练磁场地图的计算复杂度为每个时间步 O(NpN2m),其中 Np 是粒子数量,Nm 是用于逼近高斯过程的基函数数量。与现有的基于粒子滤波器的方法相反,我们建议应用基于学习磁场地图梯度的扩展卡尔曼滤波器进行同时定位和建图。我们提出的算法只需要训练单一地图,因此每个时间步的计算复杂度为 O(N2m)。我们在一个开源数据集上展示了扩展卡尔曼滤波器在磁场SLAM中的工作原理,该数据集来自于脚踩传感器和模型船在室内游泳池上收集的磁场测量数据。我们观察到,我们的算法对漂移的补偿能力与之前基于 RBPF 的磁场SLAM 的结果相当。
关键词:同时定位与建图;卡尔曼滤波;定位;磁场

自主导航仅使用机载传感器是多种应用中的理想技术。在室内、地下或水下,由于建筑物、地表或水体的阻挡,无法稳定访问GNSS信号 [1–3]。即使在其他环境中,使用GNSS信号进行定位也可能面临挑战。港口中的表面车辆可能靠近集装箱、桥梁或其他工业设施,这些都可能对GNSS(全球导航卫星系统)测量产生多路径效应 [4]。仅使用机载传感器进行自主导航具有挑战性,因为来自陀螺仪、加速度计、多普勒速度记录仪或轮编码器等传感器的噪声测量在没有预部署基础设施的情况下集成以估算位置时可能会产生漂移 [5, 6]。我们称通过集成这些噪声测量得到的位置估计和方向估计为里程计。在这些场景中可能还有一系列其他传感器读数可用。我们的研究范围仅限于使用机载里程计和磁场测量进行自主导航的探索。

在[8]中提出了三维可计算的磁场SLAM,使用Rao-Blackwellized粒子滤波器(RBPF)同时估计行人的位置和方向以及环境磁场。一组Np个粒子用于表示位置和方向[8]。[8]提出的磁场SLAM的RBPF使用高斯过程(GP)回归,将从麦克斯韦方程中了解磁场特性与磁场测量相结合,创建磁场地图。为此,他们使用降阶高斯过程回归为每个粒子构建磁场地图,该回归将磁场地图表示为六边形域上N个Laplace基函数的线性组合,并将磁场地图不确定性表示为具有N2m项的矩阵。由于每个磁场地图都用Nm个基函数的权重及其相应的权重协方差表示,这些都需要在每个时间步更新,因此更新磁场地图的计算成本为O(NpN2m) [8]。如果粒子滤波器在并行化架构上运行,例如FPGAs,那么与粒子数量有关的计算时间依赖性可以大大降低[35,36]。我们的研究范围仅局限于在非并行化架构上提高磁场SLAM的速度。使用在单个立方域上定义的Laplace基函数的RBPF还展示了磁场SLAM是可行的[22]。本文的贡献是一种相对于[8]提出的方法更快且需要更少存储的磁场SLAM方法,灵感来自在低处理能力的廉价携带式装置上实时运行磁场SLAM的目标。在立方域中使用降阶高斯过程回归进行磁场SLAM的一个特性是,磁场地图被给定为解析描述的基函数的线性组合[37]。因此,我们可以使用拉普拉斯的解析解的空间导数来找到磁场地图相对于位置估计的雅可比矩阵。为了减少计算开销,我们建议利用降阶高斯过程磁场地图的解析雅可比矩阵来使用扩展卡尔曼滤波器执行磁场SLAM。这只需要在每个时间点构建和更新磁场地图的一个副本。图1显示了我们用于磁场SLAM的EKF算法学习到的磁场地图和估计轨迹,经过模型船上收集的磁场测量测试。每个时间步的计算成本为O(N2m),而不是O(N2mNp)。如果动态模型和测量模型接近线性,则可以使用EKF [38]。在同时定位和映射的情况下,世界坐标系相对于初始身体坐标系定义[8]。由于这个定义导致初始位置估计没有不确定性[8],因此起始位置估计最初具有零协方差。在定位估计的不确定性增长受到频繁访问先前区域限制的情况下,磁场SLAM可以纠正位置估计中的漂移,这意味着位置估计误差不再无限增长,而是保持有限[8]。

扩展卡尔曼滤波器用于利用高斯过程回归进行磁场SLAM研究

摘要

磁场SLAM(Simultaneous Localization and Mapping)技术通过利用环境磁场的变化,在未知环境中实现自主定位与地图构建。针对传统磁场SLAM方法中计算复杂度高、存储需求大的问题,本文提出了一种基于扩展卡尔曼滤波器(EKF)的磁场SLAM算法。该算法利用降秩高斯过程回归构建磁场地图,并通过EKF进行状态估计与地图更新,显著降低了计算复杂度和存储需求。实验结果表明,该算法在补偿集成航位推算测量中的位置漂移方面表现出色,与基于Rao-Blackwellized粒子滤波器(RBPF)的方法性能相当。

一、引言

在室内、地下或水下等GNSS信号受限的环境中,自主导航技术成为关键。磁场SLAM作为一种仅依赖机载传感器的自主导航方法,通过利用环境磁场的变化进行定位与建图,具有广阔的应用前景。然而,传统磁场SLAM方法多采用RBPF,其计算复杂度随粒子数量增加而显著上升,限制了实时性和大规模应用。为此,本文提出了一种基于EKF的磁场SLAM算法,旨在降低计算复杂度并提高实时性。

二、磁场SLAM与EKF原理

2.1 磁场SLAM概述

磁场SLAM通过集成航位推算和磁场测量,在未知环境中实现自主定位与地图构建。磁场地图的构建是磁场SLAM的核心,它利用高斯过程回归(GPR)将磁场地图表示为基函数的线性组合,并通过解析方法计算磁场梯度。

2.2 EKF原理

EKF是卡尔曼滤波在非线性系统中的扩展,通过一阶泰勒展开对非线性函数进行线性化近似,从而应用卡尔曼滤波的标准框架进行状态估计。EKF包含预测和更新两个阶段,通过不断迭代优化状态估计值。

三、基于EKF的磁场SLAM算法设计

3.1 磁场地图构建

采用降秩高斯过程回归构建磁场地图,将磁场地图表示为拉普拉斯基函数在立方体域中的线性组合。通过解析方法计算磁场梯度,并利用拉普拉斯的解析解的空间导数找到磁场地图相对于位置估计的雅可比矩阵。

3.2 EKF状态估计

定义状态向量包括机器人位置和磁场地图参数,利用EKF进行状态估计。具体步骤如下:

  1. 初始化:设置初始状态估计和协方差矩阵。
  2. 预测:基于机器人运动模型预测下一时刻的状态和协方差。
  3. 更新:利用磁场测量数据更新状态估计和协方差矩阵。

在预测阶段,通过机器人运动模型预测下一时刻的位置,并更新协方差矩阵以反映预测的不确定性。在更新阶段,利用磁场测量数据计算卡尔曼增益,并修正状态估计和协方差矩阵。

3.3 算法复杂度分析

与基于RBPF的磁场SLAM方法相比,本文提出的基于EKF的磁场SLAM算法只需训练单一磁场地图,每个时间步的计算复杂度为O(N²m),其中Nm为用于逼近高斯过程的基函数数量。而基于RBPF的方法每个时间步的计算复杂度为O(NpN²m),其中Np为粒子数量。因此,本文算法显著降低了计算复杂度。

四、实验验证与结果分析

4.1 实验设置

使用开源数据集进行实验验证,该数据集来源于脚踩传感器和模型船在室内游泳池上收集的磁场测量数据。实验环境为室内游泳池,传感器包括脚踩传感器和模型船上的磁场传感器。

4.2 实验结果

实验结果表明,基于EKF的磁场SLAM算法能够准确估计机器人位置和构建磁场地图。与基于RBPF的方法相比,本文算法在补偿集成航位推算测量中的位置漂移方面表现出色,定位误差和建图精度相当。

4.3 性能分析

通过计算定位误差、建图精度等指标评估算法性能。实验结果显示,随着基函数数量的增加,建图精度逐渐提高,但计算复杂度也相应增加。因此,在实际应用中需根据具体需求权衡建图精度和计算复杂度。

五、结论与展望

本文提出了一种基于扩展卡尔曼滤波器的磁场SLAM算法,利用降秩高斯过程回归构建磁场地图,并通过EKF进行状态估计与地图更新。实验结果表明,该算法在补偿集成航位推算测量中的位置漂移方面表现出色,与基于RBPF的方法性能相当,但计算复杂度和存储需求显著降低。

未来工作将进一步优化算法参数,提高算法性能,并探索其在更多应用场景中的潜力。例如,将本文算法应用于无人机导航、自动驾驶等领域,通过融合多种传感器数据提高定位精度和鲁棒性。此外,还将研究基于深度学习的磁场SLAM方法,以进一步提高环境感知和数据关联的准确性。

📚2 运行结果

部分代码:

%Magnetic field params
sigma_SE=1;
l_SE=0.8;
sigma_lin=1;
sigma_y=0.1;

%Number of basis functions used in Reduced-Rank approximation
N_m=decide_number_of_basis_functions(xl,xu,yl,yu,zl,zu,margin,sigma_SE,l_SE,sigma_y);

%Calculate Lambda and the order of indices used in the
%analytic basis functions of the Reduced-Rank Approximation
[Indices, Lambda]=Lambda3D(N_m,xl,xu,yl,yu,zl,zu,sigma_SE,l_SE);

[delta_p,delta_q,p_DR,q_DR,N]=pseudo_odometry(p,q,R_p,R_q,p_0,q_0,T,bias);

%Adjust odometry noise to compensate for bias
R_p(1:2,1:2)=(0.001+sigma_xy)*eye(2);

%Prepare folder for saving results in
time=clock;
foldername=['Results/Run',date,'-',num2str(time(4)),'-',num2str(time(5))];
mkdir(foldername);
mkdir([foldername,'/Snapshots']);
mkdir([foldername,'/EPSs']);
mkdir([foldername,'/JPGs']);

%Prepare plotting
fontsize=14;

%Run the filter
[p_EKF,q_EKF,m_EKF,P_EKF,P_pose_prior,P_pose_posterior,runtime_EKF]=EKF_quick(N,delta_p,delta_q,y_mag,q_0,p_0,R_p,R_q,sigma_y,Lambda,Indices,sigma_lin,N_m,xl,xu,yl,yu,zl,zu);
N_p_s=[100 200 500];
particle_indices=size(N_p_s,2);
runtime_RBPFs=zeros(particle_indices,1);
p_RBPFs=zeros(3,N,particle_indices);
q_RBPFs=zeros(4,N,particle_indices);

for particle_index=1:particle_indices
    N_p=N_p_s(particle_index);
    [p_RBPF,q_RBPF,runtime]=RBPF_quick(N,delta_p,delta_q,y_mag,q_0,p_0,R_p,R_q,sigma_y,Lambda,Indices,sigma_lin,N_m,xl,xu,yl,yu,zl,zu,N_p);
    p_RBPFs(:,:,particle_index)=p_RBPF;
    q_RBPFs(:,:,particle_index)=q_RBPF;
    runtime_RBPFs(particle_index)=runtime;
    p_RMSE_PF=sqrt(mean(sum((p-p_RBPF).^2,1)));
    disp(['N_p: ',num2str(N_p),', RMSE: ',num2str(p_RMSE_PF),', runtime:']);
    disp(duration(0,0,runtime));
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

🌈4 Matlab代码、数据、文章

资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取

                                                           在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值