实验室有一个大疆的MID360半固态激光雷达,需要我来探索一个建图效果较好的三维SLAM算法。但是由于是半固态雷达,雷达输出的点云数据格式与普通的多线激光雷达有一些区别,目前业界的激光雷达算法好多都是基于Velodyne的多线雷达格式做的适配,因此在适配LIO-SAM时会遇到诸多问题。
一、适配LIO-SAM
LIO-SAM算法对激光雷达的数据格式有着较为严格的要求,以往的单激光雷达建图的算法没注意到这一点,一般要求的是XYZI(x, y, z, intensity ) 格式即可,但是LIO-SAM要求的是 XYZIRT(x, y, z, intensity, ring, timestamp) 格式,即算法内使用了激光雷达的通道数ring参数和时间戳timestep参数,启动算法时会检查是否具有这两个参数,而MID360雷达的输出格式中没有ring与time这两个参数。进一步的,LIO_SAM要用9轴IMU,而MID360内置的IMU是六轴IMU😭。
因此要想适配MID360需要改源码,感谢万能的github,已经有人做好了适配,链接如下:https://github.com/nkymzsy/LIO-SAM-MID360.git也可输入以下命令gitclone到ROS工作空间下的src文件夹下内:
git clone https://github.com/nkymzsy/LIO-SAM-MID360.git
如果gitclone的速度太慢,这里有一个小技巧,那就是将github改为githubfast,亲测有效。
git clone https://githubfast.com/nkymzsy/LIO-SAM-MID360.git
之后要安装Livox-SDK(在工作空间外安装)
git clone https://github.com/Livox-SDK/Livox-SDK.git
cd Livox-SDK
cd build && cmake ..
make
sudo make install
还要在src下下载livox_ros_driver 也就是livox雷达的驱动包:
git clone https://github.com/Livox-SDK/livox_ros_driver.git
接下来还需要对LIO-SAM的代码做一点修改,第一处位于src/LIO-SAM-MID360-master目录下,双击打开CMakeLists.txt文件,请将第5行的c++11改为c++14,保存后退出,如下图所示:
第二处位于src/LIO-SAM-MID360-master/include目录下,双击打开utility.h文件,请将第18行的#include <opencv/cv.h>使用”//“注释掉,并添加以下内容:
”#include <opencv2/opencv.hpp>“
还有一个可能报错的地方,解决方法是将下图中的26行的内容注释掉放到第18行。
接下来在工作空间目录下catkin _make应该没有报错了。最后就可以运行LIO-SAM建图了:
source devel/setup.bash
roslaunch lio_sam run6axis.launch
然后启动MID360的驱动
source devel/setup.bash
roslaunch livox_ros_driver2 msg_MID360.launch
如果手里现在没有雷达,也可以播包:
rosbag play mid360.bag
录制rosbag包的命令是(以下是录制所有的主题,-o 后的参数要换成你自己的bag包储存地址):
rosbag record -O /home/lingao/mid360_bag/my.bag `rostopic list`
如果只录制imu和雷达数据则输入命令:
rosbag record -O /home/lingao/mid360_bag/my.bag /livox/imu /livox/lidar /clock
二、适配FAST-LIO2
由于FAST-LIO2本身就对LIVOX系列的雷达做了一定的适配,因此对源码基本不需要修改,直接在src里gitclone下来:
git clone https://github.com/hku-mars/FAST_LIO.git
同样的也需要下载livox_ros_driver:
git clone https://github.com/Livox-SDK/livox_ros_driver.git
然后初始化和更新一个仓库中的子模块:
git submodule update --init
编译
cd ../..
catkin_make
这里我的环境是Ubuntu 20.04 ROS Noetic,所以需要将src/FAST_LIO中的CMakeLists.txt中的C++版本改为14,这样编译就能通过了。
接下来运行fast-lio2:
source devel/setup.bash
roslaunch fast_lio mapping_mid360.launch
然后播包
rosbag play mid360.bag
可以看到建图效果还是不错的,整个楼层没有大的漂移。而反观LIO-SAM这边,顶楼走廊到楼梯那建的都还可以,但是下了楼后高度定位出现了问题,一直还定位到顶楼,最后直接建飞了,把楼层建成了平行宇宙🤣。。。。有可能是我用的是别人录制的rosbag包的原因,IMU与雷达内参没有校准。
建图对比视频
评论区有大佬指出关闭LIO-SAM回环会好很多,我找了一下,配置文件在lio_sam_mid360_ws/src/LIO-SAM-MID360-master/config下的paramsLivoxIMU.yaml里。将“loopClosureEnableFlag”的“false”改为“true”,然后不用编译直接运行看一下。
果然有用诶,成功建图,而且从图中效果可以看出细节上比FAST-LIO2要好很多,楼旁边的树和周围楼的墙壁都给建出来了。
帅哥,你好,我编译的时候出现fatal error: livox_ros_driver/CustomMsg.h: 没有那个文件或目录
include “livox_ros_driver/CustomMsg.h”的错误
你单独装 livox_ros_drive这个包了吗,我提供两个方案,我不知道你是编译的哪个包,一是在fas-lio2或者lio-sam工作空间的src下也克隆一下livox_ros_drive的源码,然后一块编译;第二个就是如果你单独编译过了livox_ros_drive这个包,编译fast-lio2或者lio-sam前先source一下livox_ros_drive工作空间下的devel/setup.bash,然后应该就不报错了
你搞定了吗?
大佬我有个问题,运行mid360的时候需要livox_ros_drive2,运行lio_sam时又要用livox_ros_drive,那不是两个都要下?有没有只用drive2版本的?
如果不改源码的话是这样的,你也可以都用driver2,但是要改源码,把引用driver1头文件都改成driver2的
大佬我是播放采集的mid360数据 在播放数据的中断报错[ERROR] [1713964096.468521453]: Client [/lio_sam_imageProjection] wants topic /livox/lidar to have datatype/md5sum [livox_ros_driver/CustomMsg/e4d6829bdfe657cb6c21a746c86b21a6], but our version has [sensor_msgs/PointCloud2/1158d486dd51d683ce2f1be655c3c181]. Dropping connection.
然后rviz没有显示,请问这个是什么问题呢
应该是消息类型没对上,期望接收到的数据类型是 livox_ros_driver/CustomMsg,但实际发布的数据类型是 sensor_msgs/PointCloud
博主您好,我现在是能够成功运行LIO-SAM-MID360,什么配置文件都没有改,但是雷达放在桌子上不动运行算法时定位一直在飘,这可能是什么原因?
我跑起来也飘,但是不会一启动就飘欸,看看外参内参对吗,cpu负载高吗,然后试着把回环关了试试
谢谢佬!
您好同学,请问你解决了这个问题了么,我也遇到了类似的,放在桌子上就会乱飞
不好意思刚收到邮件。问题还没解决,这段时间在忙其他的。我估计应该是没参数标定。请问您解决了吗