在slam中,前端負責提供軌跡與地圖的初值,後端負責對軌跡與地圖進行優化。在小範圍的環境中,前端與後端便已經夠用了。但是當活動的範圍增加以後,這一類只依靠內部感測器(相機、imu等)的定位方法不可避免的會出現累積誤差,這時因為雖然我們可以使用ba等優化方式進行優化,但是這種優化方式畢竟還是區域性的(比如某乙個位姿下會有大部分的地圖點是看不到的)。
拿視覺slam來說,雖然對於當前位姿的估計我會使用ba進行優化,但是這個ba一般是基於區域性地圖的優化,首先必然會存在誤差(ba只是盡量減小它),然後以後某一時刻的位姿會依賴此處的位姿結果進行估計,於是累積誤差就出現了。
一般累積誤差最常見的是位姿的累積誤差,在單目視覺中,還會出現尺度的累積誤差。
針對上述的累積誤差問題,我們可以使用回環檢測來修正。一般回環檢測的步驟如下:
檢測到回環的發生
計算回環侯選幀與當前幀的運動
驗證回環是否成立
閉環
回環檢測可以修正累積誤差,並且在各種圖優化模型中,加入回環的約束可以有效的提高優化結果的精度。檢測回環的方法很多。樸素的方法:
最簡單的方法是對任意兩幅影象都做一遍特徵匹配,根據正確匹配的數量確定哪兩幅影象存在關聯。這種方法樸素但是有效,缺點是任意兩幅影象做特徵匹配,計算量實在太大,因此不實用。
隨機抽取歷史資料進行回環檢測,比如在nn幀中隨機抽5幀與當前幀比較。時間效率提高很多,但是抽到回環機率不高,也就是檢測效率不高。
系統的方法:
基於里程計幾何關係的方法
基於外觀的方法
目前最廣泛使用並且最有效的方法是基於外觀的一種方法,使用詞袋模型進行回環檢測使用詞袋模型,對於任意兩張我們都可以給出乙個相似性評分,但是有些環境本身就很相似,比如每間辦公室中的桌椅可能款式一樣,使得任意兩幅影象之間的相似度都挺高的。考慮這種情況,我們通常會取乙個先驗相似度
一般我們會假設,如果當前幀與之前某關鍵幀的相似度超過當前幀與上乙個關鍵幀相似度的3倍,我們才會認為可能存在回環。這樣處理可以避免引入絕對的相似性閾值。由於上面採用的相似性評分方式,如果我們在選取關鍵幀時選的很近,會使得兩個相鄰關鍵幀之間相似性太高,這樣歷史中的回環會很難檢測出來。所以用於回環檢測的關鍵幀最後是稀疏一些,彼此不太相同,同時又能涵蓋整個環境。如果我們的機械人將第1幀與第n幀檢測出了回環,那麼很有可能接下來的第n+1幀、第n+2幀都會和第1幀構成回環。但是確認第1幀與第n幀的回環對整個軌跡優化幫助很大,接下來的第n+1幀與第1幀的回環幫助就沒那麼大了。因為我們之前已經消除了累積誤差,更多的回環帶來的幫助不會更大。此時,我們通常把相近的回環聚成一類,使得演算法不要檢測同一類的回環。
使用詞袋的回環檢測完全依賴外觀,因此會出現由於外觀相似而出現的錯誤檢測(比如酒店裡布置完全一樣的兩件客房)。所以在回環檢測後,我們會進行驗證。
驗證方法很多,比如
時間一致性檢測。設立回環的快取機制,認為單次檢測到的回環不足以構成良好的約束,而是在一段時間內一直檢測到的回環才是正確的回環。
空間一致性檢測。對回環檢測到的兩幀進行特徵匹配,估計相機運動。再將運動放到之前的位姿圖中檢測是否出入過大。
詞袋模型,本身是一種非監督的機器學習過程(基於樹結構的聚類,數結構加速查詢)。而回環檢測本身是乙個分類問題,只是這個分類問題是一種稠密的分類,分類類別近似於連續變數。
由於目前基於詞袋模型的物體識別已經明顯不如神經網路了,而回環檢測又是一項相似的問題,之後這部分的工作也許可以嘗試使用深度學習來替換。
全景視覺空間直線檢測 視覺SLAM深度解讀
視覺slam是什麼?視覺slam主要是基於相機來完成環境的感知工作,相對而言,相機成本較低,容易放到商品硬體上,且影象資訊豐富,因此視覺slam也備受關注。目前,視覺slam可分為單目 雙目 多目 rgbd這三類,另還有魚眼 全景等特殊相機,但目前在研究和產品中還屬於少數,此外,結合慣性測量器件 i...
視覺slam 精簡入門(中)
代表演算法有kinectfusion kintinuous voxel hashing dynamicfusion vslam 的代表演算法有 orb slam svo dso 代表演算法有 ekf msckf preintegration okvis 等 效能上大致可以認為 sift surf o...
雷射slam 雷射SLAM與視覺SLAM的特點
雷射slam與視覺slam的特點 目前,slam技術被廣泛運用於機械人 無人機 無人駕駛 ar vr等領域,依靠感測器可實現機器的自主定位 建圖 路徑規劃等功能。由於感測器不同,slam的實現方式也有所不同,按感測器來分,slam主要包括雷射slam和視覺slam兩大類。其中,雷射slam比視覺sl...