申明:本文只是作者为方便知识积累,总结了很多SLAM大牛的文章要点。


SLAM(Simultaneous Localization and Mapping),主要有激光雷达和视觉传感器两个方向。视觉SLAM(Visual SLAM)包括单目、双目、使用景深摄像头的RGBD_SLAM。

单目SLAM:

(1). PTAM(Parallel Tracking And Mapping),第一个使用BA完成实时SLAM的系统,论文中提到的关键帧以及多线程思想是以后视觉SLAM的标配;缺点是:缺乏重定位和回环检测,只能作用于小规模场景,稳定性不是很高。

(2). Dense tracking and mapping in real-time),Direct SLAM的鼻祖。

(3). LSD-SLAM(Large-Scale Direct Monocular SLAM),半稠密SLAM系统。

(4). ORB-SLAM,比较完整的基于特征点的SLAM系统。

(5). ORB-SLAM2

(6).SVO

(7). DSO

RGBD-SLAM:

KinectFusion

RGB-D SALM2

ElasticFusion


视觉SLAM的几个模块:传感器数据采集(激光扫描、图像、点云)、视觉里程计(特征匹配、ICP、直接配准)、后端优化(滤波器、图优化)、建图(栅格地图、拓扑地图、2D/3D)、回环检测(词袋)。


视觉里程计:

    视觉里程计就是利用一个图像序列或一个视频流,计算摄像机的方向和位置的过程。一般包括:图像获取、畸变矫正、特征检测匹配或直接匹配对应像素、通过对极几何原理估计相机的旋转矩阵和平移向量。

    基于特征点的单目SLAM的缺点:无尺度标定,对于位置为0时的估计有问题。

    直接法:估计图像中灰度的差异,关键帧在x处的灰度与在当前帧投影到成像平面上那点灰度相减,作为误差项,Minimize一个重投影误差,得到灰度值差异的平方,不用特征点,运动快,但是容易丢。


后端优化:

    若视觉里程计模块估计的相机的旋转矩阵R和平移向量t都正确的话,我们就能得到完美的定位和建图了。但是实际试验中,我们得到的数据往往有很多噪声,且由于传感器的精度、错误的匹配等,都会对结果造成误差。并且由于我们只是把新的一帧与前一个关键帧进行比较,当某一帧的结果又误差时,就会对后面的结果产生误差,最后的结果误差肯定越来越大,为了解决这个问题,引入后端优化。

    后端优化一般采用捆集调整(BA),卡尔曼滤波(EKF),图优化等方式来解决。其中基于图优化的后端优化,效果最好。Graph-based SLAM一般采用g2o求解器,进行图优化计算。


回环检测:

    后端优化可能得到一个比较优的解,但当运动回到某一个之前去过的地方,如果我们能认出这个地方,并找到那个时候的关键帧进行比较,我们就可以得到比单用后端优化更准确更高效的结果。回环检测就是要解决这个问题。

    回环检测有两种方式,一是根据估计出来的相机位置,看是否与之前某个位置邻近;另一种是根据图像,去自动识别出来这个场景之前到过,并找到那时候的关键帧。后一种方式比较常用,其实是一个非监督的模式识别问题。比较常用的方法是使用Bag-of-Words(BOW),ORB-SLAM就是使用这个方式来进行闭回环测的。