一、前言
由于之前使用的激光雷达驱动是网上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
-
编译成功
三、启动激光雷达
执行以下命令:
source devel/setup.bash #使生效
roslaunch lslidar_c16_decoder lslidar_c16.launch #启动激光雷达
报错:
问题分析:
- 1、首先先采用命令
ping 192.168.1.200
以及sudo tcpdum -i any port 2368
,查看激光雷达IP是否ping的通,激光雷达端口以及数据是否接收正常。
端口数据传送没问题,可以正常从激光雷达源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是否设置正确。
-
另开一个终端,可以看到此时存在的话题,其中
/lslidar_point_cloud
是激光雷达点云话题
-
/lslidar_point_cloud
话题能输出点云数据说明驱动正常工作
通过
rostopic hz /lslidar_point_cloud
查看激光雷达点云的频率,为10HZ左右
- 再开一个终端,打开rviz,通过By topic添加PointCloud2类型可视化控件,在左侧Global Options中修改fixed frame为官方驱动默认的
/laser_link
。
- 若将驱动转移到docker容器内部,则需要相应修改lslidar_c16_decoder.launch文件中的相应配置内容为autoware需要的话题:
/points_raw
以及fixed name:velodyne