本文提出了ORB-SLAM2,一种适用于单目、双目和RGB-D相机的slam系统,包含地图重用,回环检测,重定位等功能。该系统可在各种环境中运行,包括室内和室外的交通工具 。该系统的后端基于BA,可以使用公制尺度进行位置估计。该系统包括轻量级的视觉里程计追踪未建图区域,以及对地图点的匹配来实现零漂。基于29个数据集的评估说明该种方法实现了最高的准确率。作者开源该算法,不仅为了slam社区的利益,也为了开箱即用的slam解决方案的发展。
(第一段废话略过)
视觉slam可以用过单目相机实现,它最便宜,体积也最小。但是,单目相机的深度是丢失的,因此,地图的尺度是未知的。此外,自助法(bootstrapping)需要多视图或一些过滤手段来生成初始图,因此使用单目相机无法完成地图的初始化。最后,单目相机面临着尺度漂移和转弯时失效等问题。通过使用双目或rgbd相机可以解决这些问题。
在这篇文章中,作者基于单目orbslam提出了orbslam2,贡献如下:
(1)首个对单目、双目、rgbd都有效的开源slam解决方案。
(2)对于rgbd的测试结果,通过使用ba,得到了比使用icp方法精确的多的结果。
(3)通过使用单目以及远近双目特征点,得到了比双目slam好得多的结果。
(4)一个轻量级的定位模式,可以在未建图时高效地定位。
(后介绍成果略)
双目和rgbd的orbslam2是基于单目orbslam的,本文先简要介绍它的特点,其框架如下图所示。
系统由三个并行线程组成:(1)跟踪线程,用于对每一帧找出的特征与局部地图匹配,用仅运动BA来最小化重投影误差,以此来定位相机。(2)管理和优化局部线程,执行局部的ba。(3)探测最大的回环,通过位姿图纠正累计误差。该线程还会调用第四个线程,在位姿优化后执行全局BA,来求出最优结构和运动解。
该系统嵌入了位置识别模型DBoW2来进行跟踪失败时的重定位,已建图场景的重初始化和回环检测。该系统维持covisibiliy graph来连接任意两关键帧之间的公共点和一个最小生成树来连接所有的关键帧。这些图结构允许检索本地窗口的关键帧,因此跟踪和局部建图可以在局部运行,使得系统能在大环境中工作。此外,在闭环时,该结构还可用于位姿优化。
该系统在跟踪、建图和位置识别时使用相同的orb特征。这些特征对于旋转和尺度都是鲁棒的,而且对于相机自动曝光和增益以及照明变化都有较好的的容忍度。此外,它们可以较快地提取以做到实时匹配,而且也表现出较好的精确度。
在本章的剩余部分,作者展示了双目和深度信息是如何被利用、系统的哪些元素被影响的。对于每个系统模块的更细节的讨论,在单目的论文里有详细解释。
orbslam2作为一种基于特征的方法,会预处理输入,提取他们的特征作为重要的关键点位置。输入图像被抛弃,所有的操作都基于特征,因此系统无关于传感器类型。我们的系统会处理单目和双目的关键点,进一步分为近点和远点。双目关键点由三个坐标定义,xs =(uL , vL , uR ),(uL , vL )为在左图的坐标,(uR, vR )为在右图的坐标。对双目相机,我们对两张图都提取ORB特征,对左图的ORB特征在右图寻找匹配。假设立体矫正的极线是水平的,这会非常快。之后,我们使用这三个坐标生成双目关键点,通过patch correlation进行亚像素精炼。对于RGBD相机,我们在RGB图上提取ORB特征,对于每个特征坐标,我们把它的深度值d转换为虚拟的右图坐标:
u R = u L − f x b d u_{R}=u_{L}-\frac{f_{x} b}{d} uR=uL−dfxb
f x f_{x} fx是水平焦距,b是结构光灯和红外相机之间的基线距离。深度相机的不确定性就是其右坐标的不确定性。通过这种方式,双目与RGBD的输入特征可以被后续系统统一处理。
一个双目关键点被认为是近的如果它的相关<40倍的基线。否则,它被认为远。近点可以被安全地三角测量因为其深度可被准确估计而且提供尺度,平移和旋转变换信息。另一方面,远点提供准确的旋转信息,但尺度和平移信息较差。我们会在远点被多视时对其进行三角测量。
单目关键点通过两个左图坐标xm = (uL , vL )定义,其定义于双目匹配失败或深度无效的关键点。这些点只有在被多视时才进行三角变换,不提供尺寸信息,只提供旋转和平移信息。
使用双目或RGBD相机的一个主要优点是,通过只从一帧获得深度信息,我们不需要像单目一样做运动初始化。在系统开始时,我们在第一帧创建关键帧,把它的位置设为原点,从所有的双目关键点中获取初始地图。
我们的系统使用BA去优化跟踪线程的相机位姿(纯运动BA),在局部建图线程优化局部窗的关键帧和局部图上的点(局部BA),使用回环去优化所有的关键帧和点(全局BA)。我们使用g2o中的LM方法做优化。
纯运动BA优化相机的姿态和位置,最小化世界坐标系中已匹配的3d点与关键点之间的重投影误差,公式如下:
{ R , t } = argmin R , t ∑ i ∈ X ρ ( ∥ x ( ⋅ ) i − π ( ⋅ ) ( R X i + t ) ∥ Σ 2 ) \{\mathbf{R}, \mathbf{t}\}=\underset{\mathbf{R}, \mathbf{t}}{\operatorname{argmin}} \sum_{i \in \mathcal{X}} \rho\left(\left\|\mathbf{x}_{(\cdot)}^{i}-\pi_{(\cdot)}\left(\mathbf{R} \mathbf{X}^{i}+\mathbf{t}\right)\right\|_{\Sigma}^{2}\right) {R,t}=R,targmini∈X∑ρ(∥∥∥x(⋅)i−π(⋅)(RXi+t)∥∥∥Σ2)
其中, ρ \rho ρ是huber函数, ∑ \sum ∑是与关键点相关的协方差矩阵。投影矩阵 π ( ⋅ ) \pi_{(\cdot)} π(⋅),单目的 π m \pi_m πm和双目的 π s \pi_s πs被如下定义:
π m ( [ X Y Z ] ) = [ f x X Z + c x f y Y Z + c y ] , π s ( [ X Y Z ] ) = [ f x X Z + c x f y Y Z + c y f x X − b Z + c x ] \pi_{\mathrm{m}}\left(\left[\begin{array}{l} X \\ Y \\ Z \end{array}\right]\right)=\left[\begin{array}{c} f_{x} \frac{X}{Z}+c_{x} \\ f_{y} \frac{Y}{Z}+c_{y} \end{array}\right], \quad \pi_{\mathrm{s}}\left(\left[\begin{array}{c} X \\ Y \\ Z \end{array}\right]\right)=\left[\begin{array}{c} f_{x} \frac{X}{Z}+c_{x} \\ f_{y} \frac{Y}{Z}+c_{y} \\ f_{x} \frac{X-b}{Z}+c_{x} \end{array}\right] πm⎝⎛⎣⎡XYZ⎦⎤⎠⎞=[fxZX+cxfyZY+cy],πs⎝⎛⎣⎡XYZ⎦⎤⎠⎞=⎣⎡fxZX+cxfyZY+cyfxZX−b+cx⎦⎤
f表示焦距,c是焦点,b是基线距离,以上参数都可从校正中获得。
局部BA 优化了可见关键帧KL和关键帧中所有的点PL。对于其他所有的关键帧kf,观察PL中对代价方程有贡献的点但在优化中保持固定。定义xk是pl中的点和关键帧k中的关键点进行匹配的集合,优化问题如下:
{ X i , R l , t l ∣ i ∈ P L , l ∈ K L } = argmin X i , R l , t l ∑ k ∈ K L ∪ K F ∑ j ∈ X k ρ ( E ( k , j ) ) E ( k , j ) = ∥ x ( ⋅ ) j − π ( ⋅ ) ( R k X j + t k ) ∥ Σ 2 \begin{aligned} \left\{\mathbf{X}^{i}, \mathbf{R}_{l}, \mathbf{t}_{l} | i \in \mathcal{P}_{L}, l \in \mathcal{K}_{L}\right\} &=\underset{\mathbf{X}^{i}, \mathbf{R}_{l}, \mathbf{t}_{l}}{\operatorname{argmin}} \sum_{k \in \mathcal{K}_{L} \cup \mathcal{K}_{F}} \sum_{j \in \mathcal{X}_{k}} \rho(E(k, j)) \\ E(k, j) &=\left\|\mathbf{x}_{(\cdot)}^{j}-\pi_{(\cdot)}\left(\mathbf{R}_{k} \mathbf{X}^{j}+\mathbf{t}_{k}\right)\right\|_{\Sigma}^{2} \end{aligned} {Xi,Rl,tl∣i∈PL,l∈KL}E(k,j)=Xi,Rl,tlargmink∈KL∪KF∑j∈Xk∑ρ(E(k,j))=∥∥∥x(⋅)j−π(⋅)(RkXj+tk)∥∥∥Σ2
全局BA是局部BA的特殊情况,所有的关键帧和地图中的点被匹配,除了原点关键帧是固定的。
回环检测分两步,首先,需要检测到并验证一个回环。其次,回环得到纠正,位姿图得到优化。与会发生尺度漂移的单目orbslam相反,双目/深度信息使得尺度是可观测的,几何验证和位姿优化不需要解决尺度漂移问题,是建立在刚体变换而不是相似性上的。
在ORBSLAM2中。我们在位姿图后合并一个全局BA优化来实现优化。这种优化可能非常耗时,因此我们在单独的线程进行操作,这使得系统可以继续创建地图和检测回环。但是,这带来了融合BA优化输出和目前地图状态的挑战。如果在优化进行时发现了新的回环,我们抛弃了优化继续回环,这将重新开始BA优化。当全局BA完成后,我们需要融合更新后的关键帧子集、被全局BA优化后的点与在优化过程中插入的未更新的关键帧和点。这通过使用生成树来传播更新后的关键帧的校正量到未更新关键帧来实现的。未更新的点将被根据校正量进行转换。
ORBSLAM2遵循ORBSLAM中的策略,允许非常频繁地插入关键帧,删去多余的帧。远点和近点的区别允许我们引入关键帧插入的新状态,这在大部分场景都很远的挑战性环境中是非常重要的。在这种环境下,我们需要有足够的近点来准确估计位姿。因此,如果近点的数目下降到 τ t \tau_{t} τt以下,当帧可以创造至少 τ c \tau_{c} τc个近点时,系统会插入一个关键帧。我们凭经验认为 τ t \tau_{t} τt=100和 τ c \tau_{c} τc=70是合理的值。
我们提出一种定位模式,在轻量级的已建图区域长期定位模式下非常有用,只要环境没有显著变化。在这种模式下,局部图和回环线程被停用,相机会持续跟踪,在需要时重定位。在这种模式下,跟踪线程会利用视觉里程计匹配和地图匹配。视觉里程计匹配是现有帧的orb特征和之前帧的3d点之间的匹配。这种匹配在未建图区域是鲁棒的,但是误差会积累。地图匹配会确保无漂的定位。