【SLAM经典算法详解】Ubuntu 20.04部署LeGO-LOAM:从环境配置到KITTI适配,解决常见编译错误

发布于:2025-04-04 ⋅ 阅读:(35) ⋅ 点赞:(0)

一、环境准备与ROS安装

1.1 系统要求与双系统安装

首先,LeGO_LOAM肯定是基于ros进行的,所以我们要装好ubuntu系统,我这里安装的是ubuntu20.04,这是最后一个支持ros的Ubuntu发行版了,ROS Noetic Ninjemys安装的过程我们可以按照ros官网的教程来安装,最好安装比较全的版本。

最好可以去ros官网安装一下,可以让我们更了解ros的发展历程和版本迭代cn/ROS/Installation - ROS Wiki

视频教程推荐:当然,如果你的ubuntu系统还没有装好,我建议去b站看机器人阿杰的视频,他教的双系统安装可以说是非常非常nice,但显卡的驱动也可以不按照他说的必须安装nvidia的,也可以安装软件商店里的。

ros安装好之后,我们要从这里开始复现LeGO_LOAM了,由于各种库文件的版本迭代,会有很多报错,下面的内容,大致包含了在Noetic上的会报的所有错误了。

二、依赖环境配置

LeGO_LOAM本身是利用了一些第三方库来简化代码工作的,比如gtsam,tbb,boost等等,我们要想让代码顺利运行起来,第一步就是要安装好这些第三方库,解决好这个对第三方库的依赖问题。

2.1 基础依赖安装

要安装一些依赖库,用apt安装就可以

sudo apt-get install libboost-all-dev
sudo apt-get install cmake
sudo apt-get install libtbb-dev
sudo apt-get install libparmetis-dev

2.2 GTSAM编译安装

我们还要编译安装gtsam,这是LeGO_LOAM中用于图优化的库,这在LeGO_LOAM中发挥了很重要的作用。随便找一个文件夹,克隆一下gtsam,注意我们安装第三方库的时候,涉及到了两种方法,一种是直接应用apt来安装,另一种就是安装gstsam的方法,从github上把代码克隆下来,然后进行编译安装,但是我们最终都是安装到了系统上,所以当第三方库已经安装完成时,我们可以把刚刚这个临时文件夹删掉,不会影响已经安装的库的使用。

git clone https://github.com/borglab/gtsam.git
mkdir build
cd build
cmake ..
make check (optional, runs unit tests)
make install

然后我们可以克隆LeGO_LOAM库,首先创建一个工作空间,工作空间的名字可以随便起,但是既然是一个工作空间的话,里面一定要有src文件夹,我们在工作空间的src目录中克隆LeGO_LOAM源代码。

mkdir LeGOLAOM_ws
cd LeGOLAOM_ws
mkdir src
cd src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make

catkin_make是编译指令,并且这个编译指令需要在工作空间目录下进行的,这一点一定要注意,而且工作空间下一定要有一个src,legoloam的源代码放在src目录下,才能开始编译(编译一上来就会找src的)

三、LeGO-LOAM源码编译与排错

3.1 创建工作空间

现在我们可以克隆LeGO_LOAM库,首先创建一个工作空间,工作空间的名字可以随便起,但是既然是一个工作空间的话,里面一定要有src文件夹,我们在工作空间的src目录中克隆LeGO_LOAM源代码。

mkdir LeGOLAOM_ws
cd LeGOLAOM_ws
mkdir src
cd src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make

catkin_make是编译指令,并且这个编译指令需要在工作空间目录下进行的,这一点一定要注意,而且工作空间下一定要有一个src,legoloam的源代码放在src目录下,才能开始编译(编译一上来就会找src的)

3.2 常见编译错误解决方案

虽然源码已经准备好了,但是在这里进行编译的话,大概率还会报错,反正我是遇到了,第一个是opencv的依赖问题

错误1:OpenCV头文件缺失

现象

opencv/cv.h: No such file or directory

image-20250114171035779.png

解决方案: 我们需要改一下代码里的这一部分,把include/utility.h中的opencv改一下,

// #include <opencv/cv.h>
#include <opencv2/imgproc.hpp>

这样就能找到ubuntu20.04所带的opencv了,这其实是一个版本问题,如果我们使用的是 OpenCV 3.x 或者更高版本就很容易碰见这个问题,<opencv/cv.h> 是一个旧版本的头文件路径,已经被拆分为多个模块化头文件,并且这些头文件存放的位置也发生了变化,所以这里有所改变。

错误2:C++标准版本过低

改完opencv之后并没有完事大吉,当我再次进行编译时,我又遇到了新问题,就是这个关于PCL的报错内容

现象

#error PCL requires C++14 or above

解决方案

这个提示我们可以很明显的看到提示,这里的报错提示说PCL需要c++14或以上,但代码里只支持了C++11,这就是产生错误的原因,所以需要我们改一下,避免PCL出现异常。

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")

把上面的改成下面的就解决了PCL库的报错问题。

错误3:Boost组件缺失

随后我又遇到了关于Boost的报错,这个意思其实也很明显,主要是说有一些boost的组件找不到,即依赖项找不到,如下图所示

现象

image-20250114200319022.png

解决方案: 找不到这几个东西,那我们就在CMakelists.txt里面改一下,添加一句

find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)

这样find_package就能找到Boost的这些组件,最后链接到代码上去。

然后再进行catkin_make,就能编译成功啦,编译成功之后应该可以在工作空间下看到一个新的devel和build文件夹,这里面有关于编译的所有内容。

image-20250114172306270.png

最后需要进行就是运行代码了,按照github上的教程来就好。

一定要记得在运行前source一下source devel/setup.bash ,当然如果我们觉得每次运行都得重新source很麻烦,可以将这个source指令写入.bashrc中,以后就不用每次都进行source了。写入方式也不难,我们直接编辑.bashrc文件就好。

vim ~/.bashrc
在文件末尾加入下面的代码
source /path/to/your/ros_workspace/devel/setup.bash

关于这个.bashrc文件,它是在每个终端打开时进行自动进行的source,所以我们以后任意打开终端,都不用再source了。如果我们想它在当前终端中立即生效的话,我们需要手动source一下,即

source ~/.bashrc

然后如图所示输入roslaunch指令roslaunch lego_loam run.launch,legolaom就运行起来了。

点击【SLAM经典算法详解】Ubuntu 20.04部署LeGO-LOAM:从环境配置到KITTI适配,解决常见编译错误查看全文