【镭神激光雷达官方驱动安装适配】

一、前言

由于之前使用的激光雷达驱动是网上github上拉下来的,现在使用过程中出现很多问题,咨询客服后,发现github上的是非官方版本,并且也并未上传到github中,于是在拿到官方发过来的驱动后,现在需要重新进行适配

准备好官方激光雷达驱动

二、驱动编译

  • 在本地某个位置新建一个src文件夹,并将驱动目录放置在该src文件夹中,退回到src目录的上层目录,执行catkin_make指令进行catkin编译
  • 出现编译报错:
    1)问题
fatal error: pcap.h: No such file or directory
 #include <pcap.h>
          ^~~~~~~~
compilation terminated.

编译报错

2)解决办法:
sudo apt-get install libpcap0.8-dev

编译安装libpcap0.8-dev库
  • 编译成功


编译成功

三、启动激光雷达

执行以下命令:

source devel/setup.bash  #使生效
roslaunch lslidar_c16_decoder lslidar_c16.launch #启动激光雷达

报错:

启动激光雷达launch文件报错

问题分析:

  • 1、首先先采用命令ping 192.168.1.200以及sudo tcpdum -i any port 2368,查看激光雷达IP是否ping的通,激光雷达端口以及数据是否接收正常。
    雷达IP:192.168.1.200能ping通

端口数据传送没问题,可以正常从激光雷达源IP地址2369端口到本机2368端口发送激光点云数据


端口数据传送没问题,可以正常从激光雷达源IP地址2369端口到本机2368端口发送激光点云数据
  • 2、分析报错信息可以发现主要有两点:
    1)运行时报错,貌似是某个东西运动超时了
terminate called after throwing an instance of 'std::runtime_error'
  what():  Time is out of dual 32-bit range

2)红色区域最前面的中括号中显示lslidar_c16_driver_node的进程被杀死

[lslidar_c16_driver_node-1] process has died [pid 24005, exit code -6, cmd /home/hopechart/work/wqc/workspace/catkin_ws_lslidar_new/LSLIDAR_C16_V3.0.3_200826_ROSK/devel/lib/lslidar_c16_driver/lslidar_c16_driver_node __name:=lslidar_c16_driver_node __log:=/home/hopechart/.ros/log/068a1214-9ff3-11eb-be55-0002a000730c/lslidar_c16_driver_node-1.log].
log file: /home/hopechart/.ros/log/068a1214-9ff3-11eb-be55-0002a000730c/lslidar_c16_driver_node-1*.log

解决:

  • 因此可以锁定问题出在驱动的lslidar_c16_driver/src/lslidar_c16_driver_node.cpp文件,查看该node文件如下:
int main(int argc, char** argv)
{
  ros::init(argc, argv, "lslidar_c16_driver");
  ros::NodeHandle node;
  ros::NodeHandle private_nh("~");

  signal(SIGINT, my_handler);

  // start the driver
  lslidar_c16_driver::lslidarDriver dvr(node, private_nh);

  // loop until shut down or end of file
  while (ros::ok() && dvr.poll())
  {
    ros::spinOnce();
  }

  return 0;
}
  • 由于可能是超时问题,我在其中while循环上方添加了一行ros::Rate loop_rate(10);
// loop until shut down or end of file
  ros::Rate loop_rate(10);
  while (ros::ok() && dvr.poll())
  {
    ros::spinOnce();
  }
  • 经过修改后,重新catkin_make编译并启动launch文件就可以正常运动了,若出现poll() time out问题,请检查端口号以及激光雷达IP是否设置正确。
启动正常,若出现poll() time out问题,请检查端口号以及激光雷达IP是否设置正确
  • 另开一个终端,可以看到此时存在的话题,其中/lslidar_point_cloud是激光雷达点云话题

    另开一个终端,可以看到此时存在的话题,其中```/lslidar_point_cloud```是激光雷达点云话题

  • /lslidar_point_cloud话题能输出点云数据说明驱动正常工作

    /lslidar_point_cloud话题能输出点云数据说明驱动正常工作了

  • 通过rostopic hz /lslidar_point_cloud查看激光雷达点云的频率,为10HZ左右

通过rostopic hz /lslidar_point_cloud查看激光雷达点云的频率,为10HZ左右
  • 再开一个终端,打开rviz,通过By topic添加PointCloud2类型可视化控件,在左侧Global Options中修改fixed frame为官方驱动默认的/laser_link
通过By topic添加PointCloud2类型可视化控件
在左侧Global Options中修改fixed frame为官方驱动默认的/laser_link
  • 若将驱动转移到docker容器内部,则需要相应修改lslidar_c16_decoder.launch文件中的相应配置内容为autoware需要的话题:/points_raw以及fixed name:velodyne
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容