单目的缺点:
本文的贡献:
整个系统都是基于ORB SLAM做改进的,首先介绍了以下ORB SLAM,这里的介绍比ORB SLAM里写的简洁多了。
系统是依赖于输入图像抽取的特征点运行的,与哪个传感器关系并不大。根据特征点的获取方式(传感器),分成双目特征点和单目特征点。
由双目相机和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是相应的右图水平坐标,根据左右两图的坐标,对其三角化,再按照其深度,在分成近点和远点。
首先对一帧的左右两幅图像都提取特征点,对左图中的每个特征点,在右图中寻找它的匹配。
先抽取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=uL−dfxb
其中, f x f_x fx是其焦距(? horizontal focal length), b b b是结构光发射器和红外相机直接的距离,这里取8cm。
得到双目特征点坐标,对其三角化,得到深度值。若深度值小于基线长度的40倍,则是近点。否则是远点。(这里判断用的深度是三角化得到的深度吗?原文说是associated depth)
对于近点,可以安全的三角化,得到精确深度值、尺度、平移、旋转信息。
对于远点,只能得到旋转信息,尺度和平移信息很少。当这个远点有多个视图时,才三角化它(当作单目了?)。
单目特征点定义为: x m = ( u L , v L ) x_m=(u_L,v_L) xm=(uL,vL)。它必须保证和其他所有ORB特征点一致,否则,对于多目相机捕捉到的同一点的特征点,将不匹配,对于RGBD相机,则会出现非法的深度值。(是这个意思吗??怕这个特征点对应的真实点,和其他与这个真实点对应的特征点不匹配?)
单目特征点只能在多视角的条件下三角化,并且只提供旋转和平移信息,不提供尺度信息。
因为使用了双目和RGBD,就不需要像单目系统一样额外初始化了,只要一帧,只要一帧,不要998,就能初始化!(:з)∠)
系统共使用了三种BA:
用于优化某一帧的相机位姿: R , t R,t R,t,用于tracking线程中。
方式是最小化重投影误差,计算当前帧的所有匹配中,其关键点和地图点的重投影误差。其中,图像关键点可能是单目关键点(2维),或双目关键点(三维),地图点是三维。因此,需要使用 π ( . ) \pi (.) π(.)函数,将地图点转化维与关键点相同的形式。
用于优化局部的一组关键帧 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固定。
用于闭环检测之后,优化全局所有的关键帧的位姿,和所有地图点的坐标。除了初始关键帧,这是为了消除随机化(不懂)。
闭环检测分两个步骤:一是检测并验证闭环,二是根据闭环优化位姿图。
单目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,把优化过的关键帧,用来的变换,用在未优化的关键帧上?(矩阵累乘?)
关键帧插入的方式与ORB SLAM相同,但针对双目关键点的远点/近点情况,加入了一个新的判定条件:
若当前追踪的近点少于 π t \pi _t πt,并且这帧能生成至少 π c \pi_c πc个关键点,则把它当作新的关键帧插入。
这是针对于经常出现的,远景条件,这种情况下摄像机和场景离得很远,需要大量的近点保证估计的准确性。
新增一个定位模式,用于在地图建好、环境不变的场景下长期运行。这个模式中,只运行tracking线程,loacl mapping和loop closing停用。
在已知地图中,相机可以不断通过重定位来自身定位,这部分是当前帧特征点与地图点匹配,可以确保无累计漂移。在未知地图中,当前帧特征点与上一帧双目或RGBD创建的3D点匹配,来进行相机定位,但存在累积漂移。
这个数据集是双目的数据, 含有闭环。
使用两种评测标准:
相比于ORB SLAM无法用于高速路上若纹理、低帧率的测试数据,ORB SLAM2能够追踪,得益于:一、双目只用一帧初始化,避免了单目初始化的信息浪费。二、双目不需要考虑尺度漂移。
双目数据,存在闭环,有ground truth。
ORB SLAM2能够检测闭环并重用地图。
评价标准是RMSE
RGBD数据。