RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘

目录:

  • 问题
  • 分析
  • 解决

问题

因为目前很多SLAM框架支持的激光雷达都是Velodyne型号的,对于速腾RS雷达的使用者来说,需要对数据进行转换,其实现在速腾的雷达已经支持输出XYZIXYZIRT两种数据格式的点云了,只需要在CMakeLists.txt文件里面切换一下再编译即可。

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第1张图片

但是,在笔者运行LIO-SAM这个框架的时候,直接使用速腾输出的XYZIRT格式的点云仍然会保存,究其原因是因为速腾的RS16雷达输出中包含了部分Nan的点,需要做剔除。

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第2张图片

为了方便起见,可以直接使用github上一位大哥写的一个转换包,直接把robosense XYZIRT转成velodyne XYZIRT 即可。这里贴上他的链接:

https://github.com/HViktorTsoi/rs_to_velodyne.git

还有一个问题就是,这个rs_to_velodyne运行的时候报出一个警告,如下:

Failed to find match for field ‘intensity’.

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第3张图片

分析

出现这个警告的原因,大概率是因为rs_to_velodyne功能包中定义的点云数据结构中的intensity出现了不一致的原因

首先,这个包希望接收的rslidar点云的数据格式中的intensityuint8_t类型的,但是它转换之后的velodyne点云的数据格式中的intensity是通过一个宏定义来定义的

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第4张图片

他这个地方是通过一个宏定义进行定义的,我们再进入这个宏定义看看是怎么定义的

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第5张图片

看到这里,答案已经很明确了,就是因为这里使用的intensityfloat类型的,导致了两种数据格式不匹配,所以才出现了我们一开始报的那个``warming`

解决

rslidar的点云格式中的uint8_t intensity;使用PCL_ADD_INTENSITY;替换即可

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第6张图片

修改完成之后,重新编译一次,我们运行再看看是否还有那个警告

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第7张图片

可以看到,已经没有那个警告了,输出的话题也正常

RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘_第8张图片

打开rviz查看点云也是正常的,说明我们的修改没有导致其他的一些问题,至此问题解决。

你可能感兴趣的:(环境配置,ros,lidar,velodyne,rs16)