0 初步认知
知乎Live:畅谈 SLAM 即时定位建图技术
视觉SLAM漫淡
SLAM:simultaneous localization and mapping 即时定位与地图构建
- SLAM分为视觉SLAM(用视觉信息)、激光SLAM(用激光信息)。区别只在于数据的来源,视觉SLAM用视觉里程计,而后端、回环检测、建图并不在乎数据是从哪来的。其实对于回环检测来说,用视觉中比激光有效,因为视觉信息比激光信息更丰富,判断这两个图像是同一个地方,比判断两个激光数据采自同一地点,要容易。
- 本文专注于视觉SLAM
0.1 SLAM中四个问题
- localization定位、mapping建图、navigation导航、exploration探索
0.2 视觉SLAM的模块
- 传感器:主要分为单目相机、双目相机、RGB-D相机。
-
前端:视觉里程计(与计算机视觉、测量几何相关,分为基于特征点的视觉里程计、基于直接法的视觉里程计),由于用的是计算机视觉的方法,在运动过程中会产生累积误差,最后造成drift漂移,故得到的是粗略的位置和几何估计。
· 基于特征点的视觉里程计:以 (Oriented FAST and Rotated BRIEF) ORB-SLAM为代表。
· 基于直接法的视觉里程计:以 Large-Scale Direct (LSD) 大规模直接法、Semi-Direct Monocular Visual Odometry (SVO) 半直接单目视觉里程计 为代表,由光流法发展而来。 -
后端:非线性优化(现在主流的方法),优化得到更精确的轨迹和地图。
后端在很长一段时间使用以 Kalman Filter (KF) 卡尔曼滤波器 和 Extended Kalman Filter (EKF) 扩展卡尔曼滤波器 为代表的滤波器方法;近年来受到structure from motion 领域的影响,开始大规模使用非线性优化来对轨迹和地图进行进一步的优化。 - 回环检测:词袋模型(主流方法),检测机器人什么时候回到了之前的位置,从而消除累积误差。
-
建图:根据之前得到的相机轨迹和粗略地图来估计更加精确的地图。
下面是各模块中部分重要概念
1 前端 —— Visual Odometry 视觉里程计
1.1 基于特征点(稀疏)
- 计算特征点、特征点匹配、重构。由于只重构特征点,所以是稀疏的。
- 缺点:提取特征点过程中,丢弃了大量的有用信息,对于一张640x480的图像,原本有30万左右的像素,但是我们只用了其中几百个特征点而已;特征缺失问题,即我们无法保证对于每个图,都能提以足够的、有效的特征点,比如一面白墙。
1.2 光流法
- 以LK光流(稀疏)为例:计算关键点(没有描述子),根据这些点的运动计算相机运动
- 缺点:需要灰度不变假设,不是只对于关键点这一个像素,而是比如4*4的区域在两帧之间假设灰度不变;并没有考虑相机的旋转和物体的缩放,也就是说如果相机发生旋转或者物体发生了缩放,就不准了;没考虑相机的参数,仅基于图像去计算,但我倒觉得是好事,这样不需要知道相机参数也是可以做的,但是可能这样利用的信息比较少。
1.3 基于直接法(稠密)
- 直接法跳过了提取特征点的步骤,直接根据像素信息来估计相机的运动。所以是稠密的。
- 缺点:利用了所有信息之后,使得优化问题规模远远大于使用特征点的规模,多需GPU加速才能达到实时;由于图像的非凸性,直接用像素计算极易陷入局部最优,且需要假设同一个点在不同视角下灰度相同(即灰度不变假设,然后解一个最小化光度误差的优化问题),故只有在图像足够相似时(相机运动连续、缓慢时)才有效。
- 根据使用像素的多少,分为稠密的(用所有像素)、半稠密的(用像素梯度比较明显的地方,因为梯度不明显的地方对优化问题贡献并不大)、稀疏的(用关键点,不需要特征描述,只是变化明显的角点、边缘)直接法。其中稀疏的直接法是视觉里程计中最快的方式,一因为稀疏,二因为不需要特征描述。
- 代表方法:早期的DBU,现在的LSD、DSO、SVO。
2 后端 —— 非线性优化
2.1 图优化
3 Loop Closure Detection 回环检测
回环检测指机器人识别曾到达场景的能力,如果检测成功,可以显著地减小累积误差。多用词袋模型。
3.1 Bag of Words 词袋模型
- 词袋模型用于检测观测数据的相似性。在词袋模型中,我们提取每张图片的特征,将特征向量聚类成不同类别(比如眼睛、鼻子、嘴、耳朵,其实在这里只是一些特定的边缘、角等)。假设有10000类,那么每张图片可以用one-hot的10000维向量表示。通过比较向量,来比较图片。
4 建图
4.1 地图类型
视觉SLAM漫谈 (三): 研究点介绍
经典视觉SLAM框架
大致分为度量地图和拓扑地图:
- Metric Map 度量地图:
- Sparse稀疏型:即路标地图,由路标组成。但对于导航来说只有路标的地图是不够的。
- Dense稠密型:即点云图,按照某分辨率,二维划分为Grid小格子,三维划分为Voxel小方块(体素),每个小块有 占据、空闲、未知 三种状态。但由于需要存储每个小块的状态,故耗费大量存储空间,且许多细节是无用的;误差易使地图无效。
-
Topological Map 拓扑地图:
是一种更稠密的地图,强调地图元素之间的关系,将地图抽象为图论中的“节点”和“边”,只考虑节点之间的连通性。但不擅长表达具有复杂结构的地图。