ORB0-SLAM2 system.h 阅读

一.构造SLAM初始系统 

    ORB_SLAM2::System SLAM(argv[1],argv[2],ORB_SLAM2::System::STEREO,true)

初始化SLAM系统主要在 System.cc中实现,其中在在System中:

1.设置相机类型

2.读取参数文件 cv::FileStorage fsSettings(strSettingsFile.c_str(), cv::FileStorage::READ);

3.加载字典 bool bVocLoad = mpVocabulary->loadFromTextFile(strVocFile);

4.创建关键帧数据库    mpKeyFrameDatabase = new KeyFrameDatabase(*mpVocabulary);

5.创建地图  mpMap = new Map();    

6.创建两个显示窗口     

    mpFrameDrawer = new FrameDrawer(mpMap);
    mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);

7.初始化三个线程,其中track线程在主函数的loop 中,localmapping  和loopcloosing 在并行的线程中。

  //Initialize the Local Mapping thread and launch
    mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR);
    mptLocalMapping = new thread(&ORB_SLAM2::LocalMapping::Run,mpLocalMapper);

    //Initialize the Loop Closing thread and launch
    mpLoopCloser = new LoopClosing(mpMap, mpKeyFrameDatabase, mpVocabulary, mSensor!=MONOCULAR);
    mptLoopClosing = new thread(&ORB_SLAM2::LoopClosing::Run, mpLoopCloser);
8.除了这三个线程 还有 viewer 线程

这个viwer 线程中,   

    //Create Drawers. These are used by the Viewer
    mpFrameDrawer = new FrameDrawer(mpMap);
    mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);

然后

   //Initialize the Viewer thread and launch
    if(bUseViewer)
    {
        mpViewer = new Viewer(this, mpFrameDrawer,mpMapDrawer,mpTracker,strSettingsFile);
        mptViewer = new thread(&Viewer::Run, mpViewer);
        mpTracker->SetViewer(mpViewer);
    }

9.在system中  各个线程的激活,停止存储地图,写入地图中。还有一些改变线程的 状态的初始化

 

//!!!!key:system.cc中 主要是 各种初始化,并且初始化个 bool 变量均为F。主要的函数的是

cv::Mat System::TrackStereo(const cv::Mat &imLeft, const cv::Mat &imRight, const double &timestamp)

输入 图像,   return mpTracker->GrabImageStereo(imLeft,imRight,timestamp);

mpTracker:计算相机位姿,决定是否插入keyFrame,创造地图点,并且当lost的时候rocolization。

 

并且这个函数主要执行的是return mpTracker->GrabImageStereo(imLeft,imRight,timestamp);   从这一步获取tracker 的状态 ,然后改变bool变量的模式,决定 执行的是什么/。

//除了这个函数 就是通过unique_lock<mutex> lock(mMutexMode);   来决定当前的模式,(这里不是太懂,以后看) 

 // 以上整体就是system中的东西,获取图像, TrackStereo -----GrabImageStereo -----track ---

在TrackStereo 中会决定是localmapping  还是onlytracking  。。然后就学习tracking 线程吧。

posted @ 2017-09-05 20:37  小萝、卜  阅读(694)  评论(0编辑  收藏  举报