LOAM論文介紹與A-LOAM代碼簡介


作者:小L

一、前言

LOAM[1]是Ji Zhang於2014年提出的使用激光雷達完成定位與三維建圖的算法,即Lidar Odometry and Mapping。之后許多激光SLAM算法借鑒了LOAM中的一些思想,可以說學習LOAM對學習3D激光SLAM很有幫助。本文對LOAM算法,以及簡化版的開源代碼A-LOAM進行簡單介紹。

二、LOAM算法

2.1 系統整體架構

LOAM主要包含兩個模塊,一個是Lidar Odometry,即使用激光雷達做里程計計算兩次掃描之間的位姿變換;另一個是Lidar Mapping,利用多次掃描的結果構建地圖,細化位姿軌跡。由於Mapping部分計算量較大,所以計算頻率較低(1Hz),由Mapping校准細化Odometry過程中計算出來的軌跡。

2.2 Lidar Odometry部分

Lidar Odometry是通過Lidar的兩次掃描匹配,計算這兩次掃描之間Lidar的位姿變換,從而用作里程計Odometry。既然提到了兩次掃描的匹配,自然而然想到了經典的ICP算法。然而LOAM並沒有采用全部的激光點進行匹配,而是篩選出了兩類特征點,分別是角點和平面點。
所謂角點,是當前激光掃描線束上曲率較大的點;而平面點,即曲率較小的點。在匹配時,首先提取當前掃描中的角點和平面點,對於角點,可以認為是物理世界中直線元素的采樣,所以計算到上一次掃描中對應直線的距離;而對於平面點,認為是物理世界平面元素的采樣,所以計算到上一次掃描中對應平面的距離。通過不斷優化,使距離最小,從而得到最優的位姿變換參數。

2.2.1 角點到直線距離的計算

計算角點到對應直線距離時,需要確定對應直線的方程,才能夠計算距離。作者認為,可以有如下假設:角點是雷達某個線束與物理世界兩個平面夾角相交時的采樣,那么這個線束相鄰的雷達掃描線束也會與這個平面夾角相交,所以這個平面夾角的直線可以用前后兩次掃描的角點進行標識。
圖:兩種特征點提取示意
具體而言,當獲得當前某一個角點時,首先根據假設的運動參數(上一次運動參數作為這一次優化的初始),計算這個角點在上一次掃描時的坐標,之后查找上一次掃描中最近鄰的角點,並在相鄰的雷達掃描線束中搜索最近的角點,從而得到了直線方程,便能夠計算點到之間距離。

2.2.2 平面點到平面距離的計算

計算平面點到對應平面距離時,也需要首先拿到平面的方程,即平面上一點與平面的法向量。與角點對應直線搜索方式類似,首先找上一次掃描中最近鄰的平面點,之后在同一個掃描線數和不同的線束上各提取一個平面點,這樣共得到了3個不共線的平面點,唯一確定了平面,從而計算平面點到平面的距離。

2.2.3 一些其他細節

a) 在角點和平面點的選擇上,為了使分布更加均勻,通常將激光雷達一圈的掃描均勻分成幾個部分,分別在每個部分中提取曲率最大(角點)和最小(平面點)的幾個點。
b) 在激光雷達的一次掃描過程中,由於運動,采集到的點雲會有運動畸變,所以在LOAM中點雲會通過預估的運動參數去畸變進行對齊
c) 雷達掃描到的一些數據點是不穩定的,作者認為有兩種不穩定數據點,如下圖所示。一種是采集面與掃描面基本平行,另一種是被遮擋。在獲得一次激光雷達掃描的點雲后,這兩種不穩定點會被首先去除。
圖:兩種不穩定點示意

2.3 Lidar Mapping部分

Mapping部分的意義是,通過與多次掃描構成的地圖進行匹配,得到Lidar Odometry中利用兩幀之間計算位姿產生的漂移,從而對軌跡進行細化。如下圖所示:
圖中,分別表示前k次掃描的軌跡(藍色曲線)和地圖(黑色直線),而最新的軌跡為。將k+1次雷達掃描到通過Odometry得到的映射到地圖坐標系中,得到了未經校准的地圖,可以看出存在一定的誤差,並沒有與原有地圖對齊。此時通過一次Lidar Mapping,可以消掉這部分的誤差,從而校准位姿參數。
圖片來源[2]
如上圖所示,在Mapping時,LOAM維護了一個以當前位置為中心,具有多個block的子地圖,論文中指出這個子地圖是10m的立方體。當Lidar采集到的點落入到這個子地圖的某些block時,將從這個子地圖提取出去對應的block,然后在這些block中像特征點提取那樣,提取當前掃描中角點和平面點近鄰的對應點,但有不同之處,並不像第2小節那樣提取2個近鄰角點確定直線或者3個平面點確定平面,而是提取更多的點進行擬合,因為子地圖是多次掃描構成的結果。
對於當前掃描的一個角點,提取對應子地圖中多個近鄰角點,通過奇異值分解求出這些角點的主方向,從而的到直線方程,從而計算點到直線距離;對於平面點,通過尋找最小特征值對應的向量得到擬合平面的法向量,從而計算點到平面距離。再進行優化,得到對齊掃描與子地圖的位姿糾正參數,之后將原有的軌跡進行糾正,便得到了細化的軌跡。

2.4 補充說明

