ORB-SLAM2 源码解读
流程图
初始流程
首先调用mono_tum.cc 运行程序
有以下几块内容
- LoadImages (const string &strFile, vector &vstrImageFilenames,vector &vTimestamps);读取影像数据
- ORB_SLAM2::System SLAM (argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true); 系统的初始化、建立线程
- SLAM.TrackMonocular(im,tframe); 将每张影像传入单目处理函数
- vTimesTrack[ni]=ttrack; 计算处理所用的时间
- 等待加载下一帧
- 结束
- 将相机轨迹写入KeyFrameTrajectory.txt
输入参数有4个
Usage: ./mono_tum path_to_vocabulary path_to_settings path_to_sequence
分别对应:调用的程序、词袋、相机内参和特征提取器的参数 影像数据
调用的函数有3个
1、LoadImages (const string &strFile, vector &vstrImageFilenames,vector &vTimestamps);参数为:影像数据的文件名,输出为 时间戳和对应的影像名。
2、 ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true); 参数为:词袋、相机内参和特征提取器的参数、单目/双目/RGB-D,是否启动显示界面。
3、SLAM.TrackMonocular(im,tframe); 参数为 影像和对应的时间戳。
系统流程
接下来进入到system.cc,才算是真的进入到系统中。
首先,这个文件中有4个函数
- System
- TrackStereo
- TrackRGBD
- TrackMonocula
System是SLAM系统的构造函数,包括所有功能模块和所有线程的初始化,而TrackStereo、TrackRGBD和TrackMonocular分别是双目、RGBD和单目的数据入口。这里对应着mono_tum.cc的流程,先调用System初始化功能和线程,接着调用对应的单目入口函数TrackMonocula,就可以执行ORB-SLAM的流程了。
1、System构造函数介绍
1)初始化词袋
mpVocabulary = new ORBVocabulary();
bool bVocLoad = mpVocabulary->loadFromTextFile(