本文是对自己学习过程的一个记录和总结,如果内容有误,请大家指点,感谢。
注意:
本文是在已经安装好ROS环境中进行的,不需要提前安装其他库,只需按照步骤进行操作,便能完成LIO-SAM的编译和运行,并且每一步都有我执行时的截图进行参考。
第一步【创建工作空间并下载LIO-SAM源码包】
1.【创建工作空间】
首先我们使用快捷键ctrl+alt+T打开一个终端,执行第一行命令后会创建一个嵌套文件夹,执行第二行命令后进入到嵌套文件夹中的src目录下,第三行命令是初始化工作空间。
mkdir -p lio_sam_ws/srccd lio_sam_ws/src/catkin_init_workspace
2.【下载LIO-SAM源码包】
继续在此终端中执行以下命令,将会从github官网上克隆LIO-SAM的源码包,这个过程会受网络的影响。
git clone https://github.com/TixiaoShan/LIO-SAM.git
注意: 和上图一样的结果,请跳过这里。如果尝试多次都没有克隆成功,请访问这个网址https://github.com/TixiaoShan/LIO-SAM,在这个页面中点击Code,并点击下载zip文件,此文件下载完成后默认放在用户目录的Downloads文件夹中。先解压此文件,解压后的文件名为LIO-SAM-master,请改名为LIO-SAM后,把LIO-SAM剪切到刚创建的的src文件夹下。
3.【回到lio_sam_ws目录下】
cd ..
第二步【安装依赖库】
1.【ros版本号是noetic】
sudo apt-get install -y ros-noetic-navigationsudo apt-get install -y ros-noetic-robot-localizationsudo apt-get install -y ros-noetic-robot-state-publisher
2.【GTSAM的版本号是4.1】
第一行命令执行到中间时,需要按回车键确认,第二行命令执行到中间时,需要输入y按回车键,如下图所示。
sudo add-apt-repository ppa:borglab/gtsam-release-4.1sudo apt install libgtsam-dev libgtsam-unstable-dev
第三步【编译】
1.【初次编译报错】
执行以下命令,结果如下图中第二张图所示:
catkin_make
出现此报错是因为版本问题,在使用opencv库时,书写格式做了调整,接下来先对以下两处地方进行修改。
第一处位于lio_sam_ws/src/LIO-SAM目录下,双击打开CMakeLists.txt文件,请将第5行的c++11改为c++14,保存后退出,如下图所示:
第二处位于lio_sam_ws/src/LIO-SAM/include目录下,双击打开utility.h文件,请将第18行的#include <opencv/cv.h>使用//注释掉,并添加以下内容,保存后退出,添加后如下图所示:
#include <opencv2/opencv.hpp>
2.【再次编译】
catkin_make
如果不出意外,您还会收获两个报错,报错信息如下图所示,如果直接编译成功,恭喜跳过此步骤。
此处报错有时候会提示,让把flann库放到OpenCV前面去,确实这里的解决办法也是如此,同样是修改lio_sam_ws/src/LIO-SAM/include目录下的utility.h文件,将下图中的27行使用//注释掉,并复制这行到下图18行去,保存后退出。
3.【再再此编译】
这次该成功了哈,再不成功就再去找找办法哦
catkin_make
第四步【运行LIO-SAM】
1.【配置环境变量】
echo "source ~/lio_sam_ws/devel/setup.bash" >> ~/.bashrc
在下图中,我的终端已经不在lio_sam_ws目录下了,无论在哪都不影响这里的操作的,您只管放心在您终端里执行上面命令就好。
2.【运行】
注意啊:要重新打开一个终端,刚配置的环境变量在新打卡的终端中才是生效的。
roslaunch lio_sam run.launch
运行结果如下图所示,现在Rviz中啥都没有,不用关闭终端和rviz,我们只需要去github上再下载一个数据包进行播放即可。
第五步【下载数据包】
同样是访问这个网站https://github.com/TixiaoShan/LIO-SAM,在这个网站下面有数据包的链接,您可以点击链接进行下载,如下图所示,前三个链接的数据包甚至都不用您修改LIO_SAM任何参数就能使用。
第六步【播放数据包】
在数据包所在的目录下打开一个终端,使用以下命名,请把name更换为您的数据包名。
rosbag play name