基於激光雷達的SLAM算法對比分析

基於激光雷達的SLAM算法對比分析

下面將Karto,Hector,Gmapping,Cartographer等幾種開源算法通過列表的形式進行了對比:

Hector Gmapping Karto cartographer
scan-matching(Gaussian-Newton equation) +傳感器的要求高 mapping採用的是RBPF的方法 KartoSLAM是基於圖優化的方法,用高度優化和非迭代 cholesky矩陣進行稀疏系統解耦作爲解. artographer是Google的實時室內建圖項目,傳感器安裝在揹包上面,可以生成分辨率爲5cm的2D格網地圖
要求: 高更新頻率小測量噪聲的激光掃描儀.不需要里程計,使空中無人機與地面小車在不平坦區域運行存在運用的可能性 粒子濾波的方法一般需要大量的粒子來獲取好的結果,但這必會引入計算的複雜度;粒子是一個依據過程的觀測逐漸更新權重與收斂的過程,這種重採樣的過程必然會代入粒子耗散問題(depletion problem), 大權重粒子顯著,小權重粒子會消失(有可能正確的粒子模擬可能在中間的階段表現權重小而消失). 圖優化方法利用圖的均值表示地圖,每個節點表示機器人軌跡的一個位置點和傳感器測量數據集,箭頭的指向的連接表示連續機器人位置點的運動,每個新節點加入,地圖就會依據空間中的節點箭頭的約束進行計算更新. 獲得的每一幀laser scan數據,利用scan match在最佳估計位置處插入子圖(submap)中,且scan matching只跟當前submap有關。在生成一個submap後,會進行一次局部的迴環(loop close),利用分支定位和預先計算的網格,所有submap完成後,會進行全局的迴環。
利用已經獲得的地圖對激光束點陣進行優化, 估計激光點在地圖的表示,和佔據網格的概率.
爲避免局部最小而非全局最優的出現,地圖採用多分辨率的形式.
自適應重採樣技術引入減少了粒子耗散問題 , 計算粒子分佈的時候不單單僅依靠機器人的運動(里程計),同時將當前觀測考慮進去, 減少了機器人位置在粒子濾波步驟中的不確定性 KartoSLAM的ROS版本,其中採用的稀疏點調整(the Spare Pose Adjustment(SPA))與掃描匹配和閉環檢測相關.landmark越多,內存需求越大,然而圖優化方式相比其他方法在大環境下製圖優勢更大.在某些情況下KartoSLAM更有效,因爲他僅包含點的圖(robot pose),求得位置後再求map. submap的構造是一個重複迭代配準scan和submap的過程。利用配準估算出pose對scan進行剛體變換,插入到submap中。
連續的scan用來構造submap,這裏submap以概率格網的形式表現。每一個scan,在插入格網(submap)時,每一個grid有hits和miss兩種情況。離scan終點最近的grid爲hits,在scan原點和終點之間相交的grid爲miss。之前未觀察的grid分配一個概率,已觀察的grid進行概率更新。
論文 Efficient Sparse Pose Adjustment for 2D mapping

citations

cartographer與karto的都是2D激光SLAM算法,而且不是基於概率估計的SLAM框架

  1. 兩者採取的都是圖優化框架

採取的優化庫不一致, karto採取的是spa(karto_slam)或g2o(nav2d), cartographer採取的是google的ceres構建problem優化。 karto的前端與後端採取的是單線程進行,cartographer按paper說明,採取的是4線程後端優化,還在進一步確定。

  1. 運動預測部分:tracker

karto利用的是odom進行初始位置的預測, cartographer部分利用imu構建預測模型,scanmatcher與odom(可選)構建觀測模型,採取UKF進行運動預測, cartographer帶有tracker的說法。

  1. scanMatcher 部分

3.1 karto 採取的的是real-time correlative scan matcher(三維窗口遍歷尋優)的方式進行的。 採取的是雙分辨率的低分辨率和高分辨率的兩次搜索。

3.2 cartoGrapher也是採取的雙搜索的方式進行的, 先用一次real-time correlative scan matcher(三維窗口遍歷尋優),再構建優化等式,利用ceres優化求解。(柵格概率, T的偏差,R的偏差)

  1. submap的說明

4.1 karto沒有submap的概念,全部以keyScan的形式存儲在sensorManager。 無地圖緩存,但每次計算地圖有計算消耗。採取的是scan-map的匹配方式,每次keyScan進入主動的依據pose的距離窗口生成localMap進行匹配。 local 與 gloal的loop closure依據graph的結構和sensorManage順序存儲分配的ID信息,選擇候選scans,生成localMap,進行匹配,依據score進一步確定閉環。

4.2 . cartographer採用了submap的概念, 依據一定數量的scan初始一個submap, 依據窗口大小, 插入newScan,更新submap. 有子圖緩存,會佔用內存。

  1. Loop-Closure

5.1 karto 主要依據pose 和 distance信息創建localMap,scanMatcher(real-time correlative scan matcher)確定。

  1. 依據當前的Vertex, 從Graph中找到與之相鄰的所有vertex(一定距離範圍內).
  2. 採取廣度優先搜索的方式,將相鄰(next)與相連(adjacentVertices)添加進nearLinkedScans.
  3. 從sensorManager中取從前到後,依據id序號挑選與當前在一定距離範圍內,且不在nearLinkedScans中的candidateScans, 當數量達到一定size,返回。
    4)loopScanMatcher進行scanTomap的匹配,當匹配response 和covariance達到一定要求認爲閉環檢測到。得到調整的correct pose.
    5)Add link to loop : 調整邊(全局閉環)
  4. 觸發correctPose: spa優化

5.2 cartogapher 類似((real-time correlative scan matcher)),引入了branch and bound的方式, 加快了閉環的查找。

依據多分辨率多層的樹型結構,單枝生長的方式(branch),及時剪枝操作(bound),深度優先搜索(DFS)確定閉環。 (Intra-submap Inter-submap )

添加相應的閉環約束。構建優化問題,利用ceres優化。

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章