摘自:http://blog.csdn.net/u012700322/article/details/52953768
此人對slam比較了解 http://blog.csdn.net/u012700322/article/category/6277842
gmapping:
gmapping是目前應用最廣的2D slam 方法,利用RBPF方法,故需要了解粒子濾波算法。scan-match方法在於估計機器人位置(pose),利用梯度下降的方法,在當前構建的地圖,與當前的激光點,和機器人位置(pose)為初始估計值。
粒子濾波的方法一般需要大量的粒子來獲取好的結果,但這必會引入計算的復雜度;粒子是一個依據過程的觀測逐漸更新權重與收斂的過程,這種重采樣的過程必然會代入粒子耗散問題(depletion problem), 大權重粒子顯著,小權重粒子會消失(有可能正確的粒子模擬可能在中間的階段表現權重小而消失).自適應重采樣技術引入減少了粒子耗散問題 , 計算粒子分布的時候不單單僅依靠機器人的運動(里程計),同時將當前觀測考慮進去, 減少了機器人位置在粒子濾波步驟中的不確定性. (FAST-SLAM 2.0 的思想,可以適當減少粒子數)
缺點:依賴里程計(odometry),無法適用無人機及地面小車不平坦區域;無回環;
優點:在長廊及低特征場景中建圖效果好;
cartographer:
cartographer是Google的實時室內建圖項目,傳感器安裝在背包上面,可以生成分辨率為5cm的2D格網地圖。
獲得的每一幀laser scan數據,利用scan match在最佳估計位置處插入子圖(submap)中,且scan matching只跟當前submap有關。在生成一個submap后,會進行一次局部的回環(loop close),利用分支定位和預先計算的網格,所有submap完成后,會進行全局的回環。
local 2D slam
A.scans
submap的構造是一個重復迭代配准scan和submap的過程。利用配准估算出pose對scan進行剛體變換,插入到submap中。
B.submaps
連續的scan用來構造submap,這里submap以概率格網的形式表現。每一個scan,在插入格網(submap)時,每一個grid有hits和miss兩種情況。離scan終點最近的grid為hits,在scan原點和終點之間相交的grid為miss。之前未觀察的grid分配一個概率,已觀察的grid進行概率更新。
C.Ceres scan matching
把求pose的問題轉換為一個求解非線性最小二乘問題,利用Ceres解決這個問題。
因為最小二乘問題是一個局部最優問題,故一個好的初值(pose初值)對求解有很大影響。因此IMU能被用來提供pose初值的旋轉變量。在缺乏IMU的時候,可以用提高scan match頻率或匹配精度。
closing loops
利用SPA方法優化scan和submap的pose。存儲插入scan位置處對應的pose用來做回環檢測。此外,當submap不在變化時,對應pose的scan和submap也被用來做回環。scan match中找到的good match其對應的pose將被用來做優化問題。
A.Optimization problem
回環優化問題構造成非線性最小二乘問題,來求解。
公式中分別為submap的pose,scan的pose,對應submap和scan的pose的相關性,及相關協方差矩陣