1、Introduce
文章的贡献:
- ORBLAM1的单目基础上增加了对于双目与RGBD相机的支持。
- 使用BA来实现比ICP与光度与深度最小化更好的效果
- 通过使用远近的双目点与单目的观察来实现比一般的直接法更加精确的SLAM。
- 一个轻量化的定位模式
2、ORBSLAM2
从全局图中可以看出,ORBSLAM2分为三个主要线程Tracking,Mapping,Loop closure。然后在Loop Closure之后还有一个full BA的线程。
A. Monocular, Close Stereo and Far Stereo Keypoints
对于传进来的image,在提取完关键点之后就不会再保存在系统当中,系统只会保存关键点。同时被提取出来的关键点会被分类为远点和近点。
Stereo 和 RGBD的关键点保存的方式都是一样的,关键点保存格式为
(
u
l
,
v
l
,
u
r
)
(u_{l},v_{l},u_{r})
(ul,vl,ur)
Stereo keypoints
对于stereo会对左右两边都提取ORB关键点,然后使用左目去匹配右目。匹配成功的右目会保存其列坐标(因为左右目是平行的,只需要列坐标)
对于RGBD会创建一个虚拟的右目,像Stereo那样保存关键点。由于RGBD可以直接获得深度信息,所以使用下面公式:
u
l
=
u
r
−
f
x
b
/
d
u_{l} = u_{r} - f_{x}b/d
ul=ur−fxb/d
来构造出右目的列坐标。(详见双目相机原理)
对于深度超过40倍基线的关键点,会被定义为远点,反之则是近点。近点会被直接转化为map中的point,加入到Stereo Keypoints 的分类当中,而近点则是加入到MonoKeypoints 的分类当中去。
远点和近点的区别在于远点不能很好的提供scale和translation信息(类似于单目的尺度判断比较难)。
B. System Bootstrapping
会将第一个帧作为关键帧并且将其坐标作为世界坐标的原点。在后续的优化中也不会对他进行。
C. Bundle Adjustment with Monocular and Stereo Constraints
在两帧之间的Track,会使用Motion BA来实现在mapping模块中,会维护一个滑动窗口,并在建图时候进行local BA。在Loop Closure 之后,会进行一个full BA。
Motion-only BA
Local BA
会对滑动窗口中的所有点和关键帧都进行优化
Full BA
对除了初始帧之外的所有帧进行优化
D. Loop Closing and Full BA
在loopClosure 之后插入了full BA。所以在检测到loopClosure 之后,会立刻停止local BA,并且进行回环处理,然后开始一次full BA。
当full BA完成的时候,由于full BA执行的过程中也是在Track 的,所以需要将新生成的point 与关键正与BA优化之后的点重新整合起来。
E. Keyframe Insertion
如果检测到与上一个关键帧的close point 少于T1个同时本帧检测到的关键帧大于T2个的话,就会创建一个新的关键帧。
F. Localization Mode
通过比当前帧的ORB关键点和上一帧创建出来的3D点,来实现Track。