ORBSLAM2--System類
阿新 • • 發佈:2018-11-04
該類的功能主要是給整個SLAM系統工程進行配置,開啟視覺里程計的跟蹤定位執行緒,地圖構建執行緒,迴環檢測執行緒,觀測器執行緒等。
step1
將配置檔案讀入到記憶體中,儲存到fsSettings變數中
cv::FileStorage fsSettings(strSettingsFile.c_str(), cv::FileStorage::READ);
step2
載入ORB Vocabulary 到mpVocabulary中
mpVocabulary = new ORBVocabulary(); bool bVocLoad = mpVocabulary->loadFromTextFile(strVocFile);
step3
建立關鍵幀資料集
mpKeyFrameDatabase = new KeyFrameDatabase(*mpVocabulary);
step4
建立地圖
mpMap = new Map();
step5
建立觀測器幀的觀測器和地圖觀測器
mpFrameDrawer = new FrameDrawer(mpMap);
mpMapDrawer = new MapDrawer(mpMap, strSettingsFile);
step6
初始化跟蹤執行緒器(主執行緒)
step7
初始化當地地圖執行緒並啟動
mpLocalMapper = new LocalMapping(mpMap, mSensor==MONOCULAR); mptLocalMapping = new thread(&ORB_SLAM2::LocalMapping::Run,mpLocalMapper);
初始化一個mptLocalMapping 執行緒物件。進入Run方法中執行該執行緒,該執行緒不會阻塞主執行緒。
一個可執行的執行緒是在一個多執行緒環境中與其類似的指令同時執行的一系列指令,並且可以共享相同的地址空間。
step8
初始化迴環檢測執行緒並啟動
mpLoopCloser = new LoopClosing(mpMap, mpKeyFrameDatabase, mpVocabulary, mSensor!=MONOCULAR); mptLoopClosing = new thread(&ORB_SLAM2::LoopClosing::Run, mpLoopCloser);
step9
初始化觀測器執行緒並啟動
mpViewer = new Viewer(this, mpFrameDrawer,mpMapDrawer,mpTracker,strSettingsFile);
mptViewer = new thread(&Viewer::Run, mpViewer);
mpTracker->SetViewer(mpViewer);
構造了一個觀測GUI的物件,同時開啟一個對應的執行緒,然後跳到mpViewer物件的Run函式執行觀測器的功能。
然後將Tracking與Viewer執行緒相關聯。
step10
各個執行緒之間建立聯絡,這個功能主要是將一個物件的指標傳遞到另一個物件中的一個成員中,方便一個執行緒中的物件去呼叫另一個執行緒中的物件的成員變數,實現記憶體共享。
mpTracker->SetLocalMapper(mpLocalMapper);
mpTracker->SetLoopClosing(mpLoopCloser);
mpLocalMapper->SetTracker(mpTracker);
mpLocalMapper->SetLoopCloser(mpLoopCloser);
mpLoopCloser->SetTracker(mpTracker);
mpLoopCloser->SetLocalMapper(mpLocalMapper);