Ubuntu20.04安装LIO-SAM真是挺折磨人的,填了一路的坑,在此记录分享一下,为大家安装编译算法提供一个全面的参考。
1. GTSAM安装
1.1 GTSAM安装准备
由于笔者之前在安装LeGO-LOAM算法时安装了4.2版本的GTSAM,后续又辗转安装了4.1版本的GTSAM、4.02和4.03版本的GTSAM,导致在安装LIO-SAM时需要填很多坑。
所以,在此提醒大家,如果已经安装了较高版本的GTSAM,后续LIO-SAM在编译时不报错,在跑数据集时,终端一直提示error:[lio_sam_mapOptmization-5] ........[pid 29650, exit code -6,这是由于gtsam版本混乱造成的,请先清理一下gtsam,具体操作如下:
1.1.1 目录/usr/local/lib下清理gatsam
在usr/local/lib目录下打开终端,删除下图中选中的文件,高版本的gtsam可能还会有libmetis-gtsam.so等文件需要删除,将名字带有gtsam的文件删除即可:
删除指令:
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安装准备工作完成。
1.2 GTSAM安装过程
查阅了大多数论坛博客,有说ubuntu20.04需要安装4.03版本以上的GTSAM,有说4.2版本GTSAM满足编译要求的。实际上确实是满足编译要求,但是运行时容易产生**[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提取出来,放到主目录下即可,根据自己喜好放到指定位置:
提取
放到指定位置
然后,在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的编译与数据集调试_牙刷与鞋垫的博客-CSDN博客文章浏览阅读561次,点赞2次,收藏4次。在已开启终端中输入以下内容。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节的情况一,在CmakeList.txt中,把c++11改为14。
前面两种问题为常规问题,接下来重点介绍特殊问题。
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节。找不到什么,就添加什么,附上笔者当时参考的链接:
关于LIO-SAM编译时出现错误 /usr/bin/ld: 找不到 -lBoost::timer-CSDN博客文章浏览阅读2.1k次,点赞16次,收藏35次。关于LIO-SAM编译时出现错误:下载LIO-SAM代码进入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修改结果)
4.5 问题5---报错[lio_sam_imuPreintegration-2]
解决方法:
cd /usr/local/lib/
sudo cp libmetis.so /opt/ros/noetic/lib/
补充:如果安装了其他版本的gtsam,查看/usr/local/lib/目录下是否有libmetis-gtsam.so,如果有,同样拷贝到/opt/ros/noetic/lib/目录下。
笔者当时参考的链接:
LIO-SAM运行报错[lio_sam_imuPreintegration-2]和[lio_sam_mapOptmization-5]解决_启动lio_sam功能包出现"package 'lio_sam' not found, search_花雨仙晨的博客-CSDN博客文章浏览阅读1.9k次,点赞2次,收藏15次。激光SALM框架LIO-SAM算法编译运行。_启动lio_sam功能包出现"package 'lio_sam' not found, searching: ['/opt/ros/foxhttps://blog.csdn.net/qq_36812406/article/details/126247621**补充:**其他问题可以直接从网上找答案,如果遇到没有人问及的问题,可以考虑gtsam问题,建议安装笔者推荐的gtsam,并在安装前进行清理,防止后续多版本的gtsam编译运行交叉产生问题。
5. 运行LeGO-LOAM和LIO-SAM
最后放上算法运行结果。
LeGO-LOAM(KITTI07)
LIO-SAM(Park)
版权归原作者 NIgori_MrW 所有, 如有侵权,请联系我们删除。