SLAM学习笔记(1)

      在家带娃,闲来无事翻看《视觉SLAM十四讲》,粗略过了一遍,先记个大概,细节部分容后再补。

SLAM框架如图


图片发自App

一、前端视觉里程计

      视觉里程计的任务是估算相邻图像间的相机运动,以及局部地图。实现方式主要有两类:特征点方式和直接法。

1.特征点方式

提取特征点→特征点匹配→估计相机运动

在目前的SLAM方案中,ORB是质量与性能的较好折中。

相机运动估计主要有三种实现方式:

1.1 2D-2D(两张图像中的匹配点对):对极几何

用经典的八点法估计本质矩阵

若特征点共面或相机纯旋转则估计单应矩阵

通常同时估计两者,选择重投影误差较小的那个作为最终的运动估计矩阵

1.2  3D-2D(3D空间点及其投影位置):PnP

直接线性变换(DLT)

P3P(仅使用三对匹配点)

Bundle Adjustment(同时求解相机位姿和空间点位置)

1.3 3D-3D:ICP(Iterative Closest Point)

利用线性代数求解(SVD)

非线性优化

2.直接法

2.1保留特征点,但是只计算关键点不计算描述子,使用光流法跟踪特征点的运动。

2.2只计算关键点不计算描述子,使用直接法来计算特征点在下一时刻图像中的位置。即稀疏直接法。

2.3既不计算关键点也不计算描述子,而是根据像素灰度的差异,直接计算相机运动。若所有像素参与运算则为稠密直接法,若只计算具有明显梯度特征的像素则为半稠密直接法。

直接法的优点:

可以省去计算特征点,描述子的时间。

只要有像素梯度即可,可以在特征点缺失的场合下使用。

可以构建半稠密,稠密地图。

直接法的缺点:

非凸性,优化算法容易进入极小。

单个像素没有区分度。

灰度值不变是很强的假设。

二、后端非线性优化

      后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对他们进行优化,得到全局一致的地图。

      后端优化分为以扩展卡尔曼滤波(EKF)为代表的滤波方法和以BA(Bundle Adjustment)为代表的优化方法。近十年由于认识到BA的稀疏性,才使得它能在实时的场景中应用。

      BA能够精确地优化每个相机位姿与特征点位置。但在更大的场景中,随着特征点的增加,计算量也越来越大以至于无法实时。因此可考虑在优化几次之后把特征点固定住,只把它们看作对位姿的约束,而不再实际地优化它们。即Pose Graph优化。

三、回环检测

      判断机器人是否到达过先前的位置,如果检测到回环,它会把信息提交给后端进行处理。

      由于前端只考虑相邻时间的关联,因而不可避免地出现累积误差,导致轨迹漂移问题。而回环检测在一定程度上可以缓解这一问题。另外,在跟踪算法失败时,我们还可以利用回环检测进行重定位。

      通常使用词袋模型来作回环检测。亦可考虑深度学习方法。

      构建字典→相似度计算→判断是否为回环→回环验证

四、建图

      根据估计的轨迹,建立与任务要求对应的地图。


图片发自App

      单目稠密重建,利用极线搜索和块匹配技术解决匹配问题,使用深度滤波器技术估计深度。过于依赖环境纹理和光照,不够可靠。

      RGB-D稠密建图,完全通过传感器中的硬件测量深度,保证了深度数据对纹理的无关性。在实际建图中考虑到视觉效果和存储空间,还需要使用外点去除滤波器和降采样滤波器。

五、SLAM:现在与未来

当前开源方案

图片发自App

LSD-SLAM的核心贡献是将直接法应用到了半稠密的单目SLAM中。帖张n年前跑的实验图。


SLAM学习笔记(1)_第1张图片
图片发自App
SLAM学习笔记(1)_第2张图片
图片发自App


SVO使用稀疏的直接法,速度极快。2.0版本速度可达400fps,非常适用于计算平台受限的场合,例如无人机。

未来的SLAM话题

视觉+惯性导航SLAM

语义SLAM

深度学习与SLAM的结合

多机器人SLAM

你可能感兴趣的:(SLAM学习笔记(1))