Ubuntu20.04安裝LIO-SAM真是挺折磨人的,填了一路的坑,在此記錄分享一下,為大家安裝編譯算法提供一個全面的參考。
目錄
1. GTSAM安裝
1.1 GTSAM安裝準(zhǔn)備
1.1.1 目錄/usr/local/lib下清理gatsam
1.1.2 目錄/opt/ros/noetic/lib/下清理gtsam
1.2 GTSAM安裝過程
2. LIO-SAM算法依賴項安裝
3. LeGO-LOAM算法編譯問題解決
3.1 問題1----“index”
3.2 問題2---找不到-lBoost::
3.3 問題3---opencv/cv.h
3.4 問題4---PCL報錯
4. LIO-SAM算法編譯及運行問題解決
4.1 問題1---opencv/cv.h
4.2 問題2---PCL報錯
4.3 問題3---error: ‘class std::unordered_map >’ has no member named ‘serialize’??
4.4 問題4---找不到-lBoost::
4.5 問題5---報錯[lio_sam_imuPreintegration-2]
5. 運行LeGO-LOAM和LIO-SAM
1. GTSAM安裝
1.1 GTSAM安裝準(zhǔn)備
由于筆者之前在安裝LeGO-LOAM算法時安裝了4.2版本的GTSAM,后續(xù)又輾轉(zhuǎn)安裝了4.1版本的GTSAM、4.02和4.03版本的GTSAM,導(dǎo)致在安裝LIO-SAM時需要填很多坑。
所以,在此提醒大家,如果已經(jīng)安裝了較高版本的GTSAM,后續(xù)LIO-SAM在編譯時不報錯,在跑數(shù)據(jù)集時,終端一直提示error:[lio_sam_mapOptmization-5] ........[pid 29650, exit code -6,這是由于gtsam版本混亂造成的,請先清理一下gtsam,具體操作如下:
1.1.1 目錄/usr/local/lib下清理gatsam
在usr/local/lib目錄下打開終端,刪除下圖中選中的文件,高版本的gtsam可能還會有l(wèi)ibmetis-gtsam.so等文件需要刪除,將名字帶有g(shù)tsam的文件刪除即可:
刪除指令:
sudo rm -f 文件名
1.1.2 目錄/opt/ros/noetic/lib/下清理gtsam
在opt/ros/noetic/lib目錄下打開終端,刪除下圖中選中的libmetis.so文件,安裝了高版本的gtsam,如果看到libmetis-gtsam.so文件,同樣需要刪除。
刪除指令同上:
sudo rm -f 文件名
至此,GTSAM安裝準(zhǔn)備工作完成。
1.2 GTSAM安裝過程
查閱了大多數(shù)論壇博客,有說ubuntu20.04需要安裝4.03版本以上的GTSAM,有說4.2版本GTSAM滿足編譯要求的。實際上確實是滿足編譯要求,但是運行時容易產(chǎn)生[lio_sam_mapOptmization-5]各種報錯不好解決。
筆者在清理GTSAM后,選擇安裝了低版本的GTSAM,4.0.0-alpha2版本。
下載GTSAM4.0.0-alpha2指令:
wget https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
為方便,直接分享一下筆者的GTSAM4.0.0-alpha2文件。
鏈接: https://pan.baidu.com/s/12WQHZN-B5fukpmYVe1pjdQ?pwd=auty 提取碼: auty
將gtsam-4.0.0-alpha2提取出來,放到主目錄下即可,根據(jù)自己喜好放到指定位置:
提取
放到指定位置
然后,在gtsam-4.0.0-alpha2目錄下打開終端,輸入下列指令:
- mkdir build && cd build
- cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
- sudo make install -j8
第2步,有推薦替換使用下面指令的,但是筆者沒有使用也沒有什么影響,所以建議不用。
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -DGTSAM_USE_SYSTEM_EIGEN=ON ..
至此,GTSAM4.0.0-alpha2安裝完成,我們接下來需要安裝算法的依賴項。
2. LIO-SAM算法依賴項安裝
sudo apt-get install -y ros-noetic-navigation
sudo apt-get install -y ros-noetic-robot-localization
sudo apt-get install -y ros-noetic-robot-state-publisher
sudo apt-get install ros-noetic-fake-localization
sudo apt-get install ros-noetic-robot-localization
3. LeGO-LOAM算法編譯問題解決
安裝GTSAM4.0.0-alpha2后,LeGO-LOAM算法編譯會存在以下幾個問題:
3.1 問題1----“index”
/usr/include/pcl-1.10/pcl/filters/voxel_grid.h:340:21: error: ‘Index’ is not a member of ‘Eigen’ 340 | for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)
我們需要在指定目錄中,修改voxel_grid.h文件:
在該目錄下,打開終端輸入指令:
sudo gedit voxel_grid.h
把340和699行的
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)
改為:
for (int ni = 0; ni < relative_coordinates.cols (); ni++)
修改后,記得點擊保存。此類問題可以參照下面鏈接:
LEGO-LOAM的編譯與數(shù)據(jù)集調(diào)試_牙刷與鞋墊的博客-CSDN博客文章瀏覽閱讀561次,點贊2次,收藏4次。在已開啟終端中輸入以下內(nèi)容。https://blog.csdn.net/qq_42087574/article/details/129555213
3.2 問題2---找不到-lBoost::
在LeGO-LOAM的CmakeList.txt中添加依賴項,即添加下列代碼:
find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)
find_package(Boost REQUIRED COMPONENTS system filesystem date_time)
具體如下:
3.3 問題3---opencv/cv.h
修改utility.h文件,注釋#include <opencv/cv.h>,并添加#include<opencv2/imgproc.hpp>:
3.4 問題4---PCL報錯
pcl報錯問題有兩種情況,一種是需要將CmakeList.txt中c++11改為14,具體如下:
情況一
解決方法:
set(CMAKE_CXX_FLAGS "-std=c++14")
另一種情況是因為pcl鏈接沖突,需要將CmakeList.txt中pcl依賴項注釋:
情況二
解決方法:
注釋find_package(PCL REQUIRED QUIET)
如果還有其他問題,可以參照筆者之前的LeGO-LOAM安裝筆記。
4. LIO-SAM算法編譯及運行問題解決
4.1 問題1---opencv/cv.h
解決方法:
將utility.h中#include <opencv/cv.h>注釋,添加#include <opencv2/opencv.hpp>
4.2 問題2---PCL報錯
解決方法:
同上述3.4節(jié)的情況一,在CmakeList.txt中,把c++11改為14。
前面兩種問題為常規(guī)問題,接下來重點介紹特殊問題。
4.3 問題3---error: ‘class std::unordered_map<unsigned int, std::vector<unsigned int> >’ has no member named ‘serialize’??
解決方法:
在utility.h文件中,將#include <opencv2/opencv.hpp>放到最后,如下圖所示。
4.4 問題4---找不到-lBoost::
解決方法:
參照3.2節(jié)。找不到什么,就添加什么,附上筆者當(dāng)時參考的鏈接:
關(guān)于LIO-SAM編譯時出現(xiàn)錯誤 /usr/bin/ld: 找不到 -lBoost::timer-CSDN博客文章瀏覽閱讀2.1k次,點贊16次,收藏35次。關(guān)于LIO-SAM編譯時出現(xiàn)錯誤:下載LIO-SAM代碼進(jìn)入LIO-SAM文件夾,通過以下代碼編譯:mkdir buildcd buildcmake ..make報錯:/usr/bin/ld: 找不到 -lBoost::timercollect2: error: ld returned 1 exit statusCMakeFiles/lio_sam_imuPreintegration.dir/build.make:759: recipe for target 'devel/lib/lihttps://blog.csdn.net/weixin_47552638/article/details/122237126
筆者的解決方法(CmakeList.txt修改結(jié)果)
4.5 問題5---報錯[lio_sam_imuPreintegration-2]
解決方法:
cd /usr/local/lib/
sudo cp libmetis.so /opt/ros/noetic/lib/
補充:如果安裝了其他版本的gtsam,查看/usr/local/lib/目錄下是否有l(wèi)ibmetis-gtsam.so,如果有,同樣拷貝到/opt/ros/noetic/lib/目錄下。
筆者當(dāng)時參考的鏈接:
LIO-SAM運行報錯[lio_sam_imuPreintegration-2]和[lio_sam_mapOptmization-5]解決_啟動lio_sam功能包出現(xiàn)"package 'lio_sam' not found, search_花雨仙晨的博客-CSDN博客文章瀏覽閱讀1.9k次,點贊2次,收藏15次。激光SALM框架LIO-SAM算法編譯運行。_啟動lio_sam功能包出現(xiàn)"package 'lio_sam' not found, searching: ['/opt/ros/foxhttps://blog.csdn.net/qq_36812406/article/details/126247621補充:其他問題可以直接從網(wǎng)上找答案,如果遇到?jīng)]有人問及的問題,可以考慮gtsam問題,建議安裝筆者推薦的gtsam,并在安裝前進(jìn)行清理,防止后續(xù)多版本的gtsam編譯運行交叉產(chǎn)生問題。
5. 運行LeGO-LOAM和LIO-SAM
最后放上算法運行結(jié)果。
LeGO-LOAM(KITTI07)
文章來源:http://www.zghlxwxcb.cn/news/detail-861200.html
LIO-SAM(Park)文章來源地址http://www.zghlxwxcb.cn/news/detail-861200.html
到了這里,關(guān)于Ubuntu20.04安裝LeGO-LOAM和LIO-SAM的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!