⑴ 3D激光SLAM:LOAM 論文--演算法詳細解讀
LOAM(Lidar Odometry and Mapping)論文演算法詳細解讀
一、LOAM簡介
LOAM實現了一種實時激光里程計並建圖的演算法,使用的硬體是一個在三維空間中運動的兩軸單線激光雷達。這種雷達在水平方向和垂直方向不斷變換形成點雲,每個點的時間戳不同。與現在主流的velodyne 16線或32線雷達相比(它們在垂直方向上有16或32個點,具有相同的時間戳,在水平方向時間戳遞增),LOAM演算法同樣可以用於16線的lidar。
實現功能的難點:
- 點雲不是相同時間獲得的,運動畸變會導致點雲位置錯誤,進而造成匹配和里程計信息估計的錯誤。
- 一致性較好的3D地圖通常通過離線方式獲得,還需通過回環檢測來消除累計誤差。
LOAM的優點:
- 實現了低的漂移,計算復雜度低,實時性好。
- 不需要高精度的lidar和慣導。
演算法核心:
- 將SLAM問題拆分,通過兩個演算法實現:一個是執行高頻率但低精度的運動估計(定位),另一個演算法在比定位低一個數量級的頻率執行匹配和注冊點雲信息(建圖和校正里程計)。
- 這兩個演算法都需要提取特徵點(角點和面點),然後進行配准。前端演算法(里程計演算法)中特徵點提取使用快速計算方法,後端演算法(建圖演算法)中相互關聯的特徵點通過特徵值和特徵向量獲得。
二、演算法部分
激光雷達的每個幀分別輸入兩個演算法:前端里程計計算相鄰兩幀的運動,用於校正畸變,運行頻率大致為10Hz;前端的輸出之後會被後端處理,運動補償後的點雲和地圖進行配准,運行頻率1Hz。最終,最後的位姿是兩個演算法結合的結果,以10Hz里程計的輸出為准。
1. 激光雷達里程計
A. 特徵點提取
- 選擇的特徵點是角點和面點。
- 通過計算曲率來判斷一個點是否為特徵點,把一幀裡面的每個點的曲率計算出來,然後根據曲率進行排序,選擇最大的幾個曲率點作為邊緣點,最小的幾個曲率點作為平面點。
- 為了使提取的特徵點均勻,把一幀雷達分成4等分,每個部分提取出2個邊緣點和4個面點。
- 曲率值要滿足閾值范圍才會被判斷為是否是特徵點,並且選擇的數量不允許超過設定的值。
- 在提取特徵點時,要避免點過於集中,並排除一些不可靠的點,如平面上的點和激光的射線平行、被遮擋的點等。
B. 找特徵點的匹配對
- 假設^Pk和Pk+1都是可用的,然後開始找出特徵點的匹配對。
- 對於Pk+1,找出邊緣點和面點,用上一節曲率的方法,用Ek+1和Hk+1來代表邊緣點集合和面點集合。
- 在第k+1幀開始的時候,Pk+1還是空的,點在之後逐漸接收。lidar里程計在k+1幀開始接收的時候,遞歸地估計6自由度的運動。
- 在每一次迭代,用當前估計的變換,將Ek+1和Hk+1投影到tk+1時刻的坐標系中,用^Ek+1和^Hk+1表示投影後的點集。
- 對於在^Ek+1和^Hk+1中的每個點,需要找到在^Pk中的距離最近的點,通過3D KD-tree的方法。
- 邊緣點由兩個點表示,找到^Pk中與之對應的兩個點(確保這三個點不在一條直線上),並確認這兩個點都是邊緣點。
- 面點由一個平面表示,找到^Pk中與之對應的三個點(確保這三個點不在一條直線上),並確認這三個點都是面點。
- 計算邊緣點到對應直線的距離和面點到對應平面的距離,通過非線性優化的方式,來讓這兩個距離最小,從而估計出位姿變換。
C. 運動估計
- 在每幀的過程中,lidar的運動視為勻速運動(因為時間很短),這使得可以通過線性插值的方式賦值一幀裡面每個點的位姿變換。
- 通過LM(Levenberg-Marquardt)方法求出非線性優化的結果。
2. lidar建圖
- 建圖演算法運行的頻率要比里程計低,每一幀執行一次。
- 在k+1幀的最後,激光里程計得到了經過畸變校正的點雲^Pk+1,並且同時得到了一個位姿變換Tk+1。
- 建圖演算法就是將^Pk+1配准到世界坐標系中。
- Qk是已存在地圖中的點雲,是前k幀的累積。Tw是地圖中最後一幀k的位姿在tk+1時刻。
- 用來自激光里程計的輸出,建圖演算法將^Pk+1投影到世界坐標系中,形成^Qk+1。
- 然後就是配准^Qk+1和Qk,這個過程會優化lidar的位姿Twk+1。
- 特徵提取的方法和之前一樣,但是要多10倍的個數。
- 在進行特徵點配對上面有些許的不同,主要是因為地圖的點很多,為了提高效率,地圖的點會按10m的立方體劃分,在立方體中有點和^Qk+1相交立方體的點才會存入3D kd-tree中。
- 找出Qk中特徵點周圍一定范圍的點,對於邊緣點,就把范圍內的邊緣點作為一個點集,對於平面點,就把平面點作為一個點集。
- 然後求這個點集的協方差矩陣,並計算特徵值和特徵向量。
- 邊緣線和平面的位置就認為是在幾何中心。
- 然後就是求點到直線的距離和點到平面的距離,方法和前面里程計的類似。
- 通過LM非線性優化出位姿。
- 最後將整個地圖進行一個體素濾波。
三、測試結果
(由於圖片無法直接在此處展示,但根據提供的markdown格式,可以想像在相關段落前後會插入展示LOAM演算法在KITTI數據集上測試結果的圖片,這些圖片可能包括演算法在不同場景下的點雲圖、軌跡圖等,用以證明LOAM演算法的高精度和實時性。)
綜上所述,LOAM演算法通過拆分SLAM問題為前端里程計和後端建圖兩個演算法,實現了高精度、實時性的激光里程計和建圖功能。該演算法在特徵點提取、特徵點匹配、運動估計和建圖等方面都有詳細的設計和實現,並通過實驗驗證了其有效性。
⑵ 3d演算法必中 計算公式
在3D圖形和演算法領域,不存在一個所謂的「必中計算公式」。
3D演算法的成功與否取決於多種因素: 演算法的准確性:演算法的數學基礎和邏輯是否正確。 實現方式:演算法在計算機中的具體實現和優化程度。 輸入數據的質量:提供給演算法的3D模型、光照條件、材質屬性等數據的准確性和完整性。 計算資源的可用性:硬體性能、內存大小、處理速度等計算資源的限制。
3D演算法的應用場景和需求多樣化: 3D渲染:涉及光線追蹤、光柵化、紋理映射等技術,每種技術都有其特定的計算公式和方法。 3D物理模擬:模擬重力、碰撞、摩擦力等物理現象,基於物理學原理和數學公式構建。
提高3D演算法效果和性能的策略: 充分測試和驗證:確保演算法在各種情況下都能產生可靠的結果。 優化實現方式:提高演算法的運行效率和響應速度。 利用並行計算和硬體加速:充分利用計算資源並提高演算法的性能。
綜上所述,成功應用3D演算法需要深入理解相關的數學和計算機圖形學原理,並結合具體的應用場景和需求進行定製和優化。