LOAM, ALOAM, LegoLOAM, hdl graph slam比較

LOAM

LOAM:

  • LOAM使用了作者定義的特徵點提取和匹配方法,主要去邊角點和平面點。LOAM use a new defined feature system (corner and flat point), for the detail see its article.
  • LOAM假設每一次激光掃描過程中是勻速運動,並且用這個假設修正激光雷達數據的運動扭曲問題。在VLOAM中則是更進一步,使用視覺的里程計估計每一個掃描數據的運動。LOAM suppose linear motion within the scan swap (VLOAM further uses visual odometry to estimate it), and undistort the lidar points.
  • LOAM也有一個低頻率調用的全局優化線程。

A-LOAM

ALOAM github page

另外,下面的算法都使用hdl_graph_slam給到的室外數據集做了結果的測試,建模的圖像如下所示。由於沒有找到軌跡的真實值,沒有對軌跡誤差做比較分析。

LOAM和ALOAM的區別(Difference LOAM vs A-LOAM):

  • LOAM中提供了使用IMU信息修正的接口, ALOAM中省略了這一塊。LOAM has IMU refinement.
  • ALOAM中缺少了對提取到的特徵點的篩選過程,具體可以參見LOAM的代碼部分(對一些不好的邊角點做了篩選)。Lack feature filter in A-LOAM.
  • LOAM中的優化LM方法是作者自己編寫的,ALOAM則是使用了Ceres庫完成這一部分。LOAM implies the LM solver itself. A-LOAM uses Ceres solver.
  • 補充上面的一點,LOAM中作者解析地求出了雅各比的表達式(其中使用了一些小技巧統一了不同特徵點的殘差函數的導數表達),ALOAM則是簡單地使用了ceres提供的自動求導工具(這樣可以節省開發的時間,得到了也是準確的解,但是運算時間會稍稍長些,具體可以參見ceres的官方文檔)。LOAM use analytical derivatives for Jacobians, but A-LOAM uses the automatic derivatives offered by Ceres (which is exact solution but a little bit slower).
  • 相比於原本的LOAM, ALOAM的可讀性更高,非常適合學習。尤其是雅各比的部分,LOAM原本的雅各比推導非常的難理解。ALOAM直接用自動求導,整個SLAM最複雜的運算就不需要推導了!

Performance:
• A-LOAM seems good,less redundant points.
• but has more error in far edges.
• LOAM method has no assumption of a consistent “floor”, that is better for our case.
• A-LOAM has the same logical with LOAM, but its performance is much worse. ALOAM result
下面是對ALOAM的三個線程的運行時間的分析(以下的運行測試都是再i5 9300 cpu上進行的),分別是scan registration線程,odometry線程,和mapping線程。其中mapping是進行全局優化的線程,另外兩個線程則和實時性息息相關。
在這裏插入圖片描述

  • ALOAM - scan refistration
    the maximum time is : 0.034434
    the mean of time is : 0.0148146394612
  • ALOAM - odometry
    the maximum time is : 0.027296
    the mean of time is : 0.0157431030928
  • ALOAM - mapping
    the maximum time is : 0.326849
    the mean of time is : 0.257764385093

For one input scan, it takes 0.0305s in average. 對於一個新的掃描幀,需要大概0.03秒的處理時間,另外低頻優化每次的耗時大概0.25秒(並不影響實時性)。

LEGO LOAM

lego LOAM

vs LOAM:

  • Lego LOAM針對處理運算量做了優化,它的運算速度增加,同時並沒有犧牲精度。Faster and similar accuracy as LOAM, and has a better global map visual effect.

Difference LOAM:

  • LogoLOAM 增加了更多預處理的步驟,其中主要包括一個地面的提取(並沒有假設地面是平面),和一個點雲的分割。使用更多篩選之後的點雲再提取特徵點,效率會更高。Add segmentation before processing (gound extraction and image-based segmentation)
  • 在提取特徵點時,將點雲分成小塊,分別提取特徵點,以保證特徵點的均勻分佈。Sub-divide the range image before feature extraction → more evenly distributed features.
  • 再特徵點匹配的時候,使用預處理得到的segmenation標籤篩選,又提高了效率。Label match
  • 一個雙步驟的LM優化,先使用平面點優化高度,同時利用地面的方向優化兩個角度信息;再使用邊角點優化剩下的三個變量。以這種方式分別優化,效率提升40%,但是並沒有造成精度的損失(根據原文章所述)。Two step LM. Seperate the optimization based on different property of edge and planar points. Becomes faster while similar accuracy.
  • 不用的地圖點存儲方式。LOAM中將所有歷史的點雲存儲到同一張點雲圖中,並做了grid sampling。Lego LOAM則是分別存儲每一幀的特徵點信息和每一幀的位姿數據。這樣提供了兩種全局優化方式,一種是仿照LOAM的方法;另一種是可以使用圖優化理論。Difference map storage method, can use pose graph optimization and use loop closure.

