激光雷達分單線和多線這兩大類,針對這兩類Lidar所使用的算法也不盡相同。 首先單線雷達一般應用在平面運動場景,多線雷達則可以應用于三維運動場景。
2D Lidar SLAM
一般將使用單線雷達建構二維地圖的SLAM算法,稱為2D Lidar SLAM。大家熟知的2D Lidar SLAM算法有:gmapping, hector, karto, cartographer。通常數據和運動都限制在2D平面內且運動平面與激光掃描平面平行。
gmapping[1]
基于粒子濾波的2D激光雷達SLAM,構建二維柵格地圖。融合里程計信息,沒有回環檢測。 優點是在小場景中,計算量小,速度較快。 缺點是每個粒子都攜帶一幅地圖,無法應對大場景(內存和計算量巨大);如果里程不準或標定參數不準,在長回廊等環境中容易把圖建歪。
hector[2]
hector SLAM是完全基于scan-matching的,使用迭代優化的方法來求匹配的最佳位置,為避免陷入局部極值,也采用多分辨率的地圖匹配。 由于完全依賴于scan matching,要求雷達的測量精度較高、角度范圍大,掃描速度較高(或移動速度慢)。噪聲多、邊角特征點少的場景就很容易失敗。 原文所提出方法的特點還在于,加入IMU,使用EKF估計整體的6DoF位姿,并根據roll, pitch角將激光掃描數據投影到XY平面,因而支持激光雷達有一定程度的傾斜,比如手持或機器人運動在不是很平整的地面上。
karto[3][4]
karto是基于scan-matching,回環檢測和圖優化SLAM算法,采用SPA(Sparse Pose Adjustment)進行優化。 關于karto 和 cartographer 的比較,可以看看這里:https://blog.csdn.net/hzy925/article/details/78857241
cartographer[5][6]
cartographer是谷歌開源的激光SLAM框架,主要特點在于: 1.引入submap,scan to submap matching,新到的一幀數據與最近的submap匹配,放到最優位置上。如果不再有新的scan更新到最近的submap,再封存該submap,再去創建新的submap。 2.回環檢測和優化。利用submap和當前scan作回環檢測,如果當前scan與已經創建的submap在距離上足夠近,則進行回環檢測。檢測到回環之后用ceres進行優化,調整submap之間的相對位姿。為了加快回環檢測,采用分枝定界法。 cartographer也可以應用于3D Lidar SLAM(我還沒試過),不過最出名的還是她在2D Lidar SLAM方面的出色表現,畢竟論文標題就是“Real-time loop closure in 2D LIDAR SLAM”。
3D Lidar SLAM
3D Lidar SLAM主要是針對多線雷達的SLAM算法。比較出名的有LOAM, LeGO-LOAM, LOAM-livox等。
LOAM[7]
LOAM是針對多線激光雷達的SLAM算法,主要特點在于:1) 前端抽取平面點和邊緣點,然后利用scan-to-scan的匹配來計算幀間位姿,也就形成了里程計;2) 由估計的幀間運動,對scan中的每一個點進行運動補償;3) 生成map時,利用里程計的信息作為submap-to-map的初始估計,再在利用submap和map之間的匹配做一次優化。 LOAM提出的年代較早(2014),還沒有加入回環優化。 關于LOAM的詳細解析,可以參考這篇專欄文章: https://zhuanlan.zhihu.com/p/111388877ALOAM[8]是Advanced implementation of LOAM,使用Eigen和ceres-solver簡化代碼實現。
LeGO-LOAM[9]
LeGO-LOAM在LOAM的基礎上主要改進:1) 地面點分割,點云聚類去噪;2)添加了ICP回環檢測和gtsam優化。 關于LeGO-LOAM的詳細解析,可以查看這個專欄文章: https://zhuanlan.zhihu.com/p/115986186
LOAM_livox[10]
大疆2019年公布的面向小FOV Lidar的LOAM算法。相比LOAM,做了一些改動。算法的特點: 1.添加策略提取更魯棒的特征點:a) 忽略視角邊緣有畸變的區域; b) 剔除反射強度過大或過小的點 ; c) 剔除射線方向與所在平臺夾角過小的點; d) 部分被遮擋的點 2.與LOAM一樣,有運動補償 3.里程計中剔除相對位姿解算后匹配度不高的點(比如運動物體)之后,再優化一次求解相對位姿。
視覺和Lidar 融合的SLAM算法
VLOAM[11]
VLOAM 是視覺和激光雷達緊耦合的方案。
視覺里程計部分,圖像幀之間的相對位姿估計以60Hz運行。先抽取和匹配圖像特征,雷達點云融合成深度地圖,再將深度地圖與視覺特征點關聯起來,以幫助計算兩幀之間的相對位姿。 雷達里程計部分,將1s內的數據作為一個完整掃描 sweep。Sweep-to-Sweep refinement模塊優化求解兩個sweep之間的相對運動并去除運動畸變,Sweep-to-Map Registration模塊將局部點云注冊到已經構建的地圖上面。 Transform Integration模塊則結合兩個里程計,以視覺里程計的高幀率輸出位姿估計。 待補充 。。。
方法二
2D:效果最好的應當是Google的Cartographer,此外還有基于粒子濾波的gmapping,基于優化的hector slam等等。 3D領域: 經典的LOAM(A-LOAM),用特征點:planar points & edge points 來進行幀間匹配,無回環 LeGO-LOAM ICP 的方法加入了回環,用于減小漂移,一致性更強 G-LOAM 引入 GPS 作為新增的位姿約束,用 Levenberg-Marquardt 方法優化位姿圖 LOAM-Livox (HKU Mars Lab)一套可用于固態激光雷達的SLAM算法 Fast-LIO (HKU Mars Lab),一套可用于無人機的基于EKF的雷達慣導里程計
審核編輯 :李倩
-
算法
+關注
關注
23文章
4601瀏覽量
92671 -
SLAM
+關注
關注
23文章
419瀏覽量
31789 -
激光雷達
+關注
關注
967文章
3943瀏覽量
189626
發布評論請先 登錄
相關推薦
評論