开始阅读学习ORB-SLAM2的源码了,在这里做个学习记录,另外也是督促自己的学习的更加深入。
前言
首先ORB-SLAM2作为一个完整的slam系统,作者即提供了论文也有对应的源码,它的github主页:
https://github.com/raulmur/ORB_SLAM2
系统包括了单目、双目、rgbd的实现,这里我主要学习单目slam系统,就以单目slam的流程来学习。
另外感谢泡泡机器人提供的有很好的注释版本(吴博):
https://gitee.com/paopaoslam/ORB-SLAM2
一、系统结构
ORB-SLAM2系统的代码非常整齐,简洁,便于阅读,作者将项目做了良好的封装,文件分布如下:
其中src中为slam系统源码,Examples中为对应不同传感器的例程源码,Thirdparty存放的是用到的第三方库,Vocabulary存放的是回环检测中BoW用到的视觉词典;
首先,我们看看怎么来调用ORB-SLAM2,学习一下例程源码mono_tum.cc。
二、mono_tum.cc(单目tum数据集例程)
主体源码,做过修剪:
int main(int argc, char **argv)
{
if(argc != 4)
{
cerr << endl << "Usage: ./mono_tum path_to_vocabulary path_to_settings path_to_sequence" << endl;
return 1;
}
// Retrieve paths to images
vector<string> vstrImageFilenames;
vector<double> vTimestamps;
string strFile = string(argv[3])+"/rgb.txt";
LoadImages(strFile, vstrImageFilenames, vTimestamps);
int nImages = vstrImageFilenames.size();
// Create SLAM system. It initializes all system threads and gets ready to process frames.
ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,true);
// Vector for tracking time statistics
vector<float> vTimesTrack;
vTimesTrack.resize(