另外LeGO LOAM需要對激光設備的標定。應該是在預處理中,使用了將激光數據轉化爲range image的步驟中需要這些數據,只有正確的設定才能正確執行算法。
在源代碼中對Velodyne的一些設備都有完整的參數設置,但是對速騰(rslidar)並沒有設置好,需要自己完成這方面的工作,才能使用速騰的設備運行算法。雖然話是這麼說。。我之前也問題這個遇到過問題。但是我發現就用源代碼提供的velodyne的參數就可以順利運行了。

對我來說,在這個室外場景的數據,我覺得LeGO LOAM是本文列舉的幾個算法中最好的。 它可以高速運行,有較高的精度,同時相比於LOAM可以加入迴環優化。

但是,在室內運行發現,LeGO LOAM很容易丟失誤匹配,但是LOAM就好很多,即使有相對大的運動也能夠正確的處理。

Performance:
• lego slam has the best result, error is small.
• Flat plane has good look, achieve a dense map, while keep its consistence.

lego loam result
下面是LeGO LOAM的三個主要線程的處理時間的分佈曲線。分別是image projection線程(將掃描幀投影到二維矩陣,並做一系列的預處理),feature association線程(與LOAM大概一致,特徵點的提取和匹配),以及map optimization線程(低頻激發的全局優化線程)。
在這裏插入圖片描述

  • LEGO LOAM - image projection
    the maximum time is : 0.029819
    the mean of time is : 0.0123906096595
  • LEGO LOAM - feature association
    the maximum time is : 1.226773
    the mean of time is : 0.0126770831335
  • LEGO LOAM - map optimization
    the maximum time is : 0.427468
    the mean of time is : 0.30585172524

For one input scan, it takes 0.0249s in average. It is about 25% faster than ALOAM. 對於每一個輸入的掃描幀,處理時間大約是0.025秒,相對於ALOAM快了25%左右。另外由於在LeGO LOAM中使用了另外的地圖結構和優化方式(也加入了迴環優化),所以map optimization的處理時間稍長一些,大概是0.3秒一次。

HDL GRAPH SLAM

hdl graph slam

hdl_graph_slam:

  • 它是一個簡單的圖優化模型。 It is basically a graph optimization algorithm.
  • 它提供了ICP爲基礎的和NDT爲基礎的一系列點雲標配方法。Use ICP-based or NDT-based methods to register new point cloud, and match candidates of loop closure.
  • 它假設有一個共享的地面,但是假設了地面是一個平面,這個假設可能過於強了,限制了算法的魯棒性。
  • 在全局圖優化的步驟,只是使用了相鄰兩幀的相對位姿和每一幀檢測到的地面信息。其實使用的信息很少,圖優化的結構也十分簡單。For the graph optimization part, it use the most sample edge for consecutive frames, along with the floor observation edge.
  • 它提供了迴環優化的模塊,但是迴環比較粗糙。簡單來說,就是在當前幀地附近搜索歷史地每一幀,分別標配得到可能的迴環,再進行優化。
  • 總的來說,它提出了使用圖優化來處理激光SLAM,這是很好的想法。In summary, it uses the most basic algorithms, however it has a complete structure.

Performance:
• not that much error for the far points, as it has loop closure
• lots of redundant points as it has no optimization on point cloud, floors and walls are very thick in the global map.
在這裏插入圖片描述
HDL graph slam有四個主要線程,對於點雲的預處理降採樣prefiltering線程,floor detection線程(檢測一個共有的平面作爲地面),odometry線程(在測試中使用的是使用openmp加速的NDT算法),和graph optimization線程(優化包括:相鄰幀的約束,迴環約束,和每一幀檢測到的地面約束)。
在這裏插入圖片描述

  • HDL - prefiltering
    the maximum time is : 0.395365
    the mean of time is : 0.00943357786885
  • HDL - floor detection
    the maximum time is : 0.856617
    the mean of time is : 0.0456638586777
  • HDL - odometry
    the maximum time is : 0.309964
    the mean of time is : 0.0742533234078
  • HDL - graph slam
    the maximum time is : 2.140327
    the mean of time is : 0.13695704878

Its processing time is much more than the other two methods, as it use NDT, while the other use feature points. 相比於上面的LOAM爲基礎的特徵點標配方法,使用NDT(openmp加速過的NDT)仍然慢了很多,NDT大概需要0.07秒/幀。在全局優化的線程中,由於約束只是簡單的相對位姿(幀與幀的相對位姿和幀與地面的相對位姿)所以graph optimization線程速度很快,只需要LOAM衍生算法的一半左右的時間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章