1) 只进行运动信息的BA优化:Tracking跟踪线程通过进行每帧图片与局部地图进行特征匹配,实现相机定位;
2) 进行局部BA优化: Local Mapping局部建图线程对局部地图进行管理,并优化;
3)回环检测: Loop Closing回环线程检测回环位置、进行位姿图优化抑制位置、姿态漂移误差;
4)全局BA优化:在位姿图优化结束后,调用此线程进行全局BA优化,以计算最优的结构和运动结果。
单目点:基于两个坐标实现,L表示左目特征点(为了与双目对应)。只在具有多个视角时进行三角化,不提供尺度信息,具有旋转和位移信息。
X m = ( u L , v L ) X_m = (u_L, v_L) Xm=(uL,vL)
双目点:基于三个坐标实现,L表示左目特征点的像素坐标,R表示右目与左目平行方向的坐标。
X s = ( u L , v L , u R ) X_s = (u_L, v_L, u_R) Xs=(uL,vL,uR)
GRB-D双目点:将其输出的图像特征点坐标和深度进行转换,使其与双目相机的坐标描述一致:
u R = u L − f x b / d u_R = u_L - f_xb/d uR=uL−fxb/d
式(3)中fx表示水平焦距,b表示结构光发射器与红外相机的基线距离,d表示深度信息。左右像素坐标差就是实际基线长度在相机中的投影长度。
近双目点:双目特征点的深度小于40倍的基线距离。近点可提供可靠的位移、旋转和尺度信息,可进行可靠的三角化求深度信息。
远双目点:双目特征点的深度大于40倍的基线距离。远点可提供可靠的旋转,但是位移和尺度信息较弱,只有存在多个视角的远点观测时才进行三角化求深度。
采用g2o中的LM方法进行BA优化,主要涉及三种:
motion-only-BA : 通过最小化“匹配到的世界坐标系中的3D点”和“当前图像中的特征点”的重投影误差,优化相机的姿态和位移。
local BA:通过最小化一系列“关键帧(包含共视关键帧和非共视关键帧)中可见的共视3D点”和“每张关键帧图像中共视3D点对应匹配的特征点图像坐标”的重投影误差,优化相机的姿态、位置和地图上的3D点。
full BA:全局BA是局部BA的特殊情况,此时除了初始关键帧外,所有的关键帧和地图3D点均进行优化。
回环步骤:
全局BA:由于全局优化比较耗费时间,因此将其单独作为一个线程,在优化的同时系统还可以进行地图创建和回环检测。当检测到新的回环位置时,若正在进行全局优化,则取消当前的全局优化,因为此时又会重新启动全局优化。
ORB-SLAM2遵循单目ORB-SLAM中的的策略,频繁插入关键帧,且增加一些额外多余的关键帧(为了鲁棒性)。
近点和远点的区别引入了一个新的场景需要去考虑如何添加关键帧。当场景中一大部分都距离双目相机较远时,此时我们需要大量的近点进行精确的位移估计。所以增加如下的关键帧添加策略:
若图像中跟踪到的近点数量小于100,但近点数量同时大于70时,便将其也加入到关键帧序列中。
应用场景: 环境不发生较大改变,已经建好已知地图的区域,需要进行轻量级的长时间定位。
功能:局部建图和回环线程关闭,基于摄像头运行视觉里程计,必要的时候可进行重定位。
工作模式: