博客專欄

        EEPW首頁 > 博客 > 基于LOAM框架的激光SLAM開源程序匯總

        基于LOAM框架的激光SLAM開源程序匯總

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

        1 前言

        LOAM, 即Lidar Odometry and Mapping,是 Ji Zhang 博士于2014年提出的使用激光雷達完成定位與三維建圖的算法。其算法流程如下:

        1.png

        LOAM算法中主要包含兩個模塊,一個是Lidar Odometry:基于輸入點云提取出角點與平面點作為特征點進行關聯匹配,計算出兩次掃描之間的位姿變換,計算頻率為10HZ;

        為了減緩單幀點云位姿變換產生的累計誤差,設計了Lidar Mapping 的部分。即將與前一幀配準后的點云與生成的地圖進行二次配準,消除漂移。

        由于作者編寫的LOAM代碼已經閉源,目前網上存在著一些代碼的復現版本,本文對這些復現版本進行了匯總,并概括說明了各個版本代碼的特點,供正在學習LOAM相關算法的同學進行參考。

        2 基于LOAM框架的開源激光SLAM算法

        (1) loam_velodyne

        代碼鏈接如下:

        laboshinl/loam_velodyne: Laser Odometry and Mapping (Loam) is a realtime method for state estimation and mapping using a 3D lidar. (github.com):https://github.com/laboshinl/loam_velodyne

        該代碼程序為按照LOAM論文復現的原生代碼,特點是 基于ROS框架,可直接適用于velodyne-16線激光雷達的建圖。對于想學習ROS使用的同學,可以從中了解到如何利用ROS進行消息的接收與發布,如何通過ROS中的tf完成坐標系之間的轉換。

        算法中涉及到的數學公式如非線性優化,并未采用已有的開源庫,而是手工一步步推導,需要一定數學基礎理解代碼。,但通過代碼的學習可以加深對公式的理解。

        對于上述代碼,網上也存在含有中文注釋的版本,代碼鏈接如下:

        cuitaixiang/LOAM_NOTED: loam code noted in Chinese(loam中文注解版) (github.com):https://github.com/cuitaixiang/LOAM_NOTED

        (2) A-LOAM

        代碼鏈接如下:

        HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM (github.com):https://github.com/HKUST-Aerial-Robotics/A-LOAM

        利用了Ceres庫提供的非線性優化函數,完成了L-M算法中雅克比的推導,去除了IMU數據的引入。整體代碼更加規范整潔,非常適合學習LOAM思想,也適合新手入門3D激光SLAM。

        (3)oh_my_loam

        代碼鏈接如下:

        feixyz10/oh_my_loam: ROS-free implementation of LOAM (github.com):https://github.com/feixyz10/oh_my_loam

        脫離了ROS環境實現了LOAM,數據通過函數參數進行傳入傳出,整體代碼設計十分整潔,適合想要搭建屬于自己的激光SLAM程序的同學進行借鑒。

        (4) loam_livox

        代碼鏈接如下:

        hku-mars/loam_livox: A robust LiDAR Odometry and Mapping (LOAM) package for Livox-LiDAR (github.com):https://github.com/hku-mars/loam_livox

        利用livox固態激光雷達,基于LOAM的思想,設計出的算法。因此同樣地,基于livox數據進行了特征點提取,特征點的匹配和殘差計算與LOAM一致。同時利用Ceres庫優化了殘差。

        (5) LEGO-LOAM

        代碼鏈接如下:

        irapkaist/SC-LeGO-LOAM: LiDAR SLAM: Scan Context + LeGO-LOAM (github.com):https://github.com/irapkaist/SC-LeGO-LOAM

        在LOAM的基礎上,做了很大的優化。其算法流程為:

        2.png

        整個算法分為五個模塊。首先對單幀點云進行Segmentation:將其投影為一副1800*16的圖像上,每一個收到的點代表一個像素。提取出地面點聚類,并將非地面點分組為多個聚類,每個聚類的點云具有一致的標簽。

        與LOAM近似的方式提取出角點和平面點。在Lidar Odometry的環節中,選取具有一致標簽的點云進行匹配。例如平面點只考慮標記為地面點的點,邊緣點只考慮其他標記大物體的點,以此提升匹配速度。采用兩步L-M優化得到前后幀點云的位姿變換。通過配準平面點得到[tz, roll, pitch], 通過配準角點來估計[tx, ty, yaw]。在Lidar Mapping 環節,將特征點與周圍點云圖配準,同時增添了圖優化和回環檢測,進一步優化位姿變換,減少漂移。

        相應的,網上也存在著其中文注釋版本

        wykxwyc/LeGO-LOAM_NOTED: LeGO-LOAM代碼注釋與學習 (github.com):https://github.com/wykxwyc/LeGO-LOAM_NOTED

        (6) SC-LEGO-LOAM

        代碼鏈接如下:

        irapkaist/SC-LeGO-LOAM: LiDAR SLAM: Scan Context + LeGO-LOAM (github.com):https://github.com/irapkaist/SC-LeGO-LOAM

        SC-LEGO-LOAM 融合了ScanContext 與 LEGO-LOAM,其中ScanContext是一種點云數據的全局描述符,其提取方法如下:

        3.jpg

        由于回環檢測(場景識別)= 場景描述 + 搜索, Scan context 的作用是作為描述符來描述點云數據,其搜索算法可以保證回環能夠被快速檢測出來。因此將ScanContext應用到LEGO-LOAM的回環檢測部分,提高回環的速度和準確性。

        3 一些學習建議

        對于初學者而言,為了掌握LOAM的框架算法,可以在閱讀論文了解原理后,優先對A-LOAM代碼進行閱讀和理解,快速掌握算法實現的流程。在熟悉LOAM算法框架后,工程實踐中,LEGO-LOAM在自動駕駛領域的建圖中應用較多,因此可以重點對LEGO-LOAM進行學習,并再此基礎上提出自己的改進并進行實驗。

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



        關鍵詞: 激光雷達

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 平武县| 彰武县| 涟水县| 乐安县| 七台河市| 公主岭市| 大足县| 富蕴县| 高邑县| 西城区| 宜兰市| 永泰县| 闽侯县| 额尔古纳市| 奎屯市| 巴南区| 吐鲁番市| 剑川县| 平顶山市| 石台县| 崇礼县| 美姑县| 邵阳县| 长子县| 泽州县| 武冈市| 鸡泽县| 丰城市| 台湾省| 江阴市| 普定县| 双江| 鄂州市| 松潘县| 乌鲁木齐县| 旌德县| 汝州市| 从江县| 雷山县| 雷州市| 盐源县|