loam_livox功能包關聯兩篇論文,一篇是loam_livox,對loam做了一些小改進,這是詳細解讀。另一篇是loam_livox_loop,用直方圖來檢測迴環,用直方圖來衡量關鍵幀與當前幀的相似性。主要是把loam用於livox上很牛,因爲livox的mid40是窄視角的固態激光,比傳統的機械激光(主要代表爲 velodyne)視角小得多,成本也低得多,在工程上對於降低成本非常有意義,所以很牛。(固態激光與機械激光區別戳這)
代碼地址:https://github.com/hku-mars/loam_livox
論文:
- loam_livox: http://cn.arxiv.org/pdf/1909.06700.pdf
- loam_livox_loop: http://cn.arxiv.org/pdf/1909.11811.pdf
(在arxiv前面加cn,就是國內鏡像地址,注意是http沒有s。詳細看這)
下面是論文的原理圖,第1張是loam_livox的,第2張是loam_livox_loop。
代碼不多,總共1萬行左右
這個功能包總共生成3個可執行文件,看CMakeLists.txt就知道,實際只有前兩個用到了。
add_executable(livox_scanRegistration source/laser_feature_extractor.cpp)
add_executable(livox_laserMapping source/laser_mapping.cpp )
add_executable(read_camera source/read_camera.cpp)
include
文件夾下有少量算法,但核心算法都在source
文件夾下,下面先簡單介紹一下其結構,如下所示爲數據流轉過程。
數據流向(從上到下):
- 原始數據
- 提取特徵,剔除壞點(主要是laser_feature_extractor.cpp/hpp,它引用了livox_feature_extractor.hpp)
- 點雲配準,位姿估計(主要是point_cloud_registration.hpp,也有scene_alignment.hpp)
- 程序中轉核心(laser_mapping.hpp/cpp),同時構建場景地圖
- 優化(ceres_icp.hpp,ceres_pose_graph_3d.hpp)
- 程序中轉核心(laser_mapping.hpp/cpp),取回優化值,更新位姿和地圖
更詳細的解讀參見下列博客: