首页 - 文章教程 - 正文

1.介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法

0x00 YDLIDAR-X4激光雷达介绍

YDLIDAR X4激光雷达是深圳越登智能科技有限公司(YDLIDAR,这家公司属于EAI)研发的一款 360 度二维测距产品,本产品基于三角测距原理,并配以相关光学、电学、算法设计,实现高频高精度的距离测量,在测距的同时,机械结构 360 度旋转,不断获取角度信息,从而实现了 360 度扫描测距,输出扫描环境的点云数据。这款激光雷达是市面上性价比较好的一款,截止目前现在已经将价格降到449元,大家可以在EAI的淘宝官网查看到最新价格。

Screenshot from 2018-05-16 11:28:42.png

Screenshot from 2018-05-16 11:39:05.png

Screenshot from 2018-05-16 11:51:10.png

由上图大家可知,该雷达其实很小巧,唯一不妥的地方感觉就是这个使用皮带传动:

695594724.jpg

Screenshot from 2018-05-16 13:12:05.png

Screenshot from 2018-05-16 13:24:35.png

Screenshot from 2018-05-16 13:35:48.png


0x01 下载编译ROS下驱动源码

从github下载ydlidar x4的ROS下驱动源码,该源码需要放在ros工作空间下的src目录下进行编译,下载命令如下:

git clone https://github.com/EAIBOT/ydlidar.git

Screenshot from 2018-05-16 14:14:49.png

当下载完源码后,接下来就可以在ros的工作空间根目录下执行catkin_make来编译该源码软件包,当编译完成后记得source devel/setup.bash,然后就可以来配置udev规则了,以后就不用来看雷达挂载点是ttyUSB0还是ttyUSB1这些了,因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为该设备配置一个别名,该udev配置规则脚步放在ydlidar/startup目录下名字是initenv.sh,该脚步内容如下:

#!/bin/bash
echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0666", GROUP:="dialout",  SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar.rules

echo  'KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", MODE:="0666", GROUP:="dialout",  SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar-V2.rules

echo  'KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0666", GROUP:="dialout",  SYMLINK+="ydlidar"' >/etc/udev/rules.d/ydlidar-2303.rules

service udev reload
sleep 2
service udev restart

Screenshot from 2018-05-16 14:46:25.png


0x02 启动雷达测试

启动雷达有两个launch文件,一个lidar.launch是直接执行启动雷达进行扫描测距,另外一个是lidar_view.launch不仅可以启动雷达,还可以顺带启动rviz来将雷达数据可视化显示,下面来分别介绍这两种操作:

(1)使用lidar.launch来直接启动雷达,启动命令如下:

roslaunch ydlidar lidar.launch

1.gif

当执行该命令后会发现雷达顺时针转动起来,完整的操作日志如下:

corvin@workspace:~/catkin_ws

nbsp;source devel/setup.bash  corvin@workspace:~/catkin_ws

nbsp;roslaunch ydlidar lidar.launch  ... logging to /home/corvin/.ros/log/b1ff7dec-58d8-11e8-ba08-1866da14be59/roslaunch-workspace-18638.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://workspace.local:9209/ SUMMARY ======== PARAMETERS  * /rosdistro: indigo  * /rosversion: 1.11.21  * /ydlidar_node/angle_fixed: True  * /ydlidar_node/angle_max: 180.0  * /ydlidar_node/angle_min: -180.0  * /ydlidar_node/baudrate: 115200  * /ydlidar_node/frame_id: laser_frame  * /ydlidar_node/frequency: 7.0  * /ydlidar_node/heartbeat: False  * /ydlidar_node/ignore_array:   * /ydlidar_node/low_exposure: False  * /ydlidar_node/port: /dev/ydlidar  * /ydlidar_node/range_max: 16.0  * /ydlidar_node/range_min: 0.08  * /ydlidar_node/resolution_fixed: True  * /ydlidar_node/samp_rate: 9 NODES   /     base_link_to_laser4 (tf/static_transform_publisher)     ydlidar_node (ydlidar/ydlidar_node) auto-starting new master process[master]: started with pid [18650] ROS_MASTER_URI=http://localhost:11311 setting /run_id to b1ff7dec-58d8-11e8-ba08-1866da14be59 process[rosout-1]: started with pid [18663] started core service [/rosout] process[ydlidar_node-2]: started with pid [18673] [YDLIDAR INFO] Current ROS Driver Version: 1.3.1 [YDLIDAR INFO] Current SDK Version: 1.3.1 process[base_link_to_laser4-3]: started with pid [18681] [YDLIDAR INFO] YDLIDAR running correctly! The health status: well [YDLIDAR INFO] Connection established in /dev/ydlidar: Firmware version: 1.0.3 Hardware version: 1 Model: X4 Serial: 2017110600000093 [YDLIDAR INFO] Current Sampling Rate : 5K [YDLIDAR INFO] Current Scan Frequency : 7.000000Hz [YDLIDAR INFO] Connected to YDLIDAR on port /dev/ydlidar at 128000  [YDLIDAR INFO] Now YDLIDAR is scanning ......

当启动雷达后,查看相关的话题信息及其消息格式定义:

Screenshot from 2018-05-16 15:30:28.png

(2)使用lidar_view.launch来启动雷达并同时启动rviz进行雷达数据可视化显示:

roslaunch ydlidar lidar_view.launch

Screenshot from 2018-05-16 17:50:45.png

2.gif

根据上图可知在雷达中也需要规定在ROS下的x,y,z方向,为了弄清楚x正方向就需要知道如下规定:

Screenshot from 2018-05-16 18:19:10.png

在ROS下坐标轴方向使用的是右手系,食指指向x轴正方向,中指指向y轴正方向,拇指指向的是z轴正方向。对于旋转的正负方向规定是:右手握拳拇指指向z轴正方向,其余四指弯曲的方向即旋转的正方向,即围绕z轴做逆时针旋转是角速度的正方向,顺时针旋转是角速度的负方向。

right-hand.png

由此可以得知雷达的旋转方向与ROS规定的正向旋转是相反的,因此雷达扫描得到的原始数据也需要经过处理才行,现在这部分已经在ROS源码中经过处理了,因此现在雷达的坐标轴如下,在小车上安装时需要注意这个方向:

410707357.jpg


0x03 launch文件解析

首先来分析lidar.launch文件,里面的一些参数我们需要修改,因为这个launch文件是一个通用的启动文件,还可以启动YDLIDAR下的其他型号,具体的参数我们需要根据x4来做相应修改才行,下面是需要注意的一些参数:

Screenshot from 2018-05-17 09:55:10.png

(1)frame_id:设置当前雷达的坐标系名称

(2)angle_min和angle_max是设置雷达扫描的角度范围,这是一对很有用的参数。我们经常遇到以下情况,由于雷达在机器人底盘上的放置位置导致其并不能将360范围数据都拿来使用,经常只需要雷达的前180度的扫描数据:

897438234.jpg

Screenshot from 2018-05-17 11:01:46.png

下面开始开始测试这两个参数,首先我们将雷达放到一个纸箱子里,这样保证四面都可以检测到障碍:

817703518.jpg

当我们使用默认的参数(angle_min=-180,angle_max=180),然后使用roslaunch ydlidar lidar_view.launch来启动雷达和打开rviz查看数据,如下图所示:

Screenshot from 2018-05-17 11:21:41.png

然后测试将angle_min改为-90,angle_max改为90,在rviz中查看效果如下:

Screenshot from 2018-05-17 11:20:30.png

(3)配置x4雷达的测距范围,根据雷达的性能参数表得知,在室内环境下测距范围最小值0.12m,最大值10m,因此可以配置rang_min=0.12,range_max=10.0即可。

(4)对于测距频率sample_rate和扫描频率frequency两个参数不用修改,因为修改了也没用,因为在ROS驱动源码中已经将x4雷达的这两个参数给固定了,设置sample_rate=5和frequency=7,如果真的要想修改就需要修改源码了。


0x04 参考资料

[1]. 激光雷达 X4 使用手册,下载链接1.介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法激光雷达 X4 使用手册.pdf

[2]. 激光雷达 X4 数据手册,下载连接1.介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法激光雷达 X4 数据手册.pdf

[3]. YDLIDAR官网资料下载 http://www.ydlidar.cn/cn/download


0x05 问题反馈

大家在按照教程操作过程中有任何问题,可以关注ROS小课堂的官方微信公众号,在公众号中给我发消息反馈问题即可,我基本上每天都会处理公众号中的留言!当然如果你要是顺便给ROS小课堂打个赏,我也会感激不尽的,打赏30块还会邀请进ROS小课堂的微信群与更多志同道合的小伙伴一起学习和交流!

1516851765432601.jpg

发表评论