速腾R80S运行lego-loam方法记录(同适用其他速腾雷达)

LeGO-LOAM运行记录:

最近实验室接到了一个项目,其中的模块需要用到SLAM建图,而且只有一个速腾雷达可以用,Github上面的大多数激光SLAM都是能够很好的支持Velodyne雷达,但是对国产的雷达并不能很好的支持,需要自己改变参数。刚开始的时候老师说用的是HESAI40P的雷达,所以针对HESAI40P做了许多适配,终于能把LOAM跑通了,结果突然告诉我换了个雷达,需要用速腾新出的那个80线的激光雷达,好像叫RS-Ruby-Lite,又花了一段时间去适配,而且发现LOAM的效果并不好,于是决定改用Lego-LOAM,走了不少弯路,所以把自己总结的一些经验写在网上,希望能对其他人有点帮助。
1.
首先就是LeGO-LOAM的下载安装之类的,在此不再赘述,下面给出一个链接,按照链接里面的方法进行配置就好,值得一提的是里面也提到了用速腾的雷达,但是好像没给出太好的解决方案。
LeGO-LOAM初探:原理,安装和测试
2.
然后就是速腾相关ros驱动包的配置了,下面会给出相关的链接,按照官网上面的方法配置即可,速腾的ROS驱动我个人觉得做的比hesai稍稍好一点点,只需要修改配置文件就能工作。这里你可以根据你的需要来,我个人做的时候是通过这个驱动程序读取我之前用wireshark录好的PCAP文件(一定要用wireshark来录制,我们第一次录就用的速腾自己的可视化点云工具录制的,结果用不了)然后再通过rviz录制bag包进行后续的建图过程,应该好像也可以直接通过驱动来运行并输出点云信息给LeGO-LOAM,不过得关闭rviz,关闭方法如下图所示,把文件中关于rviz的XML信息关闭即可。
速腾R80S运行lego-loam方法记录(同适用其他速腾雷达)_第1张图片
3
接下来,就到了LeGO-LOAM的配置时间,相信你已经录好了BAG或者是准备好点云信息了,LeGO-LOAM本身能够对Velodyne的雷达进行很好的支持,但是直接运行速腾录好的包八成会报错,我这边主要出现过两个问题,第一个是提醒没有ring channel,是因为Velodyne的雷达单独有一个ring通道,而速腾的雷达好像并没有,所以需要更改配置文件关闭ring channel的功能,关闭方法如下图所示,下图文件中的Bool型变量useCloudRing关闭即可:
速腾R80S运行lego-loam方法记录(同适用其他速腾雷达)_第2张图片
随后就到了困扰我很久的一个问题,那就是刚开始能运行,几秒钟后就会报错,提示Feature Association崩溃,后来发现了问题是因为LeGO-LOAM只对Velodyne中的空点进行了很好的支持,但是对其他品牌的雷达NAN POINT并不支持,这样就会导致程序的崩溃,解决方法是我们自己写一个launch文件,每次在运行run.launch前重现开一个终端单独运行这个launch文件,下面是这个文件中的代码,我把这个launch文件命名为clear.launch,和run.launch放在同一个文件夹内,

<launch>
    <param name="/use_sim_time" value="true" />
   <node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen" />

  
  <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>
launch>

值得一提的是,上面的代码做了话题转化,这样你就不需要去速腾的驱动里面改话题了。如果你是其他品牌的雷达可以自行修改其中的话题。
最后还要在run.launch的tf处加上一行代码:

<node pkg="tf" type="static_transform_publisher" name="base_link_to_rslidar" args="0 0 0 -1.570795 -1.570795 0        /rslidar velodyne   10" />

接下来LeGO-LOAM应该就可以运行了,先运行clean.launch 再运行run.launch。然后就可以播放你录制的包进行建图了。

你可能感兴趣的:(slam)