1. 引言
在没有环境先验信息的情况下,机器人需要在运动环境中建立环境模型,同时估计自己的运动。同时定位与建图(SLAM)是这样一个系统,它包含两个主要的任务,定位和建图。1990年,Randall Smith和Matthew Self [1] 首次提出使用扩展卡尔曼滤波(EKF)递增估计机器人姿态的后验分布随地标位置的变化。事实上,机器人在未知的环境中通过在运动过程中反复观察环境从而定位自己的位姿,然后根据自己的位置构建一个增量的周边环境地图,从而达到同时定位和地图构建的目的。近些年随着科技的发展,涌现出一批与SLAM相关的应用点,这些大多与机器人、自动驾驶和计算机视觉有关。以视觉传感器为中心的视觉SLAM技术也逐步从实验室研究迈向市场应用。Raul Mur-Artal和Jose Maria Martinez Montiel提出的ORB-SLAM [2] 是一个完整的SLAM系统,包括视觉里程计、跟踪、回环检测,是一种完全基于稀疏特征点的单目SLAM系统,其使用ORB (Oriented FAST and BRIEF)特征作为整个视觉SLAM中的核心特征。
ORB算子 [3] 在2011年提出,该特征检测算子是在著名的FAST特征检测和BRIEF特征描述子的基础上提出来的,其运行时间远远优于同样经典的SIFT和SURF,可应用于实时性特征检测。ORB特征检测具有尺度和旋转不变性,对于噪声及其透视变换也具有不变性,良好的性能使得利用ORB在进行特征描述时的应用场景十分广泛。
2. ORB-SLAM算法发展历程
Klein等人提出的Parallel Tracking and Mapping (PTAM) [4] 将整个视觉SLAM系统分为两个主要线程:跟踪和建图,并行处理的两线程实现了实时性能,还降低了计算成本。当跟踪线程实时估计相机运动时,建图线程预测特征点的3D位置。PTAM也是第一个利用光束法平差(Bundle Adjustment, BA)联合优化相机姿态和3D地图创建的方法。
ORB-SLAM基本延续了PTAM的框架,但对其中大部分组件做了改进。采用 [5] 提出的场景 & 位置识别算法,Strasdat等人提出的具备尺度感知的闭环检测算法 [6] ,增加了共视(covisibility)信息的使用,重新设计了一种新的单目SLAM系统。ORB-SLAM2 [7] 在ORB-SLAM的基础上,在回环检测局部地图优化后,新增了一个全局优化。ORB-SLAM3 [8] 管理着一系列的子地图,这些子地图共用一个词袋,使得能够实现重定位回环等操作。
在同一领域中,还有诸多流行的视觉SLAM算法。DSO (Direct Sparse Odometry) [9] 是慕尼黑工业大学发布的一种基于直接法构建稀疏点云地图的算法。相比ORB-SLAM3使用的特征点法,直接法通过光流跟踪目标,允许更精细的几何表现。而香港科技大学VINS-Mono算法团队2019年发布的VINS的扩展版本VINS-Fusion [10] ,除了支持多种视觉惯性传感器类型,还支持将VINS与GPS进行融合。发表于2020年的BASALT [11] 则将关键帧之间信息以边缘化的形式提取出来,并在建图阶段把这些非线性信息恢复出来,以提高全局建图的鲁棒性和精度。总的来说,每一个算法都有其新颖之处,而ORB-SLAM3是第一个将不同相机模型进行解耦、并采取多地图融合技术的视觉SLAM算法。
2.1. ORB-SLAM单目算法
ORB-SLAM单目算法于2015年提出,采用三个线程并行处理数据:跟踪、基于光束法平差的局部优化和基于位姿图的全局优化。它遵循PTAM算法的主要框架,因为PTAM算法对关键帧的选择,特征匹配,点的三角化,相机位姿估计,追踪失败后的重定位非常有效。
2.2. ORB-SLAM2
ORB-SLAM2支持单眼、立体和RGB-D摄像机。这个版本包括闭环、重新定位和地图重用功能。在RGB-D的结果中,通过使用光束法平差,其具有比基于光度和深度误差最小化的方法更高的精度,而且它计算成本更低,不需要GPU处理实时运行。它具有一个轻量级的定位模式,可以有效地重用地图。
2.3. ORB-SLAM3
在最新研究中,ORB-SLAM3增加了对视觉与惯性数据的联合处理,视觉惯性SLAM [12] [13] 解释了惯性测量单元(Inertial Measurement Unit, IMU)的初始化过程。它还增加了构建多地图功能,增加了支持鱼眼相机模型。改进的系统在IMU初始化阶段引入最大后验概率估计(Maximum-a-Posteriori, MAP)。该初始化方法可以实时快速进行,鲁棒性上有很大的提升。另一方面,基于一种召回率大大提高的回环检测,这样ORB-SLAM3将在视觉信息缺乏的情况下更具有鲁棒性,当信息丢失的时候,就会重新建一个子地图,并且在回环阶段与之前的子地图进行合并。
关于ORB-SLAM的工作一脉相承,围绕着ORB特征做了非常多有重大意义的工作。本文对其中一些重要改进模块进行总结,ORB-SLAM3可以说是近几年的相关系统的一个大总结。鉴于此,本文拟从相机模型、多地图系统以及地图融合三个主要方面对ORB-SLAM系统进行综述。
3. ORB-SLAM系统框架
ORB-SLAM具有代表性的三个并行线程为:跟踪、局部地图构建和闭环回路检测,如图1所示。跟踪线程负责对每帧图像的相机位置进行定位,并决定什么时候插入新的关键帧。通过与前一帧图像匹配得到初始特征点,然后采用运动BA优化摄像头位姿。如果特征跟丢,则由位置识别模块进行全局重定位。一旦获得最初的相机位姿估计和特征匹配,则使用由系统维护的关键帧的共视图(Covisibility Graph)提取一个局部可视化地图,然后通过重投影方法搜索当前帧与局部地图点对应的匹配点,并利用所有的匹配点优化当前相机位姿。最后,跟踪线程决定是否插入新的关键帧。
ORB-SLAM对系统的建图、跟踪、重定位以及闭环检测等模块都采用相同的特征,这使得系统效率更高,而不必引入额外的特征进行闭环检测。由于此系统提取的特征具备旋转不变性,所以算法的位置识别能力更加通用化。而同样为特征提取用的BRIEF不具备这样的特性。ORB特征是具有256位描述符的带方向的多尺度FAST角点。计算和匹配的速度非常快,其视角旋转不变特性使得该方法可以在更宽的基准线上匹配帧,增强了BA的精度。
局部地图构建模块负责处理新的关键帧。首先对周围的相机位姿进行局部BA以优化重构,在共视图已连接的关键帧中搜索新的关键帧中ORB特征的匹配点,然后三角化新的地图点。有时尽管已经创建了新的点云,但基于跟踪线程过程中新收集的信息,为了保证点云的高质量,可能会根据点云筛选策略临时删除一些点。局部地图构建模块也负责删除冗余的关键帧。
Figure 1. ORB-SLAM system overview
图1. ORB-SLAM系统框架
闭环检测对每个新的关键帧进行闭环搜索,以确认是否形成闭环。如果闭环被侦测到,就计算相似变换来查看闭环的累积误差。这样闭环的两端就可以对齐,重复的点云就可以被融合。最后,为了确保全局地图的一致性,利用相似性约束对位姿图进行优化。
4. ORB-SLAM3关键技术
4.1. 相机模型
ORB-SLAM最初发布时是一个支持单目相机的实时运行系统,而ORB-SLAM2是首个基于单目,双目和RGB-D相机的开源SLAM方案。而在ORB-SLAM3中,系统将相机模型给抽象出来,将所有与相机模型相关的参数剥离出来形成单独的模块,实现了经典的针孔相机模型与Kannala-Brandt鱼眼相机模型。
4.1.1. 针孔相机模型
相机将三维世界中的坐标点映射到二维图像平面,整个过程用一个几何模型描述,其中最经典的是针孔模型,它描述了一束光线通过针孔之后,在针孔背面投影成像的关系,如图2所示。
由三维世界到二维图像平面的投影方程可以表示为:
(1)
其中点
为三维世界中的一点,点
是它在图像平面上的投影。
,
分别为x,y方向的焦距,只与摄像机内部结构有关,因此称为摄像机内部参数;K称为摄像机内部参数矩阵。理想的透视模型是针孔成像模型,物和像会满足相似三角形的关系。但是实际上由于相机光学系统存在加工和装配的误差,透镜自身形状对光线传播的影响等。透镜就并不能满足物和像成相似三角形的关系,所以相机图像平面上实际所成的像与理想成像之间会存在畸变。此时根据畸变参数计算坐标。
4.1.2. 鱼眼相机模型
鱼眼镜头是具有超广视角的镜头。在设计规格上,鱼眼镜头的焦距更短、视角更广。相同画幅和像素尺寸下,鱼眼镜头能容纳更多景物信息。鱼眼镜头的内参模型与普通镜头的内参一样,但畸变参数不同。ORB-SLAM3中增加了对鱼眼相机的支持,新增了基于鱼眼模型的追踪。其改进可归纳为以下两点:
1) 重定位:ORB-SLAM2通过求解PnP问题进行重定位后的计算,但是因为新增了鱼眼模型,因此新建了一个不基于相机模型的PnP算法,也就是最大似然PnP算法。
2) 鱼眼模型带来的另一个改变是在双目匹配阶段。ORB-SLAM2采用双目去畸变后的图像,去畸变的重构过程发生在进入系统之前,所采用的双目匹配方法是在极线上搜索,是一个很小的带状区域;搜索到匹配点之后直接根据视差计算深度。而ORB-SLAM3采用暴力匹配的方式,在全局使用KNN搜索,只查找与当前左目描述子距离最近和次近的右目描述子,再经过筛选算法后进行三角化计算关键点所对应的地图点。三角化的这部分在ORB-SLAM2中只用于跟踪,这里用于双目匹配计算深度。
4.2. 多地图系统
在ORB-SLAM3中,新增了多地图(Atlas)线程(一个由一系列非连接的地图组成的多地图系统),系统中Atlas基于视觉传感器上的使用在 [14] 中进行了介绍,它主要用于管理地图,依赖于一种新的位置识别方法和改进的召回方法。使得ORB-SLAM3能够在长时间的不良视觉信息下生存。当跟踪丢失时,它会启动一个新的地图,一旦重新访问地图区域时,它将与以前的地图无缝合并。另外Atlas中包含一个活动的地图与许多非活动地图。活动地图用于对当前帧跟踪线程的定位和增加关键帧。该系统建立了一个独特的关键帧数据库,用于重定位、回环、合并地图等操作。各个线程在其中的作用如下:
1) 跟踪线程:跟踪线程给活动的地图提供新的帧,最小化重投影误差,决定当前帧是否成为新的关键帧。视觉–惯性(Visual-Inertial, VI)模式中,通过惯性测量单元残差计算本体的速度与其的偏差。如果跟踪丢失,就尝试在Atlas所有地图中重定位,如果成功,那个地图将成为活动状态。如果几帧过后失败,则重新开始一个新的地图。
2) 局部地图线程:添加新的关键帧和地图点到活动的地图中,删除冗余帧,基于滑动窗口通过光束法平差更新地图。VI模式中IMU的参数在这个线程中初始化与更新,使用的是最大后验估计方法。最大后验估计方法是基于视觉–惯性特征的SLAM系统 [12] 中采用的方法。这个系统在IMU初始化阶段引入最大后验估计。该初始化方法可以实时快速进行,鲁棒性上有很大的提升(无论是在大的场景还是小的场景,不管室内还是室外环境均有较好表现)。
3) 回环与地图融合线程:每添加一个关键帧,就探测活动地图与其他地图的共有区域,如果检测到就执行回环矫正,如果不属于同一个地图,则将他们融合成一个。然后在矫正后另开一个线程进行整体的回环检测,进一步更新地图且不影响实时性。检测回环的同时,完成有共视子图的地图的合并操作,最终生成一个全局一致地图。
4.3. 地图融合
4.3.1. 地图融合时机
无论何时在建图中创造了一个关键帧,位置识别都会尝试去探测与Atlas中的关键帧的匹配。如果检测到的匹配关键帧属于活动的地图,执行回环,否则执行地图融合。一旦新的关键帧与地图确定了相对位姿,则定义一个局部窗口,包含匹配的关键帧及其在共视图中的临近帧。在这个窗口里密集地搜索数据关联,提高回环与地图融合精度。地点识别成功以后就可以进行地图合并了,如果候选帧和被检测帧分别属于不同的地图,会将被检测帧的地图融合入候选帧所在的地图。
4.3.2. 相似地图融合
ORB-SLAM3执行场景重识别来检测相似的地图进行融合,场景重识别的过程中需要检测和共视图中关键帧相连的三个关键帧来避免假阳性的检测结果。另外在地图融合的过程中,活动地图和具有共同区域的其他地图合并,然后用合并完的地图作为活动地图。
首先在两个地图中检测共同的部分。场景重识别模块提供了两个匹配的关键帧。然后需要估计地图融合的变换矩阵。基于两个地图的匹配关系,初始估计后,利用估计出来的位姿来指导匹配,再利用非线性优化两个地图的重投影误差得到两个地图间的匹配,最终得到两个地图之间的位姿。最后检测重复的地图点进行融合,所有关键帧和地图点放在同一个地图中并把他们的生成树和共视图合并成新的一个生成树和共视图,再进行位姿图优化来优化位姿。
由于地图融合线程和跟踪线程并行运行,在融合之间有时候会触发全局BA,这时候局部建图会停止,来避免在Atlas中加入新的关键帧。如果全局的BA线程已经在运行,局部建图也会停止,因为生成树在BA后会发生改变。跟踪线程会在旧的活动地图中保持实时的运行。一旦地图融合完成,就重启局部建图线程。全局BA结束以后也会重启局部建图线程来接收新的数据。
5. 算法评价
要比较不同SLAM系统的性能,需要在相同的图像序列上进行测试,目前较为流行的公共数据集有KITTI、TUM和EuRoC等。EuRoC [15] 是用于室内导航的公共数据集,由微型飞行器在苏黎世联邦理工学院的一个工厂车间通道和一个普通实验室房间采集得到,速度、光照、行驶轨迹等多种多样。数据集中包括双目图像序列、IMU测量值,准确的位姿和真实值。表1显示了ORB-SLAM3与其他几个流行的SLAM系统在EuRoC上的绝对轨迹均方根误差(RMSE ATE)。
Table 1. Performance comparison of SLAM systems in EuRoC dataset
表1. 几种SLAM系统在EuRoC上的表现比较
在单目和双目模式中,ORB-SLAM3比ORB-SLAM2更精确,因为更好的位置识别算法可以更早地结束循环。而在单目惯性模式中,ORB-SLAM3的精度是VI-DSO和VINS-Mono的两倍多,再次显示了数据关联的优势。在双目惯性模式中,ORB-SLAM3也优于VINS-Fusion和Kimera。
6. 总结
ORB-SLAM3通过实验证明,在所有类型传感器配置下,它的鲁棒性与现在发表的各大系统相近,精度上有了显著的提高。召回率,即所有真实回环被正确检测出来的概率大大提升。在最新研究的场景识别中,先在当前的候选关键帧中进行几何一致性的检测,这个策略计算量会高一些,但是会带来更高的召回率和地图精度。在 [2] [7] 基础上推出的ORB-SLAM3是视觉、视觉–惯性和构建多地图系统的开源库,带有单目、立体、RGB-D和鱼眼相机。它具有快速和准确的IMU初始化技术,以及多地图合并功能,非常适合实际应用中那些长期和大规模的SLAM。另外,它是第一个能够有效利用多地图数据关联的视觉和视觉–惯性系统。在准确性方面,使用所有这些类型的数据关联的能力超过了其他系统,比如为本地BA执行关键帧边缘化。关于四种不同的传感器配置,立体惯性SLAM提供了最鲁棒和准确的解决方案。惯性传感器允许以IMU速率估计姿态,对于由于体积大、成本高或加工要求而不希望使用立体相机的应用场景,就可以使用单目惯性模型,而不会在稳健性和准确性方面损失太多。
如今,SLAM技术已成功应用于航空、家居等各类移动机器人系统中,包括汽车、消费电子等工业领域。然而在一些特定场景,如相机快速移动引起的图像模糊、室外的长距离运行,光照和成像条件的影响,都会造成位姿估计的不准确,进而形成建图失真。从这些问题和近期研究看来,算法可能有几个发展趋势:1) 由于场景和相机往往有相关性,如大视角场相机适合空间较少的环境,除了目前ORB-SLAM3已经用到的相机外,还有全方位相机、反射折射相机等。从相机多样性出发,可以增强SLAM系统的环境适应性。2) 设计高性能的特征算子和外点排除算法,近几年新的特征算法不断出现,如二进制描述符NESTED对外点排除有很好的效果。利用边缘等高层图像信息也能弥补特征算法带来的漂移。可以将不同特征融合使用,使SLAM系统低纹理适应性更强。3) 基于深度学习建立SLAM系统,基于神经网络的特征训练网络可以从图像序列变化中训练特征,例如 [19] 提出的D3VO单目视觉框架,它利用深度、姿态和不确定度三个层次构成的自监督神经网络,预测图像光流,无须建立复杂的物体运动几何模型,不过如何提升这类算法适应不同场景的鲁棒性仍然是一个关键问题。