这篇博文主要是梳理ORBSLAM2的流程,对于细节暂时不会很详细的描述(之后的博文会深究细节),且本博文暂时只描述ORBSLAM2中的Monocular(单目)情况。
在ORBSLAM2中,主要的三个线程是Tracking、LocalMapping、LoopClosing。三个线程的创建都是在System.cpp中,也就是在System类中的构造函数中创建了这三个线程。
以mono_tum.cc文件为例子,我们从main函数开始看。
1、首先构造System对象,对象名叫SLAM。正如上面所言,构造System之后,便创建了Tracking、LocalMapping、LoopClosing三个线程。
2、接下来便是一帧一帧地读取数据集中的图像,调用SLAM对象中的TrackMonocular()函数。
3、TrackMonocular()函数调用GrabImageMonocular()函数,在GrabImageMonocular()中,将第二步读取的图像转化为灰度图,并用该图像创建了mCurrentFrame对象,该对象由Frame类所构造的。调用Track()函数。
Track()函数便是Tracking线程中精髓所在。接下我们看Track()函数。
1、初始化,选取特征点匹配很好的相邻两帧进行初始化,具体细节另一篇博客再说,
2、跟踪,Track有TrackWithMotionModel()、TrackReferenceKeyFrame()、Relocalization(),这三个函数分别对应不同情况
下面以TrackReferenceKeyFrame()为track方式说明ORBSLAM2的流程。
说明下示