[PR-3]ArUco EKF SLAM 擴充套件卡爾曼SLAM
原文有視訊
這篇文章實現了《概率機器人》第10章中提到的EKF-SLAM演算法,更確切的說是實現了已知一致性的EKF-SLAM演算法。
ArUco EKF SLAM
EKF-SLAM一般是基於路標的SLAM系統。本文使用了一種人工路標——ArUco碼。每個ArUco碼有一個獨立的ID,通過PnP方法還可以計算出碼和相機之間的相對位姿。OpenCV中集成了ArUco碼庫,提供了檢測和位姿估計的功能。大家可以參考:
Aruco Marker
首先在房間的地面上貼若干ArUco碼作為路標,然後遙控一個帶有攝像頭+編碼器的機器人在房間內運動。本文的目標就是通過EKF演算法同時估計出這些碼的位置和機器人的位姿。
實驗環境
要實現EKF-SLAM,最關鍵的就是建立運動模型和觀測模型,將這兩個模型直接帶進EKF演算法框架就是EKF-SLAM。EKF-SLAM演算法使用擴充套件的狀態空間:
前3項是機器人位姿,後2N項是 N個路標點的位置。
1. 運動模型
1.1 里程計模型
我比較喜歡採用《自主移動機器人導論》中的里程計模型作為運動模型。具體的,如果t-1時刻機器人的位姿是 ,那麼t時刻的機器人位姿為: 為左右輪系數,把編碼器增量轉化為左右輪的位移, 是輪間距。左右輪位移的增量服從高斯分佈,均值就是編碼器計算出的位移增量,標準差與增量大小成正比。如果t-1時刻機器人位姿的協方差為
是(1)式關於控制)的雅克比:
1.2 EKF-SLAM運動更新
上面說的還是隻考慮機器人位姿的情況,但是SLAM系統還需要考慮路標點。擴充套件路標點之後,運動方程為:
系統狀態的均值 更新利用(5)式,下面看狀態的方差 更新。
是 關於 的雅克比:
是關於 的雅克比:
把(6)式展開看一下:
可以看出,運動更新同時影響了機器人位姿的協方差,以及位姿與地圖之間的協方差。
2. 測量模型
首先解決測量值的問題。雖然可以獲得ArUco碼相對於機器人的6自由度位姿資訊,但是為了與書上的觀測統一,本文還是把相機作為Range-bearing感測器使用,也就是轉換成距離
先說一下如何轉化成距離和角度。下圖是示意圖,碼與相機的相對位姿為,相機與機器人的相對位姿為 ,那麼碼相對於機器人的位姿為 。的平移項和 就是碼的原點在機器人座標系下的座標。轉化成距離資訊就是,角度就是 。這樣就得到了測量值。這裡再做一個近似假設,認為觀測的方差與距離和角度成線性關係:
第 個路標點的觀測模型為:
展開來看:
根據擴充套件卡爾曼濾波,需要求解觀測 相對於的雅克比,實際上一個路標點觀測只涉及到機器人的位姿和這個路標點的座標,組合在一起就是五個量: 。於是,觀測相對於的雅克比是:
由於實際的狀態空間是3+2N維的,要求的觀測雅克比應該是2x(3+2N)維的。對(13)進行轉換得到觀測相對於全狀態空間 的雅克比:
下面就可以按照EKF的框架進行操作了。
其中,
就是由路標點和機器人位姿的均值獲取。對每個觀測到的路標點進行上述操作就完成了觀測更新。
3. 地圖構建
上文所說的操作都是假設路標點的數量是已知的,這個值也可以認為是不知道的,可以邊執行邊加入路標點:當看到一個新的地圖點時就擴充套件狀態空間和協方差。當觀測到一個新的路標點,其觀測為,根據機器人的位姿可以計算地圖點的座標為: 地圖點的協方差為: 是(17)式關於機器人位姿的雅克比: 是(17)式關於觀測 的雅克比: 通過以上各式,算出新路標的均值和協方差,加入到均值向量和協方差矩陣中即可。至此,EKF演算法中所有的模型都已建立完畢。下面給出具體的實施程式碼。
4. 演算法實現
- 全部工程程式碼:
- 我利用Falconbot機器人,採集了兩組實驗資料,大家可以在這裡下載:
5. 參考文獻
《概率機器人》
《自主移動機器人導論》
Freiburg SLAM Course: