slam的研究历史

国内外研究现状、发展动态描述

即时定位与地图构建(Simultaneous Localization and Mapping, 即SLAM)的目的是让机器人在未知环境中持续地构建环境地图,并同时在地图中给自己定位。定位和建图两个问题相互依赖,准确的定位依赖于正确的地图,而构建正确的地图又需要准确的定位,这是一个迭代的过程[1]。

 进入2000年以后,随着计算机处理性能的大幅提升,以各种摄像头为传感器的SLAM逐渐成为研究新热点,并在近年开始有市场化的迹象。视觉传感器主要分为三种:1. 单目摄像头(Monocular Camera)2. 双目摄像头(BinocularCamera)3. 深度摄像头(RGB-D Camera)深度摄像头可以通过time of flight等方法来直接获得图像及对应的深度信息,优点在于方便获得深度数据,缺点在于成本高,体积大,室外环境基本报废。双目摄像头可以通过三角方法计算出深度信息,市面上有一些深度摄像头也是直接基于双摄像头来做的。然而双目摄像头在目标距离较远的时候会退化成单目。因此近年来大量的研究都是围绕单目进行的。单目SLAM可以通过临近图像匹配计算出摄像头位姿的变换[2],在两个视角上进行三角测距又可以得出对应点的深度信息[3]。通过这样迭代的过程可以实现定位及建图[4]。原理听起来很直观,然而现实环境中大量的测量噪声,计算误差造成了SLAM问题的无限复杂。于是解决不确定性问题是SLAM的核心。不确定性问题是很多研究领域的核心,但其实并没有很多的解决办法。大多数不确定性问题都用贝叶斯网络进行建模的[5],所以早期的SLAM问题主要都是在贝叶斯框架下进行讨论的,在该框架下主要有两种计算方案:1. EKF-SLAM (extended kalman filters ). 利用拓展卡尔曼滤波器对机器人位置进行估计[6]。2. FastSLAM (Rao-Blackwellized particle filters). 利用粒子滤波器[7]进行位置的估计。但由于基于Filter的SLAM采用了markov假设[8],仅考虑最近两组数据的递推关系,会导致误差累加不可恢复,因此近年来基于filter的SLAM已经基本被考虑了全局数据的Graph-based所取代:3. Graph-BasedSLAM。把SLAM问题建模成优化问题[9],大多采用最小二乘法进行求解。早期的Graph based SLAM认为如果所有的landmark和所有的state都有连接,那么状态矩阵的规模将非常巨大,无法求解。但后来研究发现其实每一个state只与少量的landmark有链接,整个状态矩阵其实是稀疏(sparse)的[10],求解可以非常快。基于Gprah的模型[11]不像Filter仅考虑最近的两个状态,进行局部优化,而是对之前的所有状态一起做优化,相当于一个全局优化。于是越来越多的SLAM系统转而使用Graph进行建模求解。通用的Graph SLAM求解器有GTSAM, g2o等[12]。基于视觉传感器的地图通常分三类:1. feature map2. semi-densemap3. dense map。Monocular SLAM的起源是Andrew Davision基于EKF模型[13]的MonoSALM[14],随后他在oxford的师父David Murray发表了Keyframe based的PTAM,是现在大多数SLAM系统的基石。最近两年比较流行的单目SLAM有两个,一个是TU Munich的LSD-SLAM,该工作不基于图像特征点匹配,做运动估计,而是直接提取对比图像中梯度变化明显的区域,建立semi-dense的地图[15]。第二个是University of Zaragoza的ORB-SLAM,该工作本质上与PTAM区别不大,但是作者通过很强的代码实现能力把该系统做成了目前功能最完善最稳定的SLAM系统。ORB-SLAM采用高速的ORB图像特征点,加入了SLAM系统中很重要的re-localizing和loop closure模块,并使用g2o进行全局误差最小化。该系统在多个公开dataset上取得了非常好的效果,经测试,在自然环境下也有一定的实用性。最近作者又放出了ORB-SLAM2,精简了环境配置的繁琐过程,安装更方便,工作更稳定,且可以不依赖ROS工作。

语义地图方面,CNN-SLAM[16]为今年CVPR的文章,是比较完整的pipeline,将LSD-SLAM里的深度估计和图像匹配都替换成基于CNN的方法,取得了更为robust的结果,并可以融合语义信息。类似的工作还有论文[17]。VINet[18]是今年AAAI的文章,利用CNN和RNN构建了一个VIO,即输入image和IMU信息,直接输出估计的pose。文献[19]是Magic Leap放出来的文章,说是Deep SLAM,其实只是用CNN做了SLAM中提取特征点和匹配特征点的两个模块,在CPU上实时。文献[20]是Google 今年CVPR的oral文章,利用CNN学习一个无监督的深度估计和pose估计网络,代码见tinghuiz/SfMLearner。SfM-Net[21]利用监督学习也干了类似的工作。语义地图[22]、回环检测等也有一些工作。


你可能感兴趣的:(slam的研究历史)