[论文笔记]ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras

ORB-SLAM 2

一、 introduction

单目的缺点:

  • 未知地图的尺度
  • 需要初始化地图
  • 会有尺度漂移
  • 难以处理纯旋转

本文的贡献:

  • 完成结合单目、双目、RGBD的slam系统,包含回环检测、重定位、地图重用功能。
  • 证明使用BA的精度高于ICP和最小化深度误差。
  • 使用近处或远处的双目点和单目观测,取得的精度高于当前最优的双目SLAM。
  • 使用轻量级的定位模式,当无法建图时,能够有效的重用地图。

二、系统介绍

1. ORB SLAM

整个系统都是基于ORB SLAM做改进的,首先介绍了以下ORB SLAM,这里的介绍比ORB SLAM里写的简洁多了。

2. 单目、近双目和远双目特征点

系统是依赖于输入图像抽取的特征点运行的,与哪个传感器关系并不大。根据特征点的获取方式(传感器),分成双目特征点和单目特征点。

2.1. 双目特征点

由双目相机和RGBD相机获取的图像,都抽取成双目特征点。其定义是: x s = ( u L , v L , u R ) x_s=(u_L,v_L,u_R) xs=(uL,vL,uR)。其中, u L , v L u_L,v_L uL,vL是特征点的左图坐标, u R u_R uR是相应的右图水平坐标,根据左右两图的坐标,对其三角化,再按照其深度,在分成近点和远点。

对于双目相机

首先对一帧的左右两幅图像都提取特征点,对左图中的每个特征点,在右图中寻找它的匹配。

对于RGBD相机

先抽取RGB图像的特征点,得到坐标 u L , v L u_L,v_L uL,vL,根据这个坐标,找到对应深度图的深度 d d d,计算出伪 u R u_R uR

u R = u L − f x b d u_R=u_L- \frac{f_xb}{d} uR=uLdfxb

其中, f x f_x fx是其焦距(? horizontal focal length), b b b是结构光发射器和红外相机直接的距离,这里取8cm。

近点和远点

得到双目特征点坐标,对其三角化,得到深度值。若深度值小于基线长度的40倍,则是近点。否则是远点。(这里判断用的深度是三角化得到的深度吗?原文说是associated depth

对于近点,可以安全的三角化,得到精确深度值、尺度、平移、旋转信息。

对于远点,只能得到旋转信息,尺度和平移信息很少。当这个远点有多个视图时,才三角化它(当作单目了?)。

2.2. 单目特征点

单目特征点定义为: x m = ( u L , v L ) x_m=(u_L,v_L) xm=(uL,vL)。它必须保证和其他所有ORB特征点一致,否则,对于多目相机捕捉到的同一点的特征点,将不匹配,对于RGBD相机,则会出现非法的深度值。(是这个意思吗??怕这个特征点对应的真实点,和其他与这个真实点对应的特征点不匹配?

单目特征点只能在多视角的条件下三角化,并且只提供旋转和平移信息,不提供尺度信息。

3. 系统引导

因为使用了双目和RGBD,就不需要像单目系统一样额外初始化了,只要一帧,只要一帧,不要998,就能初始化!(:з)∠)

4. BA

系统共使用了三种BA:

4.1. motion-only BA

用于优化某一帧的相机位姿: R , t R,t R,t,用于tracking线程中。

方式是最小化重投影误差,计算当前帧的所有匹配中,其关键点和地图点的重投影误差。其中,图像关键点可能是单目关键点(2维),或双目关键点(三维),地图点是三维。因此,需要使用 π ( . ) \pi (.) π(.)函数,将地图点转化维与关键点相同的形式。

4.2. local BA

用于优化局部的一组关键帧 K l K_l Kl的位姿 R l , t l R_l,t_l Rl,tl,及其观测到的所有地图点的坐标 X i X_i Xi。用于local mapping线程。

其中,局部的定义是,一组covisible 的关键帧。其余所有能够观测到 X i X_i Xi,但不属于 K l K_l Kl的关键帧,也用于重投影误差的计算,但其 R , t R,t R,t固定。

4.3. Full BA

用于闭环检测之后,优化全局所有的关键帧的位姿,和所有地图点的坐标。除了初始关键帧,这是为了消除随机化(不懂)。

5. 闭环检测和全局BA

闭环检测分两个步骤:一是检测并验证闭环,二是根据闭环优化位姿图。

单目SLAM存在尺度不确定性,但双目和RGBD不存在这个问题,因此在几何校验和位姿图优化时不用考虑尺度漂移,并且,单目的位姿图优化是根据相似性矩阵,但多目和RGBD是根据刚体变换。

在位姿图优化后,还使用了一个全局BA,但这个全局BA很耗时,所以用一个单独的线程运行它。

这就存在一个问题,万一再全局BA时,又检测出来新的闭环咋办。实行的方案是,停止当前的全局BA,closing新检测到的闭环,然后再执行一次全局BA。

问题又来了,全局BA执行完之后,其他线程又插入了新的关键帧和地图点,这些是没优化过的,要怎么把之前优化过的关键帧和地图点,与这些新的没优化过的结合起来。

这里使用的方案是propagating the correcion of updated keyframes to non-updated keyframes through the spanning tree。大概意思是,通过MST,把优化过的关键帧,用来的变换,用在未优化的关键帧上?(矩阵累乘?)

6. 关键帧插入

关键帧插入的方式与ORB SLAM相同,但针对双目关键点的远点/近点情况,加入了一个新的判定条件:

若当前追踪的近点少于 π t \pi _t πt,并且这帧能生成至少 π c \pi_c πc个关键点,则把它当作新的关键帧插入。

这是针对于经常出现的,远景条件,这种情况下摄像机和场景离得很远,需要大量的近点保证估计的准确性。

7. 定位模式

新增一个定位模式,用于在地图建好、环境不变的场景下长期运行。这个模式中,只运行tracking线程,loacl mapping和loop closing停用。

在已知地图中,相机可以不断通过重定位来自身定位,这部分是当前帧特征点与地图点匹配,可以确保无累计漂移。在未知地图中,当前帧特征点与上一帧双目或RGBD创建的3D点匹配,来进行相机定位,但存在累积漂移。

三、 实验结果

1. KITTI Dataset

这个数据集是双目的数据, 含有闭环。

使用两种评测标准:

  • absolute translation RMSE t a b s t_{abs} tabs
  • average relative translation t r e l t_{rel} trel and rotation r r e l r_{rel} rrel errors

相比于ORB SLAM无法用于高速路上若纹理、低帧率的测试数据,ORB SLAM2能够追踪,得益于:一、双目只用一帧初始化,避免了单目初始化的信息浪费。二、双目不需要考虑尺度漂移。

2. EuRoc Dataset

双目数据,存在闭环,有ground truth。

ORB SLAM2能够检测闭环并重用地图。

评价标准是RMSE

3. TUM RGB-D Dataset

RGBD数据。

你可能感兴趣的:(SLAM,论文笔记)