LOAM一文中提出,可以通過IMU進行輔助。所謂“輔助”就是在激光雷達兩次掃描之間,利用IMU得到較為准確的變化軌跡,從而進行點雲畸變的去除,從而不需要靠上次掃描獲得的運動參數插值對這次的畸變進行去除,能夠提升精度。但IMU的數據並沒有參與到優化當中,所以IMU在LOAM算法中只起到了輔助作用,而后續一些其他3D激光雷達算法,例如LINS[3],Lio-mapping[4]和LIO-SAM[5]等,利用IMU進行了緊耦合的優化,取得了更好的效果。

3. A-LOAM代碼

LOAM的作者曾經開源了LOAM的代碼,但由於某些原因又取消了開源,現在網上也流傳着一些當時的片段或者牛人的實現。而A-LOAM是LOAM的一個簡化版本,去掉了IMU以及一些其他細節,采用了Eigen,ceres等替代了原有LOAM代碼中的手動實現,非常適合學習LOAM思想,也適合新手入門3D激光SLAM。A-LOAM的鏈接是:https://github.com/HKUST-Aerial-Robotics/A-LOAM

3.1 代碼概覽

A-LOAM代碼通過ROS運行,主要有3個節點,分別是:ascanResigtration, alaserOdometry和alaserMapping,對應特征點提取、里程計計算和mapping細化三部分。整體的結構如下:
截圖來源[6]
ascanResigtration:處理Lidar輸入的點雲,提取並發布角點、平面點以及簡單處理后的完整點雲;
alaserOdometry:接收特征點,計算位姿參數(軌跡)並發布
alaserMapping:接收Lidar的點雲與Odometry計算的軌跡,進行細化,得到精確的軌跡和地圖並發布

3.2 代碼學習資料

由於代碼部分內容較多,不方便展開詳細介紹。網上資料較多,給出一些參考資料供大家自行學習。
LOAM中文注釋版:https://github.com/cuitaixiang/LOAM_NOTED
LOAM筆記及A-LOAM源碼閱讀[6]:https://www.cnblogs.com/wellp/p/8877990.html
LOAM代碼解析:https://blog.csdn.net/liuyanpeng12333/article/details/82737181
ALOAM試跑及程序注釋:https://blog.csdn.net/unlimitedai/article/details/105711240
注意有些注釋的是LOAM,有些是A-LOAM,基本上LOAM的注釋涵蓋了A-LOAM

參考文獻

1. J. Zhang and S. Singh, "Visual-lidar odometry and mapping: low-drift, robust, and fast," 2015 IEEE International Conference on Robotics and Automation (ICRA), Seattle, WA, 2015, pp. 2174-2181, doi: 10.1109/ICRA.2015.7139486.
2. https://www.cnblogs.com/wellp/p/8877990.html
3. LINS: A Lidar-Inertial State Estimator for Robust and Efficient Navigation
4. Tightly Coupled 3D Lidar Inertial Odometry and Mapping
5. LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
6. https://www.cnblogs.com/wellp/p/8877990.html
論文地址: 在公眾號「3D視覺工坊」,后台回復「LOAM相關論文」,即可直接下載上述引用的文獻。
本文僅做學術分享,如有侵權,請聯系刪文。
下載1
在「3D視覺工坊」公眾號后台回復:3D視覺即可下載 3D視覺相關資料干貨,涉及相機標定、三維重建、立體視覺、SLAM、深度學習、點雲后處理、多視圖幾何等方向。

下載2
「3D視覺工坊」公眾號后台回復:3D視覺github資源匯總即可下載包括結構光、標定源碼、缺陷檢測源碼、深度估計與深度補全源碼、點雲處理相關源碼、立體匹配源碼、單目、雙目3D檢測、基於點雲的3D檢測、6D姿態估計源碼匯總等。

下載3
「3D視覺工坊」公眾號后台回復:相機標定即可下載獨家相機標定學習課件與視頻網址;后台回復:立體匹配 即可下載獨家立體匹配學習課件與視頻網址。

重磅!3DCVer-學術論文寫作投稿 交流群已成立

掃碼添加小助手微信,可申請加入3D視覺工坊-學術論文寫作與投稿 微信交流群,旨在交流頂會、頂刊、SCI、EI等寫作與投稿事宜。

同時也可申請加入我們的細分方向交流群,目前主要有3D視覺CV&深度學習SLAM三維重建點雲后處理自動駕駛、CV入門、三維測量、VR/AR、3D人臉識別、醫療影像、缺陷檢測、行人重識別、目標跟蹤、視覺產品落地、視覺競賽、車牌識別、硬件選型、學術交流、求職交流等微信群。


一定要備注:研究方向+學校/公司+昵稱,例如:”3D視覺 + 上海交大 + 靜靜“。請按照格式備注,可快速被通過且邀請進群。原創投稿也請聯系。

▲長按加微信群或投稿

▲長按關注公眾號

3D視覺從入門到精通知識星球:針對3D視覺領域的知識點匯總、入門進階學習路線、最新paper分享、疑問解答四個方面進行深耕,更有各類大廠的算法工程人員進行技術指導。與此同時,星球將聯合知名企業發布3D視覺相關算法開發崗位以及項目對接信息,打造成集技術與就業為一體的鐵桿粉絲聚集區,近2000星球成員為創造更好的AI世界共同進步,知識星球入口:

學習3D視覺核心技術,掃描查看介紹,3天內無條件退款


圈里有高質量教程資料、可答疑解惑、助你高效解決問題
覺得有用,麻煩給個贊和在看~  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM