前言
在LSD-SLAM深入學習(2)中我們已經對算法進行分析,此處假設讀者對於ros的基本操作都已經很熟悉,而且已經編寫了一定量的的代碼,我們直接上干貨。此處分析的程序如下
main_live_odometry.cpp,這個可以實時讀取視頻的主函數
個人理解錯誤的地方還請不吝賜教,轉載請標明出處,內容如有改動更新,請看原博:http://www.cnblogs.com/hitcm/
如有任何問題,feel free to contact me at robotsming@gmail.com
主函數
XInitThreads();用於多線程顯示imshow();
實時數據流參考下面的,利用每一張圖片的可以參考main_on_images.cpp
然后划定輸入輸出,把輸入輸出傳遞到一個slam對象中去。
monoodometry初始化中開啟了下面的線程,mapping、constraint以及optimization
tracking線程
要開啟其他線程,完成tracking的任務。Tracking的主要目的是配准兩幅圖,得到位姿變化。
相對位姿可以通過最小化方差歸一化的光學誤差來計算。地圖剛開始會隨機進行深度信息的初始化,然后才能進行跟蹤幀。
跟蹤幀的任務如下
這個是se3的tracker,執行trackframe的任務……函數比較大,也很重要,主要求解李群下面的問題。
map線程
具體的doMappingIteration()內容如下
Mapping的很多工作都是在下面的updatekeyframe函數中實現的……
一個很重要的函數是dolinestereo,就是在極線上進行立體匹配。
constrait線程
optimization線程
改變bool變量doFinalOptimization的值是在最后完成的,和其他線程沒關系的……也就是采集不到新的圖時……













