前言
在學習了LOAM之后,了解到LeGO-LOAM(面向復雜情況的輕量級優化地面的雷達里程計),進行了一個學習整理。
Github:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM
論文:https://github.com/RobustFieldAutonomyLab/LeGO-LOAM/blob/master/Shan_Englot_IROS_2018_Preprint.pdf
系統概述
系統接收來自3D激光雷達的輸入并輸出6個DOF姿勢估計。 整個系統分為五個模塊。 首先是segmentation,使用單次掃描的點云,并將其投影到范圍圖像上進行分段(線)。 然后將分段的點云發送到feature extraction模塊。 然后,激光雷達測距儀使用從前一模塊中提取的特征來找到與連續掃描相關的變換。 這些特征在lidar mapping中進一步處理,將它們注冊到全局點云圖。 最后,transform integration模塊融合了激光雷達測距和激光雷達測繪的姿態估計結果,并輸出最終的姿態估計。?
接下來,我們看具體每一個模塊完成的工作
一、Segmentation
首先將收到的一幀點云投影到一副1800*16的圖像上(水平精度0.2°,16線lidar),每一個收到的點代表圖像的一個像素,像素的值表示相應的點
到sensor的歐式距離。
完成圖像化之后得到一個矩陣,對矩陣的每一列進行估計(即完成對地面的估計),在分割之前進行地面點的提取。可能代表地面的點被標記為地面點而不用于分割。
然后,將基于圖像的分割方法應用于距離圖像以將點分組為多個聚類。同一類的點具有相同的一個標簽(地面是較為特殊的一類);同時,為了快速可靠地完成特征提取,忽略少于30個點的類。
完成這一步之后,圖像里只保留了可能代表大物體的點,然后記錄下點的三個值:(1)類的標簽;(2)點在矩陣中的坐標(x,y);(3)點的值即?在接下來的模塊里使用。
二、Lidar Odometry
首先是特征點的提取,方法與LOAM中的相似,只是進行特征提取的點云是Segmentation處理之后得到的點云。
為了從所有方向均勻地提取特征,作者將圖像水平劃分為幾個相等的子圖像。 然后我們基于它們的平滑度c對子圖像的每一行中的點進行排序。然后通過設定的閾值來判定平面點或者角點。效果如下圖:
接下來進行了LOAM中沒有的操作,即作者認為子圖像中的每一行具有最大c值的edge特征點,其不屬于地面;?類似地,子圖像中的每一行具有最小c值的平面特征點一定是地面點。處理之后效果如下:
三、Lidar Odometry
Lidar Odometry模塊估計兩次連續掃描之間的傳感器運動。 通過執行point-edge和point-plane掃描匹配找到兩次掃描之間的轉換。具體方法采用的與LOAM中一致。但在后續步驟中,作者做了一些改進。
1)Label matching
這個時候就用到了在Segmentation中記錄下的類的標簽(label)。然后在配準過程中,對任意一點的配準只在標簽相同的點里進行匹配。例如,平面點只考慮標記為地面點的點,邊緣點只考慮其他標記為大物體的點。
作者以這種方式查找對應關系有助于提高匹配準確性。 換句話說,更可能在兩次掃描之間找到相同對象的匹配對應關系。 這個過程也縮小了對應點的潛在對應點。
2)Two-step LM?Optimization
本文采用兩步得到最佳變換:(1)通過配準平面點來得到(2)然后在以
為約束的情況下,通過配準邊緣點來來估計
。雖然在第一步中也能估計
,但它們不夠準確而且不用在第二步。
通過使用兩步優化方法,可以實現類似的精度,同時計算時間減少約35%。
四、Lidar Mapping
Lidar Mapping模塊中,將特征點與周圍點云圖進行配準,以進一步優化姿勢變換,但以較低頻率運行。具體細節與LOAM相似。
LeGO-LOAM的主要不同之處在于如何存儲最終點云圖。LeGO-LOAM選擇存儲每一個特征點集,而不是單一的點云圖。
設是保存所有先前特征點集的集合。在進行掃描時,
中的每個特征集也與傳感器的位姿相關聯。這樣,我們可以根據
來得到周圍點云圖(surrounding point cloud map)
:第一種方法,通過選擇通過選擇傳感器視場中的特征點集來獲得
;為了簡單起見,選擇(特征點集關聯的)傳感器位姿在傳感器當前位置100米范圍內的特征點集。然后將所選擇的特征點集轉換并融合到單個周圍的地圖中,從而得到
。
作者還將位姿圖SLAM集成到LeGO-LOAM中。 每個特征點集的傳感器位姿可以被建模為位姿圖中的節點。特征點集可以視為此節點的傳感器測量值。由于Lidar Mapping模塊的姿態估計漂移非常低,假設在短時間內沒有漂移。通過這種方式,可以通過選擇最近的一組特征點集來形成。然后,可以使用在L-M優化之后獲得的變換來添加新節點與
中的所選節點之間的空間約束。可以通過執行閉環檢測來進一步消除該模塊的漂移。在這種情況下,如果在當前特征點集與使用ICP的先前特征點集之間找到匹配,則會添加新約束。然后通過將位姿圖發送到優化系統來更新傳感器的估計位姿。
?
運行結果如下
具體安裝測試移步LeGO-LOAM初探:原理,安裝和測試
五、閑談
對論文的學習到此告一段落,大概了解了論文作者的思路以及該算法在LOAM基礎上的修改。。。。。。
由于最近比較忙,沒有時間詳細閱讀代碼以配合理解論文,后續再補上。。。。。。
?
順帶自撈一下關于LOAM學習的Blog:
LOAM_velodyne學習(一)
LOAM_velodyne學習(二)
LOAM_velodyne學習(三)
LOAM_velodyne學習(四)