作为vSLAM领域小白,学习完《视觉SLAM十四讲》后,抱着学习的心态研究了论文Visual SLAM algorithms: a survey from 2010 to 2016,作为入门的第一步,会有很多地方不太准确,希望指正:
摘要:
SLAM(同时定位与建图)是一种在未知环境中估计传感器运动和重建结构的技术,特别的,vSLAM(视觉slam)只采用图像信息进行定位与建图,它作为一种基础技术被广泛广泛应在了计算机视觉,增强现实,机器人等领域。本文旨在对近年来vSLAM进行分类和总结(尤其是2010-2016)。
1 介绍
一般来说,vSLAM比基于其他传感器的SLAM更难,因为与通常使用的360°激光传感相比,摄像机只能从有限的视野中获得较少的视觉输入。根据这些输入,需要不断地估计摄像机的姿态,同时重建未知环境的三维结构。早在2000年,关于单目vSLAM的研究是基于对特征点的跟踪和建图的,这种方法被称作特征点法;为了克服缺少纹理或者缺少特征点的环境,一种不需要检测特征点、直接用整幅图像进行跟踪和映射的vSLAM算法被提出,这种方法被称为直接法;随着低成本RGB-D传感器(如microsoftkinect)的出现,基于单眼图像和深度的vSLAM算法逐渐被应用。因此,本文介绍将针对三种方法进行介绍。
2 vSLAM的组成
2.1 基础模块
SLAM的框架一般包括1 初始化 2 跟踪 3 建图
进行vSLAM之前,需要在未知环境中定义一个特定的坐标系来进行摄像机的位姿估计和三维重建。因此,在初始化时,首先要建立全局坐标系,并选取一部分环境作为初始地图。初始化后,通过跟踪和建图来不断估计摄像机的姿态:在跟踪过程中,通过跟踪图片里的地图,来估计图像相对于地图的摄像机姿态,在这里,首先从图像中的特征匹配或特征跟踪获得图像与地图之间的2D-3D对应关系,然后,通过求解PnP问题计算出像机的姿态。在建图过程中,当相机观察到未知区域时,通过计算环境的三维结构来扩展地图。
2.2 附加模块
根据应用目的不同,两个模块被添加:1 重定位 2 全局地图优化
当由于摄像机快速运动或某些干扰而导致跟踪失败时,需要重新定位。在这种情况下,有必要通过再次计算相机在地图中的姿势,这一过程被称为“重定位”。另一个模块是全局地图优化,由于摄像机运动的距离,所创建的地图通常包含累积估计误差,为了抑制误差,需要对整个地图信息的一致性的检验与优化,得到了更加准确的检验。当相机再次移动到同一位置时,便可得到一圈的累积误差,此约束条件便可以通过优化来抑制误差。
闭环是一种获取参考信息的技术。在闭环中,首先通过匹配当前图像和先前获取的图像来搜索闭环,如果检测到回路,则意味着相机捕捉到先前观察到的视图之一,在这种情况下,可以估计相机移动期间发生的累积误差。注意,闭环检测可以通过使用与重新定位技术来完成。
3 最新技术
vSLAM、视觉里程计(VO)和实施运动恢复结构(SFM)是在未知环境中预先设计的图像运动和三维结构。下面,我们将解释它们之间的关系。视觉里程计(VO)里程计是利用编码器等传感器来估计传感器位置的顺序变化,以获取传感器的相对运动。基于相机的里程计成为视觉里程计。一般来说vSLAM=VO+global map optimization,VO是vSLAM中的三个基础模块。运动恢复结构(SFM)运动恢复结构是通过一系列图片还原世界模型,与vSLAM的区别在于:SFM是离线处理数据,而SLAM是实施定位与建图。
4 基于特征的方法
在此类方法中,位姿优化的过程中主要有滤波器和非线性优化两种。首先介绍两种slam系统
4.1 MonoSLAM(单目)
MonoSLAM最早产生于2003年,其,它主要有两部分组成:
1.通过拍摄已知物体进行初始化
2.通过EKF(卡尔曼滤波器)同时估计相机运动与环境
MonoSLAM的弊端在于随着环境的增大,其计算压力会越来越大,很难实现实时计算。
4.2 PTAM(单目)
PTAM将跟踪和定位两个功能放在两个线程里运行,很大程度上缓解了计算压力,所以效果更好的非线性优化(一般为BA)被运用到了系统之中。它由四部分组成:
1.通过五点法进行初始化
2.通过匹配图像与地图实现相机位姿估计
3.特征点的坐标通过三角测量得到,然后通过BA优化
4.跟踪过程通过基于随机树的搜索恢复
基于BA的PTAM要比基于EKF的MonoSLAM的定位精度更高,而且由于才用了双线程,运行效率更高。
4.3 ORB-SLAM(单目)
ORB-SLAM是最完整的基于特征的单目视觉slam系统,它拓展了PTAM,系统分三个线程运行效率更高,且包含了BA优化、基于视觉的回环检测、7自由度位姿优化等功能。此外,ORB-SLAM已经被扩展了双目和RGB-D版本。
5 直接法
直接法也成为无特征法,一般来说,直接法采用图像一致性作为误差测量方法,而基于特征的方法中,采用几何一致性作为误差测量方法。下面是几个基于直接法的slam系统。
5.1 DTAM(双目)
DTAM通过比较输入图片和从地图映射图片的对比实现跟踪功能。包含下面三个部分:
1通过双目测量实现初始化
2通过从重建的地图生成合成视图来估计摄像机的运动
3利用多基线立体模型估计每个像素的深度信息,然后考虑空间连续性对其进行优化
5.2 LSD-SLAM
LSD-SLAM的核心思想来源于半稠密建模的视觉里程计(VO)。在该方法中,重建目标仅限于具有强度梯度的区域,这也意味着忽略无纹理区域,因为很难从图像中准确估计深度信息。它包含四个部分:
1.随机初始化每个像素的值
2.通过从重建的地图生成合成视图,与输入图像对比来估计摄像机的运动
3.仅重建梯度大的的区域
4.采用7自由度重构图的几何一致性优化方法
5.3**SVO **
semi-direct VO(SVO),它的跟踪采用特征点匹配,建图采用直接法,可以理解稀疏的DTAM和LSD-SLAM.
6 RGB-D vSLAM
随着消费级的相机的出现,RGB-D相机机也逐渐用于vSLAM算法中。
6.1 与单目相机的区别
相比于单目slam,RGB-D slam的坐标系统的尺寸是已知的,但是缺点也很明显:1.因为其发射的红外信号会受到室外光线的干扰,所以一般适用于室内环境,2.测量范围只有1-4米。
6.2 运动融合(KinectFusion)
在KinectFusion中,通过对比体素空间中的深度地图获得环境的3D结构,然后通过ICP算法估计相机的移动。在GPU加速下KinectFusion可以实时运行。
6.3 SLAM++
在这种算法中,提前将多个物体注册在数据库中,然后在算法运行过程中识别这些物体,识别后的物体会替代3D物体点云以缩减数据量并简化地图。
7 存在的问题
在实际的环境中,vslam仍然需要面对很多困难:纯旋转问题,地图初始化,相机内参估计,坐标尺寸
7.1 纯旋转
手持型设备很容易出现纯旋转的运动,此时单目视觉slam很难找出相邻照片之间差距(RGB-D slam不存在这种问题)。解决方案有多种:1.使用homography跟踪纯旋转运动,同时使用6位姿估计相机跟踪其他相机运动。2.根据相机运动使用两种3D点的格式,用3D point表示可以观察到明显差异的点,用3D rays表示不能观察到明显差异的点,在跟踪的过程中3D rays点与特征点的距离会作为误差参与到相机运动估计中。
7.2 地图初始化
地图初始化对于后续精准的位姿估计来说非常重要,为了获得准确的初始化地图需要很宽的基线,对于新手来说并不友好。
7.3 估计相机内参
单目slam已经假定知道了相机内参,所以需要提前对相机进行标定。matlab和opencv有相关的工具箱或者函数。
7.4 坐标尺寸
单目相机无法测量物体的准确尺寸,也就是缺少一个维度。有学者用人的手或者脸去确定一个绝对的全局坐标尺寸,有人每个人的身形都是不一样的,所以这种方法并不准确。此外,可以利用加速度计,陀螺仪等其他传感器的获得尺寸信息。
8 总结
本文介绍了10-16年内各种vSLAM算法,最基础的slam算法包括初始化、相机运动、3D环境估计、全局优化和重定位。最近,单目slam中关于直接法的研究越来越多,此外随着RGB-D相机的推广,RGB-D vSLAM是一个热门的研究内容。为了更好的比较不同算法的特点,表格中列出了对比结果,读者可以根据应用场景的特点选择合适的算法。本文着重研究了基于视觉的slam,很多学者将数据与惯性测量单元结合,克服了单目尺寸问题,取得了很好地效果,多出传感器融合slam也是很好地研究方向。(ORB-SLAM3的imu+视觉就取得了超好的效果)
连接:
1 https://github.com/raulmur/ORB_SLAM2.
2 https://get.google.com/tango/.
3 https://structure.io/.
4 https://developer.vuforia.com/.
5 http://trakmark.net.
6 http://www.cvlibs.net/datasets/kitti/.
7 https://github.com/CVfAR/ATAM.
8 https://github.com/UZ-SLAMLab/ORB_SLAM3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)