在利用lio-sam代码运行自己的数据包时,若自己的雷达是速腾雷达,一定会遇到一个问题:那就是采集到的数据不可以直接用,因为速腾的点云数据与Velodyne有一定的不同。然后对于lio-sam,它对激光雷达的数据格式有要求,考虑到与IMU时间同步问题,源码中会检查激光雷达的ring通道和时间戳是否符合要求。即x, y, z, intensity, ring, timestamp格式。下面是自己在转换点云格式遇到的种种问题的总结,希望能帮助到大家。
环境:ubuntu18.04,速腾RS-16
一、雷达驱动下载
对于rslidar_sdk的下载与连通速腾雷达的教程,可以看这篇文章。
Ubuntu测试使用速腾RS-Lidar-16_冈部伦太郎.的博客-CSDN博客
当速腾雷达驱动安装成功后,在确认一些东西,就可以开始解决点云数据转换的问题了。
①进入你下载好的rslidar_sdk功能包里,打开CMakeLists,查看set(POINT_TYPE XYZIRT)与set(COMPILE_METHOD CATKIN)后面的格式是否已经改成XYZIRT 和 CATKIN了
② 将rslidar_sdk工程目录下的package_ros1.xml文件重命名为package.xml。若有了就不需要做这步
ok,现在可以开始做点云数据转换了。
二、安装rs_to_velodyne转化节点
进入安装速腾雷达驱动的功能包的src目录中,输入
git clone https://github.com/HViktorTsoi/rs_to_velodyne.git
这里注意一下,如果之前你一直跟着我推荐的链接步骤做的话,那么你现在就是需要在 ~/lidar/src目录下输出这个指令,或者是你自己命名的工作空间中。比如这次我是在RS_SDK文件夹下安装的驱动,则我现在就在~/RS_SDK/src下输入指令。如图。
如果这边位置放错之后可能会显示找不到功能包XXX的launch文件!
ok,克隆完毕编译一下。
cd ..
catkin_make
然后进入rs_to_velodyne文件夹下创建launch文件夹。
cd src/rs_to_velodyne
mkdir launch
进入launch文件夹中创建文件,名字任意。
cd launch
gedit rs2velodyne.launch
在launch中输入下列内容保存退出
<launch>
<node pkg="rs_to_velodyne" name="rs_to_velodyne" type="rs_to_velodyne" args="XYZIRT XYZIRT" output="screen">
</node>
</launch>
注意args参数,采集XYZIRT格式的点输入XYZIRT,采集XYZI格式的点输入XYZI,lio-sam要求XYZIRT,所以这里输入XYZIRT。
现在就可以运行launch文件测试一下了。
source ~/RS_SDK/devel/setup.bash
roslaunch rs_to_velodyne rs2velodyne.launch
若显示如下,说明velodyne点云转换驱动已经安装完成!记得查看一下话题!
新开窗口输入
rostopic list
能看到/velodyne_points就说明成功了。
三、转化节点与雷达驱动同时启动设置
cd ~/RS_SDK/src/rslidar_sdk/launch
gedit start.launch
加入这段话
<!--- rs_to_velodyne -->
<include file="$(find rs_to_velodyne)/launch/rs2velodyne.launch" />
改后的launch文件为:
<launch>
<node pkg="rslidar_sdk" name="rslidar_sdk_node" type="rslidar_sdk_node" output="screen">
<param name="config_path" value=""/>
</node>
<!--- rs_to_velodyne -->
<include file="$(find rs_to_velodyne)/launch/rs2velodyne.launch" />
<!-- rviz -->
<node pkg="rviz" name="rviz" type="rviz" args="-d $(find rslidar_sdk)/rviz/rviz.rviz" />
</launch>
添加完毕后,从新source一下并启动
source ~/RS_SDK/devel/setup.bash
roslaunch rslidar_sdk start.launch
若成功显示没有报错,则完成数据转化,利用rostopic list 查看一下话题。
则转换完毕。
不过有可能会报如下错误,且看不到/vlodyne_points话题!如图!
出现这个警告的原因,大概率是因为rs_to_velodyne
功能包中定义的点云数据结构中的intensity
出现了不一致的原因。
进入~/RS_SDK/src/rs_to_velodyne/src目录下,找到rs_to_velodyne.cpp文件,打开查看。
他这个地方是通过一个宏定义进行定义的,我们再进入这个宏定义看看是怎么定义的
看到这里,答案已经很明确了,就是因为这里使用的intensity
是float
类型的,导致了两种数据格式不匹配,所以才出现了我们一开始报的那个``warming`
解决方法就是把rslidar
的点云格式中的uint8_t intensity;
使用PCL_ADD_INTENSITY;
替换即可
还有一个要注意的点,在定义数据类型的时候, 强度参数也要是浮点类型,不然依然会报错!
完成后重新编译一下,再次运行launch文件即可
cd ~/RS_SDK
catkin_make
source devel/setup.bash
roslaunch rslidar_sdk start.launch
发现错误已解决,并有相对应的话题与点云图显示!
参考博客:
1、Ubuntu18 安装ROS节点解决----速腾聚创雷达点云格式转换为Velodyne雷达点云格式 --SLAM不学无术小问题_^oprater^的博客-CSDN博客
2、RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_rs_to_velodyne_linzs.online的博客-CSDN博客