目录
一、前言
二、硬件与系统
三、建立自己的工作空间
四、安装LIO_SAM
安装LIO_SAM:
试跑LIO_SAM
点云地图保存
近期在学习如何使用一些Slam算法建立自己的地图,最终决定从LIO_SAM这个比较成熟的基于激光雷达的SLAM开始做起,在这里将自己从他硬件配置到环境安装最后到软件编译过程中遇到的一些问题踩过的一些坑记录下来。由于本人是刚刚开始学习相关领域知识的小白,能力有限,文章中的错误欢迎批评指正,如有侵权请联系我删除相关内容。
在运行这一程序的时候,由于各种各样的原因,这一套使用方法我在两台机器上都尝试运行过,现在将两台机器的配置都说一下。首先是我主要工作的一个台式机,cpu是十代I5,没有独立显卡,8G内存。另一台机器是安装在autolabor小车上的工控机,处理器是AMD的Ryzen3,同样的没有显卡以及8G内存。
操作系统统一都是Ubuntu18.04,使用ros melodic。在这里我插一句,之前我一直使用的都是Ubuntu20.04,不得不说,那个版本的UI虽然好看,实际工作时总是碰上莫名其妙的报错,还是一些疑难杂症难以解决,同样的操作在别人18.04版本就可以成功,无奈忍痛放弃了好看的UI和壁纸。
激光雷达采用的威力登(Velodyne)16线激光雷达,IMU采用的网上购买的WHEELTEC的一款九轴IMU模块(这里需要特别注意的是在前期采购硬件的时候注意到有人提到Lio_sam只支持九轴IMU,这里并没有使用其他的IMU进行尝试,有使用其他IMU配置的欢迎反馈可不可以成功)
关于ros常规安装方法在此不再赘述,网上的教程很多,没有安装的在这里推荐一个网上的办法,可以一键安装ros,我在最近重装后尝试过亲测有效又好使。需要注意的是虽然是一键安装但是在安装时还是有选项需要手动输入的,最重要的是确认好自己的ubuntu版本需要安装什么版本的ros即可
wget http://fishros.com/install -O fishros && sudo bash fishros
由于我的实验平台工控机上有其自带的工作空间,故为了方便起见,新建了一处工作空间,专门安放Lio_sam的相关文件程序。
首先在主目录(或者其他地方)下打开终端,建立工作空间,以后的文件都在该工作空间下操作。
mkdir catkin_ws
cd catkin_ws
mkdir src
catkin_make
首先安装相关的ROS依赖:
sudo apt-get install -y ros-melodic-navigation
sudo apt-get install -y ros-melodic-robot-localization
sudo apt-get install -y ros-melodic-robot-state-publisher
LIO_SAM需要因子图优化库gtsam。此处安装gtsam:
在浏览器网址栏输入:
https://ghproxy.com/https://github.com/borglab/gtsam/archive/4.0.2.zip
应该会弹出zip的压缩包的下载。在下载后将文件解压在需要的位置,这里不必将其解压在工作空间下。进入解压后的文件夹,打开终端。下面为README文件里给出的安装流程:
mkdir build
cd build
cmake ..
sudo make
make install
我在照此安装时,在后续编译LIO_SAM时出现了问题,给出参考博客的安装命令:
mkdir build && cd build
cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF ..
sudo make install -j8
各位可以尝试上面的安装方法,此方法我未试过,如果仍然报错,可以尝试下在后面给出的一种办法。
根据参考博客,gtsam建议安装4.0.2版本,其他版本可能会发生未知错误。
首先进入之前建立好的工作空间下的src文件夹,打开终端:
//将文件克隆到工作空间下的src文件夹中
git clone https://ghproxy.com/https://github.com/TixiaoShan/LIO-SAM.git
cd ..
catkin_make
在这个过程中我遇到报错,核心的报错信息如下:
Cannot locate rosdep definition for [gtsam]......(报错信息忘记拍照了。。)
主要是因为前面的安装的gtsam遇到了问题。尝试了网上的一些办法,均没有效果。可能是我的gtsam没有正常安装导致的报错,我又重装了几遍gtsam仍然没有用。
最后出于无奈,尝试了一种比较危险的修改方式,打开lio_sam文件夹下的CMakeLists文件,找到:
catkin_package(
INCLUDE_DIRS include
DEPENDS PCL GTSAM
CATKIN_DEPENDS
std_msgs
...
...
我将上述程序中的GTSAM注释掉了,我本想着这个操作肯定会导致后面出现问题,报这试试看的态度尝试的。但是没想到,编译成功后到后期建图成功都没遇到什么问题,但是还是不敢确定这个操作会不会带来什么隐性的问题,所以实在没办法再采用这个办法吧。而且,一定要做好标记,以便于提醒后期是什么都忘掉的自己,比如:
#这这这!!!!!!这里,这里注释掉了一个东西!!!
catkin_package(
INCLUDE_DIRS include
DEPENDS PCL #GTSAM
CATKIN_DEPENDS
std_msgs
...
...
到这里,如果catkin_make成功的话,恭喜。
此外,在后续运行launch文件时还经常需要source命令,如果觉得麻烦的可以试一下这个命令:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
将source变成打开终端自动运行,省去每次都要source的问题。如果不使用这个方法(比如我),记得运行报错先检查是否source。
下面下载数据集尝试跑一下LIO_SAM
由于原链接下载速度实在是太让摸鱼人感动了,在这里给出百网盘的链接:
链接: https://pan.baidu.com/s/1_E-UuDuPie4GYSB3bPEeAg
提取码: n6r8
可以拜求身边有会员的大佬,有效拜求下载速度+2000%。
下载好数据包后,记好存放的位置即可,我把它放在了src文件夹下新建的data文件夹中了。
下面在工作空间下启动程序,测试lio_sam。
//需要source的要把注释里这句加上
//source devel/setup.bash
roslaunch lio-sam run.launch
在这里我又发生报错了,又是gtasm,gtasm装不好真的头疼。
在网上到了解决方案和解释,先将其错误信息以及说明等引用如下:
process[lio_sam_mapOptmization-5]: started with pid [10295]
/home/jone/jone_ws/devel/lib/lio_sam/lio_sam_mapOptmization: error while loading shared libraries: libmetis.so: cannot open shared object file: No such file or directory
[lio_sam_imuPreintegration-2] process has died [pid 10294, exit code 127, cmd /home/jone/jone_ws/devel/lib/lio_sam/lio_sam_imuPreintegration __name:=lio_sam_imuPreintegration __log:=/home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_imuPreintegration-2.log].
log file: /home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_imuPreintegration-2*.log
[lio_sam_mapOptmization-5] process has died [pid 10295, exit code 127, cmd /home/jone/jone_ws/devel/lib/lio_sam/lio_sam_mapOptmization __name:=lio_sam_mapOptmization __log:=/home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_mapOptmization-5.log].
log file: /home/jone/.ros/log/26ccf03a-2997-11ed-8e43-49590f7f8a53/lio_sam_mapOptmization-5*.log
上面这段是错误信息
报错找不到 libmetis.so 这个文件
这个和 gtsam 编译时候的 方法有关
实际问题是库文件libmetis.so 的位置。它是一个运行时库,但是当应用程序查找它时,它的位置不在预期的目录中。在通过运行命令sudo make install -j8安装库gtsam 时,文件libmetis.so安装在/usr/local/lib/的默认位置,但是当我们启动 ros 工作区时,运行时库查看位置/opt/ros/noetic/lib/
sudo cp usr/local/lib/libmetis.so usr/lib/libmetis.so
可以解决这个问题
原文链接:
实测 ubuntu 20.04 编译LIO-SAM问题与解决办法_月照银海似蛟龙的博客-CSDN博客_error: cannot launch node of type [robot_localizat
文章中还提到了很多编译时的报错,虽然是20.04版本,但是对18.04的也有启发作用。遇到的可以看看这篇文章。
运行不在报错后,会弹出rviz,这时播放我们之前下载好数据包:
rosbag play ~/catkin_ws/src/data/casual_walk.bag
如果数据包不在这个路径记得改成实际的路径。
不出意外,你将会看到下面的画面,Congratulations!
既然程序已经可以运行,还缺最关键的步骤,如何把我们的点云地图保存下来的?
首先,需要修改params.yaml中的参数。params.yaml文件如果你和我的安装路径相同那他应该在catkin_ws/src/LIO-SAM/config文件夹下。修改文件中SavePCD参数,将它后面的值改为true ,同时保存地址设置一下。然后,为了避免保存还没完成,ros就已经关闭了节点,需要设置_TIMEOUT_SIGINT的值。按如下命令打开文件:
sudo gedit /opt/ros/melodic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py
在文件中找到_TIMEOUT_SIGINT,并设置为100秒。
这样,在命令窗口中按下Ctrl+C来结束run.launch的运行时,便会自动将pcd文件保存到指定地址。
保存的pcd点云图,可以用在文件目录打开终端,输入pcl_viewer xxx.pcd来打开查看。
参考博客:https://blog.csdn.net/qq_41690864/article/details/118711743
https://blog.csdn.net/qq_32761549/article/details/126640468