转载请注明出处: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。
9. 数据关联
数据关联问题是将来自不同扫描时间观测到的路标点进行相互匹配,也指那些被重新观测到的路标点。现在我们顶一个一个数据关联策略来解决这个问题。假设使用一个数据库来存储先前看到的路标点,此数据库初始情况下通常为空。第一个规则:只有当一个路标点被观测到N
次时才认为这是一个有价值的路标点,这可以消除提取到比较糟糕的路标点的情况。
-
当获得一次新的激光扫描时,使用路标提取算法提取所有可见的路标点
-
关联所提取的路标点到数据库中存储的最近的路标点
-
验证所关联的路标点是否有效
a. 如果路标点对通过验证,这意味着观测到了同一个路标点
b. 如果关联验证无效,就添加为一个新的路标点
在使用最近的数据库中的路标点
关联路标点时,此方法被称作最近邻法
,最简单的就是计算欧氏距离。
验证方法基于一个事实:EKF给出了一个路标点的观测的不确定性的边界。因此,我们决定一个观测到的路标点是否和数据库中的某个路标点匹配时,通过检测这个路标点是否在这个不确定度之内来决定。此不确定度可以通过可视化来显示,也就是众所周知的error ellipse
。可以通过设置一个常量
λ
\lambda
λ,如果满足下式则关联此路标点:
v i T S i − 1 v i ≤ λ (1) v_i^T S_i^{-1} v_i \leq \lambda \tag1 viTSi−1vi≤λ(1)
其中,
v
i
v_i
vi 为新息,
S
i
S_i
Si 为定义在EKF章节中的
新息的协方差矩阵。
10. EKF
EKF通过里程计数据和路标点观测来估计机器人的状态,当机器人被给定一个完美的地图时,EKF通常用来做状态估计,因为这里不需要地图更新。在SLAM和状态估计EKF中,矩阵是不一样的,而且很难辨别是如何实现的,这是因为从没有人提及过这些。我们将逐一讲解。大部分EKF是标准形式的,一旦矩阵设置好了,它就只剩下一些公式了。
SLAM可以分为三个步骤:
- 使用里程计数据更新当前状态估计
根据重新观测到的路标点更新被估计的状态
- 把新的路标点添加当前状态中
SLAM中的矩阵
- 系统状态矩阵
X
。
- 协方差矩阵
P
。
- 卡尔曼增益
K
。
- 测量模型的雅可比矩阵
H
。
- 预测模型的雅可比矩阵
A
。
- SLAM特有的雅可比矩阵 J x r J_{xr} Jxr和 J z J_z Jz
- 过程噪声
Q
和W
。 - 测量噪声
R
和V
。
11. 最后备注
本文所呈现的SLAM是一个非常非常基本的SLAM,有很大的改进空间,还有很多方面没有涉及到,例如回环检测的问题
。这个SLAM也可以结合到占用栅格中。
12. 参考文献
- Koenig, Likhachev: Incremental A* (D*)
- Bosse, Newman, Leonard, Soika, Feiten, Teller: An ATLAS framework
- Roy: Foundations of state estimation (lecture):
- Zunino: SLAM in realistic environments:
http://www.nada.kth.se/utbildning/forsk.utb/avhandlingar/lic/020220.pdf - Welch, Bishop: An introduction to the Kalman Filter:
- Smith, Self, Cheesman: Estimating uncertain spatial relationships in robotics
- Leonard, Durrant-Whyte: Mobile robot localization by tracking geometric beacons:
- Se, Lowe, Little: Mobile Robot Localization and Mapping using Scale-Invariant Visual
Landmarks:
http://www.cs.ubc.ca/~se/papers/ijrr02.pdf - SICK, industrial sensors:
http://www.sick.de - Evolution Robotics
http://www.evolution.com