視覺SLAM(一) 視覺SLAM框架

2021-10-05 11:39:42 字數 2516 閱讀 9994

主要參考書目是高翔博士的《視覺slam十四講》,中間會記錄一些個人實踐經驗和思考。

slam伴隨著機器視覺發展和機械人導航已經相對成熟,形成了合理高效的基本框架。

主要包含:

感測器資料、前端視覺里程計、後端優化、回環檢測、建圖。

採集根據不同應用場景和需求進行選擇,主要有如下幾種感測器:

也就是單獨乙個攝像機,應用於手機ar場景。

單目第乙個問題是沒有畫素點的深度資訊,在dso初始化環節中,通過小位移假設對有效的畫素點進行試探掃瞄,進而對深度初始化。orb-slam中初始化對特徵點匹配進行,運homography和fundamental matrix,選擇較好的運算位姿,最後進行full bundle adjustment。

單目第二個問題是尺度不確定,測試過單目dso,建圖會出現突然場景變大好多倍的現象。

雙目的好處是受光線影響較小在戶外場景可以使用,按照場景可以選擇不同基線距離和解析度的雙目相機。解析度高時,運算量會非常大,並且目前雙目匹配優化比較消耗記憶體或視訊記憶體;解析度低時,遠處準確度會變差;基線小時,遠處準確率難以保證;基線大時,近處測量不到,增大視差掃瞄範圍可部分解決,但價效比不高,64畫素與128畫素,可能只是增加近處0.5m的深度檢測範圍,但是視差運算時運算量會增加近一倍。

需要根據應用場景特點,在解析度和基線引數上權衡。

市面上目前消費級雙目相機有

zed(一代):解析度高,深度由sdk優化過,速度和精度均為頂尖水平,需要在帶有gpu的主機上運算,深度範圍:0.3-25m(實際10m處精度已經比較差了),視場角大:90x60,捲簾快門:對快速運動物體會有拖影,效果可能比較差。

realsense(d435):基線距離短,intel的產品!所以片上運算出深度資料,不必消耗太多計算機資源,但是實際測試3m以外,測量誤差幾乎超過20cm了。

自主設計雙目相機

匹配演算法主要有opencv——bmsgbm,開源的有libsgm;opencv的bm有gpu實現,但是無亞畫素級,遠處深度直接分段,幾乎可以認為gpu的bm演算法不可用(截至目前)。sgbm運算效果很好,但是運算速度太慢,無gpu版本,github上有個國內的大佬實現了sgbm的gpu版本,只支援640*480解析度,測試效果與cpu運算結果幾乎一致!但是工程使用中,還是不太敢用,畢竟沒有深入研究**,怕有bug(逃。。。)。libsgm是日本的fixstar做的開源版本具有gpu版本的雙目匹配演算法,一直都有維護,youtube上看該團隊做的專案很高大上,也研究並改動過源**,效果雖然沒有sgbm好,但是運算效率高且穩定,支援64\128畫素視差,居家必備良心推薦。

雷射雷達目前多應用於無人車駕駛,**昂貴,點雲稀疏。但是好在測量結果穩定性好、測量深度範圍大,對於低反射率或者室外陽光下環境效果也保持穩定、準確。僅測評過dji的livox mid-100,室內外測量效果沒得說,棒!**也比較親民,只要9999!但是,機械式單點掃瞄速度較慢,100ms的取樣週期,相對比較稀疏,1s時很稠密,對於具體應用場景需要權衡。多線雷射雷達取樣周期短,但就是太貴,造價不降下來的話,產品難以大量推廣應用,預研、demo都沒問題,量產產品就很心疼了。

基於各種視覺導航的都會在特定場景下失效,比如少紋理時,所有基於視覺的都無法正常跟蹤。慣性導航作為資料融合補充項,在視覺失效的場景下,能夠提供粗略的位姿資訊。

實際用於定位導航的產品,幾乎都需要增加imu作為補充,提高產品環境適應性。但是視覺slam中暫時沒有研究這塊內容,開源專案vins很好的對視覺和imu進行融合,大神做的工作很充分了,值得學習研究。

根據視覺特徵,對相鄰幀間的位姿進行擬合運算。不同方式,最終結果都是完成相機平移、旋轉的運算。

通過大量觀測點的擬合,最終針對平移、旋轉6個引數進行尋優,往往得到結果準確度是比較高的。但準確度再高,也會有誤差,小誤差累計起來,會對建圖準確性產生很大影響。為了得到準確的建圖結果,vo環節得到的位姿都輸入到優化器內,當優化器收到回環檢測資訊時,即可對所有中間輸入位姿全域性優化,減小累計誤差對建圖準確性的影響。

通過關鍵幀的特徵匹配,檢測到相機回到之前走過的場景,此時就可以作為先驗知識,使用優化器去將之前的位姿人為閉合。

這裡沒有專門研究過,想到了兩個問題:

1.如果遇上相似場景,導致匹配誤報,那場景豈不就大錯特錯了,是不是就得增加其他手段進行干預,比如gps?對場景進行關聯,限定當前幀匹配範圍?

2.即使使用bow,對特徵匹配進行加速,當場景很大時,關鍵幀就會變得非常多,此時匹配的速度一定會變慢,並且誤匹配的概率也會增加。應該也是需要分區域,限定匹配範圍。

根據需求,構建相應性質的地圖。

側重於定位時,多採用稀疏的路標地圖。

側重於路徑規劃自主導航時,則需要稠密的地圖,二維grid、三維voxel。

側重於實景建模時,需要對三維地圖進一步網格化。

關於感測器資料就在本章完成討論,對於視覺里程計、後端優化、回環檢測、建圖後續單獨分章節記述。

the end.

視覺SLAM框架式整理

自己翻譯並整理的,若有誤麻煩指出來,謝謝!利用平台操作slam系統採集的資料,構建周圍世界的地圖,並在地圖中同時定位自身。平台上搭載的感測器具有多種功能,如單目攝像頭 雙目攝像頭 立體攝像頭 rgb d攝像頭 雷射雷達等。slam技術在計算機視覺和機械人領域中占有重要地位。slam 系統大多基於小區...

視覺SLAM 視覺SLAM相關開源演算法總結

第乙個實時 單目slam系統,基於ekf優化。單目,只有tracking,進行了有效的特徵點對的匹配。之後有enft slam.適用於各種各樣的相機,除了常見的單目,雙目,rgb d的分類,還適用於透視 魚眼甚至自己設計的相機。通過使用apriltag基準標記實現slam 76 提出了一種基於李代數...

視覺SLAM習題

視覺slam習題彙總 持續更新 ch3矩陣提取 主要是利用 block 對應習題提取左上角3x3矩陣 include include includeusing namespace std int main int argc,char argv 按照官網給出的計算方法,編譯出現 error eigen...