視覺SLAM模塊:
傳感器數據------->前端視覺里程計------->后端非線性優化------->建圖
| 回環檢測 |
1、傳感器信息讀取:讀取相機的圖像信息和進行預處理。
2、視覺里程計VO(又稱為前端):估算相鄰圖像間相機的運動,以及局部地圖的樣子。
3、后端優化:接受不同時刻視覺里程計測量的相機位姿,以及回環檢測信息,對它們進行優化,得到全局一致的軌跡和地圖。
4、回環檢測:判斷機器人是否到達過先前的位置。若檢測到回環,它會把信息提供給后端進行處理。
5、建圖:根據估計的軌跡,建立與任務要求對應的地圖。
如果把工作環境限定在靜態、剛體、光照變化不明顯、沒有人為干擾的場景,那么SLAM系統已經相當成熟了。
視覺里程計VO:關心的是相鄰圖像之間的相機運動。
圖像在計算機中只是一個數值矩陣(矩陣中代表着什么東西是機器學習要解決的問題)
在視覺SLAM中,我們只能看到一個個像素點,知道它們是某些空間點在相機的成像平面投影的結果。故定量的估計相機的運動,必須先了解相機與空間點的幾何關系。
VO通過相鄰幀間的圖形估計相機的運動並恢復場景的空間結構。“里程計”:它與實際的里程計一樣,只計算相鄰時刻的運動,和再往前的過去的信息無關。
飄移:僅通過視覺里程計(只估計兩個圖像間的運動)來估計軌跡,將不可避免地出現累計漂移。漂移將導致無法建立一致的地圖,為了解決漂移需要兩種技術:后端優化和回環檢測。
回環檢測負責把“機器人回到原始位置”的事情檢測出來,后端優化根據該信息校正整個軌跡的形狀。
后端優化:主要指處理SLAM過程中噪聲的問題。要考慮:①如何從這些帶有噪聲的數據中估計整個系統的狀態。②這個狀態估計的不確定性有多大(最大后驗概率估計)這里的狀態包括機器人自身的軌跡,也包含地圖。
(傳感器帶有一定的噪聲)要考慮的問題:①估計噪聲有多大,②噪聲是如何從上一時刻傳遞到下一時刻的,③我們對於當前的估計有多大的自信。
在SLAM框架中,前端給后端提供待優化的數據+這些數據的初始值,前端與計算機視覺更為相關一些。
后端負責整體的優化過程,它往往面對的只是數據。后端與濾波和非線性優化算法相關。
為了解決slam問題,我們需要狀態估計理論,把定位和建圖的不確定性表達出來,然后采用濾波器或非線性優化估計狀態的均值和不確定性(方差)。
回環檢測:主要是解決位置估計隨時間漂移的問題。
機器人可以通過判斷圖像間的相似性來完成回環檢測。實質上是一種計算機圖像數據相似性算法。
在檢測到回環后,把A與B是同一個點的信息告訴后端優化算法,后端根據這些信息把軌跡和地圖調整到符合回環檢測結果的樣子。這樣,如果有充分並且正確的回環檢測,就可以消除累計誤差,得到全局一致的軌跡和地圖。
建圖:對於建圖,沒有一個固定的形式和算法。地圖的形式隨SLAM的應用場合而定。大體上分為:度量地圖、拓撲地圖。
度量地圖強調精確地表示地圖中物體的位置關系,通常用稀疏和稠密對其分類。
稀疏地圖進行了一定的抽象,不需要表達所有的物體。選擇一部分具有代表意義的東西稱之路標。由路標組成的地圖,不是路標的部分可以忽略掉。對於定位可以用稀疏地圖。
稠密地圖着重於建模所有看到的物體,對於導航需要稠密地圖。稠密地圖往往是按照某種分辨率,由許多個小塊組成。對於二位度量地圖是許多小格子,三維是小方塊。
一般,一個小塊具有:占據,空閑,未知三種狀態,以及該表格內是否有物體。
當查詢某個空間位置時,地圖能夠給出該位置是否可以通過的信息。
拓撲地圖:
拓撲地圖強調地圖元素之間的關系。它是一個圖,由節點和邊組成,只考慮節點間的連通性。放松了對於精確位置的要求,去掉了地圖的細節問題,是一種更為緊湊的表達方式。拓撲地圖不擅長表達具有復雜結構的地圖。如何對於地圖進行分割形成節點和邊,如何使用拓撲地圖進行導航與路徑規划仍是值得研究的問題。