解决 SLAM 问题的方法
SLAM 问题的解决方案通常分为三大类:
1.基于卡尔曼滤波器:EKF、UKF、EIF
2.基于粒子过滤器:FastSLAM
3.基于图:lsSLAM
除了使用的方法之外,SLAM 算法在地图表示方面也有所不同。它们可以是(或两者):
1.地标地图:每时每刻,观测都是特定地标的位置。这需要从一帧到下一帧的某种地标关联(使用类似SIFT的东西)。基于卡尔曼滤波器的 SLAM 方法通常使用这种表示。
2.基于网格的地图:地图被划分为盒子(因此是网格),每个盒子可以是三个值之一:空、填充或未知。例如,收集的观察结果可以是显示存在障碍物的激光雷达点。
下面显示的是 repo 中每个框架的结果:
1.命令模型:给定一个机器人位置和一个里程计命令,计算机器人的下一个位置。
2.扩展卡尔曼滤波器 (EKF):EKF 使用泰勒展开线性逼近给定点周围的非线性函数(里程计模型),然后应用卡尔曼滤波器解决 SLAM 问题。蓝色是地标的预测位置,置信区间绘制为椭圆。
3.Unscented Kalman Filter (UKF):UKF 是 EKF 的扩展:它不使用 Taylor 展开,而是使用 unscented 变换来计算一组 sigma 点,然后将其传递给非线性函数。这提供了非线性函数的更好的高斯近似。
4.网格地图:解决(仅)网格地图表示的映射问题。这假设本地化是完美的,没有任何错误(这在现实生活中显然不成立)。下面我们看到粗(左)或细(右)网格的效果。
- 粒子过滤器:在里程计命令下实现粒子过滤器中粒子的运动,但没有任何类型的校正。
- FastSLAM:基于粒子过滤器的 SLAM 算法。绿点显示每次迭代的粒子集。预测的“跳跃”是因为在下一次迭代中,可能会选择一个新粒子作为最可能的粒子。
7.里程计校准:使用最小二乘法消除机器人里程计读数中的任何系统误差。
8.lsSLAM:一种基于图的算法,使用最小二乘法来优化图结构
上面的代码是在 Octave / MATLAB 中编程的。它可以通过简单地运行octave
每个子部分文件夹中的脚本来运行。
GitHub 下载:
- 最新
- 最热
只看作者