在Ubuntu 20.04上安装和运行LeGO-LOAM确实是一个充满挑战的过程,期间可能会遇到不少问题。在这里记录并分享我的经验,希望能为有需要安装和编译该算法的朋友们提供一个全面的参考指南。
本文在上一篇博客的基础上安装,确保已安装相关的依赖。相关依赖可参考笔者的上一篇博客:
【SLAM】Ubuntu20.04 Noetic下用Kitti数据集运行A-LOAM(保姆级教程,小白也能看懂并复现)
目录
1.1卸载其他版本的gtsam(之前如果没有安装过gtsam,可以跳过此步)
一、安装gtsam
1.1卸载其他版本的gtsam(之前如果没有安装过gtsam,可以跳过此步)
如果之前已安装过 gtsam,建议先将其卸载干净。这样做可以避免版本冲突,防止在后续的编译过程中遇到潜在问题。具体步骤如下:
1.打开“其他位置/计算机/usr/local/lib”,在该目录下搜索框中输入gtsam,将这些文件全部删除,高版本的gtsam还需要删除libmetis-gtsam.so文件。
2.打开“其他位置/计算机/opt/ros/noetic/lib”,删除libmetis.so文件,高版本的gtsam若有libmetis-gtsam.so文件,同样需要删除。
1.2gtsam安装
特别说明:若已安装Anaconda,强烈建议删除之后再进行以下安装(笔者之前就是因为这个原因出现编译错误)。如下所示:
将Anaconda删除后成功编译。
这里选择安装gtsam-4.0.0-alpha2版本(以便后续需要安装LIO-SAM算法):
在终端输入以下命令进行下载:
wget https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
下载完成后将文件解压提取到任意目录(如主目录下),在gtsam-4.0.0-alpha2目录下打开终端,依次输入:
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF -DGTSAM_USE_SYSTEM_EIGEN=ON ..
sudo make install -j12
(-j12 --- 同时使用12个线程进行编译,加快编译速度,但要根据自己电脑的CPU核心数量进行调整)
至此,gtsam4.0.0-alpha2已安装完成!
二、下载并编译LeGO-LOAM源码
2.1下载源码
创建一个名为 lego_loam 的ROS工作空间,并下载LeGO-LOAM源代码。以下是创建工作空间和下载源代码的步骤:
1.在主目录下打开终端,使用 mkdir 指令创建工作空间文件夹(一定要有src文件夹):
mkdir -p ~/lego_loam/src
2.切换到工作空间目录:
cd ~/lego_loam/src
3.克隆LeGO-LOAM源代码到src文件夹:
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
2.2修改源码
1.打开./lego_loam/src/LeGO-LOAM/LeGO-LOAM/include/utility.h,将#include <opencv/cv.h>改为:
#include<opencv2/imgproc.hpp>
2.打开./lego_loam/src/LeGO-LOAM/LeGO-LOAM/CMakeLists.txt,将c++11改为c++14,如下图所示:
2.3编译
在~lego_loam文件夹(工作空间)下打开终端:
catkin_make
2.4编译问题解决
在上一步编译中经常会出一些报错(下面是一些可能出现的报错及解决方法):
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++)
解决方法:
在指定目录下,“其他位置/计算机/usr/include/pcl-1.10/pcl/filters”,修改voxel_grid.h文件:
打开终端(ctrl+alt+t),输入:
cd /usr/include/pcl-1.10/pcl/filters
sudo gedit voxel_grid.h
把340和669行的:
for (Eigen::Index ni = 0; ni < relative_coordinates.cols (); ni++)
改为:
for (int ni = 0; ni < relative_coordinates.cols (); ni++)
如图:
参考 Ubuntu20.04安装LeGO-LOAM和LIO-SAM
修改后保存。
2.找不到-lBoost::
解决方法:
打开./lego_loam/src/LeGO-LOAM/LeGO-LOAM/CMakeLists.txt,添加依赖项,即添加下列代码:
find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)
find_package(Boost REQUIRED COMPONENTS system filesystem date_time)
再次在~lego_loam文件夹(工作空间)下打开终端:
catkin_make
编译成功!
三、准备数据集
笔者已准备好.bag文件
链接: https://pan.baidu.com/s/1QfSrI4JqPwdENZCqCp9Gsg?pwd=6789
提取码: 6789
四、运行
1.初始化(在工作空间文件夹下如:lego_loam)
source devel/setup.bash
2.运行LeGO-LOAM
roslaunch lego_loam run.launch
注:每次运行之前都需要先初始化,source devel/setup.bash,若想直接运行可以把自己的lego_loam/devel/setup.bash文件的绝对路径添加到.bashrc文件中。如:
echo "source /home/lc/slam/lego_loam/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.运行数据集(在数据集所在的文件夹下重新打开一个终端)
rosbag play *.bag --clock --topic /velodyne_points /imu/data
//*用需要运行的数据集替换,如:
rosbag play 2017-06-08-15-49-45_0.bag --clock --topic /velodyne_points /imu/data
解决方法:把代码中(./slam/lego_loam/src/LeGO-LOAM/LeGO-LOAM/src)与rviz相关的Topic的反斜杠给去掉重新编译即可。
以Surface(yellow)为例,把代码(featureAssociation.cpp)中的/laser_cloud_flat改为laser_cloud_flat。(ctrl+f查找后替换)
运行结果:
【参考链接】
LeGO-LOAM:Ubuntu20.04下的编译与运行-CSDN博客
ubuntu20.04中实现lego-loam-CSDN博客
Ubuntu20.04安装LeGO-LOAM和LIO-SAM-CSDN博客
标签:Ubuntu20.04,lego,LOAM,LeGO,编译,loam,gtsam From: https://blog.csdn.net/m0_69788330/article/details/144651159