博客專欄

        EEPW首頁 > 博客 > 一文詳解激光SLAM框架LeGO-LOAM

        一文詳解激光SLAM框架LeGO-LOAM

        發布人:計算機視覺工坊 時間:2021-11-06 來源:工程師 發布文章

        作者介紹:Zach,移動機器人從業者,熱愛移動機器人行業,立志于科技助力美好生活。

        LOAM存在的問題

        LeGO-LOAM全稱為:Lightweight and Groud-Optimized Lidar Odometry and Mapping on Variable Terrain,從標題可以看出 LeGO-LOAM 為應對可變地面進行了地面優化,同時保證了輕量級。

        LeGO-LOAM是專門為地面車輛設計的SLAM算法,要求在安裝的時候Lidar能以水平方式安裝在車輛上;如果是傾斜安裝的話,也要進行位姿轉換到車輛上。而LOAM對Lidar的安裝方式沒有要求,即使手持都沒有關系。

        作者的實驗平臺是一個移動小車(UGA),掛載了一個Velodyne VLP-16 線激光雷達,還配有一個低精度的 IMU;選用的硬件平臺是 Nvidia Jetson TX2(ARM Cortex-A57 CPU);整體負載是 20Kg;移動速度為:2.0m/s;測試場景為:地面不平(比較顛簸)的草地。

        1.jpg

        圖1 硬件平臺

        LOAM框架在這樣的硬件環境和使用場景中會存在一些問題:

        由于搭載的是嵌入式系統,計算能力將會受限,LOAM的計算需要將難以滿足,致使無法做到實時;

        如果使用LOAM框架,系統計算每個點曲率的處理頻率(數據量很大,VLP-16一條線是1800個點)將難以跟上傳感器的更新頻率;

        UGA行駛的路面是非平滑連續的(運動是顛簸的),采集的數據將會失真(運動畸變,勻速運動模型無法適用于顛簸場景),使用LOAM很難在兩幀之間找到可靠的特征對應。

        在噪雜的環境中操作UGV也會給LOAM帶來一些挑戰,例如:浮動的草叢和擺動的樹葉的點云將被誤提取為角點或面點,這些特征是不可靠的,難以在連續幀之間獲取準確的匹配,從而會造成較大的漂移。

        LeGO-LOAM的設計思路

        2.png

        對地面點云的配準主要使用的是面點特征;在分割后的點云配準主要使用的是邊緣點和面點特征。從中可以看出使用邊緣點的數量是要遠小于平面點的數量,這也是能實現加速的主要原因。

        3.png

        LeGO_LOAM的軟件系統輸入 3D Lidar 的點云,輸出 6 DOF 的位姿估計。整個軟件系統分為 5 個部分:

        第一部分:Segmentation: 這一部分的主要操作是分離出地面點云;同時對剩下的點云進行聚類,濾除數量較少的點云簇。

        第二部分:Feature Extraction: 對分割后的點云(已經分離出地面點云)進行邊緣點和面點特征提取,這一步和LOAM里面的操作一樣。

        第三部分:Lidar 里程計: 在連續幀之間進行(邊緣點和面點)特征匹配找到連續幀之間的位姿變換矩陣。

        第四部分:Lidar Mapping: 對feature進一步處理,然后在全局的 point cloud map 中進行配準。

        第五部分:Transform Integration: Transform Integration 融合了來自 Lidar Odometry 和 Lidar Mapping 的 pose estimation 進行輸出最終的 pose estimate。

        LeGO-LOAM的算法細節

        4.jpg

        圖3 噪聲環境中一條scan的特征提取過程

        5.png

        A. Segmentation

        6.png

        提取地面點之后,再對剩下的距離圖像進行聚類(分簇),過濾掉點云數量小于 30 的點云簇,對保留下來的點云簇分配不同的標簽。地面點云屬于特殊的一類點云簇(一開始我們就提取出來了)。對點云進行聚類再處理,可以提高運行效率和提取更穩定的特征。例如,小車運行于嘈雜的環境,樹葉將會產生不可靠的特征,相同的葉子不太可能在連續兩幀掃描中看到。圖3(a)是原始點云,包含了很多植被點云;經過處理之后變成了圖3(b),只剩下大物體點云,例如:樹干。地面點云將被保留以作進一步處理。此時,保留下來的每個點將具備三種屬性:(1)點云的標簽;(2)在距離圖像中的行列數;(3)距離值。

        B. Feature Extraction

        這一步主要是從地面點云和分割出來的點云中提取特征,與LOAM中的操作一樣。主要要搞清7.png

        為了從各個方向均勻地提取特征,我們將距離圖像水平分割成幾個相等的子圖像,將360°均勻分成6等分,每一等分的精度是 300 \times 16(因為VLP-16線Lidar,一條scan是1800個點)。

        計算子圖中每一行的點的曲率值,對曲率值進行排序分類,>Cth,分為邊緣點特征;< Cth 分為面點特征。設置以下幾個集合(論文中這部分語句相近,以下是我個人的理解,可能不準確):

        8.png

        C. Lidar Odometry

        9.png

        1)Label Matching:LeGO-LOAM對點云進行了聚類分簇,不同的點云簇具有不同的Label。Label 信息可以作為兩幀匹配的約束條件,連續兩幀之間只有同類標簽點云簇才能進行配準。這種方式可以提高配準的精度和效率。

        10.jpg11.png

        D. Lidar Mapping

        12.png13.png

        LeGO-LOAM的性能表現

        作者為測試LeGO-LOAM的性能,設計了一系列的實驗來對比LeGO-LOAM和LOAM的表現性能。

        作者在戶外的小場景和大場景中,分別對LeGO-LOAM和LOAM測試平臺執行激烈和平緩的控制,來查看兩者的建圖效果和效率。

        在小場景的激烈運動過程中:LOAM 會把草叢、樹葉提取為邊緣點特征(草叢和樹葉是不穩定特征的主要來源);而LeGOU-LOAM會過濾掉這些不穩定的特征,只會在樹干,地面,臺階等上提取穩定特征。如下圖所示(綠色是邊緣點,粉色是面點):

        14.jpg

        在LOAM框架中,劇烈的運動容易造成點云地圖的發散,如下圖中(a)LOAM,有三個樹干。

        15.jpg

        作者在大場景的都市環境(是一個學校,不同地點的海拔誤差在19m之內)里也進行多種測試以驗證建圖的精度,有人行道,水泥路,土路和草叢。

        LOAM 在人行道上的建圖效果并不好,可能是一端存在樹木葉子的干擾,如下圖所示:

        16.jpg

        在其他三種場景中,LeGO-LOAM的偏差(終點相對于初始位置的偏差)表現都要優于LOAM。

        17.jpg

        整個測試的結果如下:

        特征點數量對比:LeGO-LOAM特征點整體下降幅度超過:29%,40%,68%,72%。

        18.png

        迭代次數對比:里程計的迭代次數降低了34%,48%。

        19.png

        運行時間對比:降低了 60%

        20.png

        位姿誤差對比:LeGOLOAM可以用更少的計算時間實現可比或更好的位置估計精度。

        21.jpg

        參考資料

        https://github.com/RobustFieldAutonomyLab/LeGO-LOAM

        備注:作者也是我們「3D視覺從入門到精通」特邀嘉賓:一個超干貨的3D視覺學習社區

        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 泾川县| 南郑县| 衡阳县| 珠海市| 西畴县| 梧州市| 专栏| 连州市| 清水河县| 甘孜县| 内丘县| 福鼎市| 湖南省| 大洼县| 灌云县| 沙洋县| 车险| 彭水| 静宁县| 美姑县| 库尔勒市| 罗城| 名山县| 息烽县| 南靖县| 伊金霍洛旗| 五指山市| 罗田县| 南陵县| 阿鲁科尔沁旗| 扬州市| 两当县| 奉化市| 化州市| 武安市| 宿迁市| 自贡市| 龙胜| 吴桥县| 郎溪县| 漳平市|