转载请注明出处:https://blog.csdn.net/q_z_r_s/article/details/84311010
机器感知 一个专注于SLAM、三维重建、机器视觉等相关技术文章分享的公众号 |
SLAM for Dummies 全文总结
1. Introduction
本文的目的是介绍针对移动机器人的SLAM教程
。有很多论文是关于SLAM
的,对于此领域的新手而言,这可能需要花费很多时间去理解实现SLAM所涉及的intricacies
。因此本文希望在呈现此领域时尽量保持需要最少的先决条件。当你读完本文之后,相信你也可以实现一个基本的SLAM。
SLAM实现方法很多,首先就是可使用的硬件很多,其次SLAM与其说是一个算法,不如果它更像一个概念(concept)
。SLAM涉及的步骤很多,不同的步骤又可以用不同的算法来实现。大部分时候我们针对这些不同的步骤阐述一个单一的方法,但为了进一步阅读,提示其他可能的方法。
写这篇文章的动机主要是保住我们自己去更好的理解SLAM,俗话说:能把别人教懂了,才是真的懂了(英语原文不是这样的,我临时编的^_^)
。另一个原因是,现存的很多关于SLAM的论文都是偏向理论的,而且主要关注的是SLAM某一个小领域上的创新,当然这也是这些论文的初衷所在。本文的目的是希望能更偏向于实践,且简单、基本的SLAM算法,这可以成为一个去更好的理解SLAM的开始(这句话翻译的自己读着都别扭)。对于了解SLAM的同学,我们将展现一个完整的、使用用EKF的SLAM解决方案。完整并不意味着完美
,意思是我们会涉及实现SLAM的所有基本步骤。值得注意的是,SLAM问题并没有完全被决解,此领域依然有很多值得研究的地方。
为了方便大家,这里提供了所有代码,所以只需要下载、编译、安装到硬件中运行即可。
2. 关于SLAM
SLAM这个术语是Simultaneous Localization And Mapping
的缩写形式。最初由Hugh Durrant-Whyte 和 John J. Leonard[7] 基于 Smith, Self and Cheeseman [6]早期的工作研发的。Durrant-Whyte 和 Leonard 刚开始的时候称其为SMAL
,但后来改了。SLAM关注的问题是使用移动机器人在未知环境建图,同时使用此地图在此环境中进行导航
。
SLAM有很多部分组成: Landmark extraction
, data association
, state estimation
, state update
and landmark update
(保持原文)。每一个小部分都有很多方法来解决,我们将展示每部分的例子,这也说明某些部分是可以使用新的方法来实现的·······SLAM可以应用的2D和3D运动中,我们这里只考虑2D运动。
3.硬件
机器人:里程计、相机、机器人控制系统、激光扫描仪、声纳。
4. SLAM步骤

5. 激光数据
6. 里程计数据
提供机器人大致的位置,里程计的输出当作EKF的初始估计值;里程计数据和激光数据需要时序对应,为了解决时序不匹配,可以在相同的时间点对其中一个数据进行插值。对里程计进行插值是最容易的,因为控制是已知的。而激光下一次的测量是多少很难预测。
7. 路标
- 所谓路标:是那些容易被再次观测到的且明显跟环境不一样的特征。
- 决定让机器人识别的路标点应该足够多,否则机器人会走丢。
- 路标点应该是静止的,选择人为路标点是很糟糕的想法,原因很明显,如果路标点不在同一个地方,机器人如何确定给定的路标点在哪里呢?(路标点在哪都不知道,又何来的估计自己的位置呢?)
- 适合作为路标点的关键点应具有以下特性:
- 容易被再次观测到
- 明显区别于其他的关键点
- 数量要多
- 需要是静止的
8. 路标点提取
使用激光扫描仪的基本路标点提取算法:Spikes 和 RANSAC。