一、gmapping
gmaping主要是采用一個粒子濾波的方式來實現。主要框架如下:
(1) 數據輸入
在ROS GMapping包中,獲取激光和里程計數據傳入openslam GMapping包中,為新一時刻的建圖做准備。
(2)運動模型
根據t-1時刻的粒子位姿以及里程計數據,預測t時刻的粒子位姿,在初始值的基礎上增加高斯采樣的noisypoint。
(3)掃描匹配
對每個粒子執行掃描匹配算法,GMapping默認采用30個采樣粒子。掃描匹配的作用是找到每個粒子在t時刻位姿的最佳坐標。為后面每個粒子權重更新做准備。如果此處掃描匹配失敗,則粒子權重更新則采用默認的似然估計。
(4)建議分布
混合了運動模型和觀測模型的建議分布,根據上一步掃描匹配獲得的最佳坐標,圍繞該坐標取若干位置樣本(距離差值小於某閾值)計算均值與方差,使得當前粒子位置滿足該均值方差的高斯分布。
(5)權重計算
對各個粒子的權重進行更新,更新之后還需進行歸一化操作。注意:重采樣前更新過一次,重采樣后又更新過一次。
(6)重采樣
使用Neff判斷是否進行重采樣(重采樣頻率越高,粒子退化越嚴重,即粒子多樣性降低,導致建圖精確度降低,有必要設定一個判定值改善粒子退化問題)。
(7)粒子維護地圖
每個粒子都維護了屬於自己的地圖,即運動軌跡。該步驟執行的操作是更新每個粒子維護的地圖。
(8)地圖更新
在ros中進行地圖更新。先得到最優的粒子(使用權重和 weightSum判斷 ),得到機器人最優軌跡,地圖膨脹更新。
參考:http://blog.csdn.net/lqygame/article/details/71158558
優點:依賴里程計(odometry),無法適用無人機及地面小車不平坦區域;無回環;
缺點:在長廊及低特征場景中建圖效果好;
二、cartographer
整個建圖系統框架如下所示:
主要的流程從框架圖可以看出來,輸入主要是:里程計、imu、雷達(或者點雲、超聲波等),輸出為submap
Cartographer主要理論是通過閉環檢測來消除構圖過程中產生的累積誤差[1]。用於閉環檢測的基本單元是submap。一個submap是由一定數量的laser scan構成。將一個laser scan插入其對應的submap時,
會基於submap已有的laser scan及其它傳感器數據估計其在該submap中的最佳位置。submap的創建在短時間內的誤差累積被認為是足夠小的。然而隨着時間推移,越來越多的submap被創建后,submap間的誤差累積則會越來越大。
因此需要通過閉環檢測適當的優化這些submap的位姿進而消除這些累積誤差,這就將問題轉化成一個位姿優化問題。當一個submap的構建完成時,也就是不會再有新的laser scan插入到該submap時,該submap就會加入到閉環檢測中。
閉環檢測會考慮所有的已完成創建的submap。當一個新的laser scan加入到地圖中時,如果該laser scan的估計位姿與地圖中某個submap的某個laser scan的位姿比較接近的話,那么通過某種 scan match策略就會找到該閉環。
Cartographer中的scan match策略通過在新加入地圖的laser scan的估計位姿附近取一個窗口,進而在該窗口內尋找該laser scan的一個可能的匹配,如果找到了一個足夠好的匹配,則會將該匹配的閉環約束加入到位姿優化問題中。
Cartographer的重點內容就是融合多傳感器數據的局部submap創建以及用於閉環檢測的scan match策略的實現。
參考:http://blog.csdn.net/u012700322/article/details/53513527