在用robosense的rslidar(16线)运行lego-loam遇到的问题总结

在将rslidar通过github上开源的工具包转换成velodyne的点云格式后,运行测试lego-loam时遇到了关于kdtree的报错问提:

[pcl::KdTreeFLANN::setInputCloud] Cannot create a KD Tree with an empty input cloud!

然后在lego-loam的github主页上找到了最相关的issue,原因是Lego-loam可以处理VLP-16中的Nan点,但是对其它Lidar sensor的数据格式中的Nan点不能很好地处理

截图如下:

将上述代码添加到lego-loam自带的run.launch文件中即可,如下:

<launch>
    
    <!--- Sim Time -->
    <param name="/use_sim_time" value="true" />
    
    <param name="/use_sim_time" value="true" />
    <node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen" />
    
    <!-- Run a passthrough filter to clean NaNs -->
  <node pkg="nodelet" type="nodelet" name="passthrough" args="load pcl/PassThrough pcl_manager" output="screen">
    <remap from="~input" to="/rslidar_points" />
    <remap from="/passthrough/output" to="/velodyne_points" />
    
    <rosparam>
      filter_field_name: z
      filter_limit_negative: True
    </rosparam>

   <rosparam>
      filter_field_name: x
      filter_limit_negative: True
    </rosparam>

   <rosparam>
      filter_field_name: y
      filter_limit_negative: True
    </rosparam>
   </node>

    <!--- Run Rviz-->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find lego_loam)/launch/test.rviz" />

    <!--- TF -->
    <node pkg="tf" type="static_transform_publisher" name="camera_init_to_map"  args="0 0 0 1.570795   0        1.570795 /map    /camera_init 10" />
    <node pkg="tf" type="static_transform_publisher" name="base_link_to_camera" args="0 0 0 -1.570795 -1.570795 0        /camera /base_link   10" />

    <!--- LeGO-LOAM -->    
    <node pkg="lego_loam" type="imageProjection"    name="imageProjection"    output="screen"/>
    <node pkg="lego_loam" type="featureAssociation" name="featureAssociation" output="screen"/>
    <node pkg="lego_loam" type="mapOptmization"     name="mapOptmization"     output="screen"/>
    <node pkg="lego_loam" type="transformFusion"    name="transformFusion"    output="screen"/>

</launch>

其实从上面的launch文件可以看到:去除Nan点的程序中已经将rslidar_points作为输入,输出是velodyne_points,因此在最开始提到的将rslidar_points转换成velodyne_points是没有必要的.

接下来记录用robosense的lidar录制到的原始数据包(.bag)跑通lego-loam:

测试时报错:Failed to find match for field 'ring'

因为Velodyne的雷达单独有一个ring通道,而robosense的雷达好像并没有,在代码中可以将这一功能关闭,在include文件夹的utility.h文件中,将

extern const bool useCloudRing = false;

即可.(Notes:改完之后要记得重新catkin_make整个lego-loam项目,最开始我就忘了,导致浪费很多时间~~~~~)

接下来分别执行

source devel/setup.bash
roslaunch lego_loam run.launch

rosbag play LI_calib_songling.bag --clock

即可(Notes:别忘记加--clock参数,否则也无法成功运行),附上最终的测试效果:

 

主要参考:

  1. https://blog.csdn.net/qq_39767850/article/details/109485978
  2. https://blog.csdn.net/heirenlop/article/details/111475684
  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值