Simultaneous Localization and Mapping (SLAM) 源码

解决 SLAM 问题的方法
SLAM 问题的解决方案通常分为三大类:

1.基于卡尔曼滤波器:EKF、UKF、EIF
2.基于粒子过滤器:FastSLAM
3.基于图:lsSLAM
除了使用的方法之外,SLAM 算法在地图表示方面也有所不同。它们可以是(或两者):

1.地标地图:每时每刻,观测都是特定地标的位置。这需要从一帧到下一帧的某种地标关联(使用类似SIFT的东西)。基于卡尔曼滤波器的 SLAM 方法通常使用这种表示。
2.基于网格的地图:地图被划分为盒子(因此是网格),每个盒子可以是三个值之一:空、填充或未知。例如,收集的观察结果可以是显示存在障碍物的激光雷达点。

图片[1]-Simultaneous Localization and Mapping (SLAM)

下面显示的是 repo 中每个框架的结果:

1.命令模型:给定一个机器人位置和一个里程计命令,计算机器人的下一个位置。

图片[2]-Simultaneous Localization and Mapping (SLAM)

2.扩展卡尔曼滤波器 (EKF):EKF 使用泰勒展开线性逼近给定点周围的非线性函数(里程计模型),然后应用卡尔曼滤波器解决 SLAM 问题。蓝色是地标的预测位置,置信区间绘制为椭圆。

图片[3]-Simultaneous Localization and Mapping (SLAM)

3.Unscented Kalman Filter (UKF):UKF 是 EKF 的扩展:它不使用 Taylor 展开,而是使用 unscented 变换来计算一组 sigma 点,然后将其传递给非线性函数。这提供了非线性函数的更好的高斯近似。

图片[4]-Simultaneous Localization and Mapping (SLAM)

4.网格地图:解决(仅)网格地图表示的映射问题。这假设本地化是完美的,没有任何错误(这在现实生活中显然不成立)。下面我们看到粗(左)或细(右)网格的效果。

图片[5]-Simultaneous Localization and Mapping (SLAM)
Coarse grid (0.5m)

图片[6]-Simultaneous Localization and Mapping (SLAM)
Fine grid (0.1m)

  1. 粒子过滤器:在里程计命令下实现粒子过滤器中粒子的运动,但没有任何类型的校正。
  2. FastSLAM:基于粒子过滤器的 SLAM 算法。绿点显示每次迭代的粒子集。预测的“跳跃”是因为在下一次迭代中,可能会选择一个新粒子作为最可能的粒子。

图片[7]-Simultaneous Localization and Mapping (SLAM)

7.里程计校准:使用最小二乘法消除机器人里程计读数中的任何系统误差。

图片[8]-Simultaneous Localization and Mapping (SLAM)

8.lsSLAM:一种基于图的算法,使用最小二乘法来优化图结构

图片[9]-Simultaneous Localization and Mapping (SLAM)
Intel Research Lab

图片[10]-Simultaneous Localization and Mapping (SLAM)
DLR building, Institue of Robotics and Mechatronics

上面的代码是在 Octave / MATLAB 中编程的。它可以通过简单地运行octave每个子部分文件夹中的脚本来运行。

GitHub 下载:

Simultaneous Localization and Mapping (SLAM) 源码-AGV吧
Simultaneous Localization and Mapping (SLAM) 源码
此内容为付费资源,请付费后查看
20积分
付费资源
已售 2
© 版权声明
THE END
喜欢就支持一下吧
点赞8赞赏 分享
评论 共1条

请登录后发表评论