YDLIDAR-X4激光雷达介绍
YDLIDAR X4激光雷达是深圳越登智能科技有限公司(YDLIDAR,这家公司属于EAI)研发的一款 360 度二维测距产品,本产品基于三角测距原理,并配以相关光学、电学、算法设计,实现高频高精度的距离测量,在测距的同时,机械结构 360 度旋转,不断获取角度信息,从而实现了 360 度扫描测距,输出扫描环境的点云数据。
由上图大家可知,该雷达其实很小巧,唯一不妥的地方感觉就是这个使用皮带传动:
0x01 下载编译ROS下驱动源码
从github下载ydlidar x4的ROS下驱动源码,该源码需要放在ros工作空间下的src目录下进行编译,下载命令如下:
git clone https://github.com/EAIBOT/ydlidar.git
博主在通过udev规则配置脚本时采用如下方法:
由于开发机器人的过程中,发现电脑每次开机,设备的窗口都会改变;如果每次都修改代码就有些麻烦,而且浪费时间。所以百度下了解决方法——>建立USB串口别名,创建udev规则。
一、查看USB端口信息
运行lsusb命令,然后拔掉你要建立别名的设备,再次运行lsusb,确定你设备的ID号:
二、新建规则
mkdir ~/arm
cd ~/arm
vim arm.rules
内容如下:
博主使用是是YDLIDAR X4激光雷达,所以设置别名ydlidar
# set the udev rule , make the device_port be fixed by rplidar
KERNEL=="ttyUSB*", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", MODE:="0777", SYMLINK+="ydlidar"
参数介绍哦:
KERNEL 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备
ATTRS{idVendor}“10c4” ; ATTRS{idProduct}“ea60”
这里的这两个参数与USB本身有关,改成上面你查到的设备ID。
MODE 设备文件的权限,采用8进制
SYMLINK 设备的别名
三、新建脚本文件
vim arm.sh
内容如下
#!/bin/bash
sudo cp arm.rules /etc/udev/rules.d
echo " "
echo "Restarting udev"
echo ""
sudo service udev reload
sudo service udev restart
echo "finish "
四、运行脚本文件
sudo chmod -R 777 *
./arm.sh
1.出现下面的信息则说明OK了
Restarting udev
finish
2.给USB特定的别名与给予权限,不用每次使用都要给权限。
sudo chmod 777 /dev/tty*
3.拨插USB线,检查规则是否建立成功
ls /dev/rplidar
当下载完源码后,接下来就可以在ros的工作空间根目录下执行catkin_make来编译该源码软件包,当编译完成后记得source devel/setup.bash,然后就可以来配置udev规则了,以后就不用来看雷达挂载点是ttyUSB0还是ttyUSB1这些了,因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为该设备配置一个别名,该udev配置规则脚步放在ydlidar/startup目录下名字是initenv.sh,该脚本内容如下:
0x02 启动雷达测试
启动雷达有两个launch文件,一个lidar.launch是直接执行启动雷达进行扫描测距,另外一个是lidar_view.launch不仅可以启动雷达,还可以顺带启动rviz来将雷达数据可视化显示,下面来分别介绍这两种操作:
(1)使用lidar.launch启动雷达,执行命令如下:
roslaunch ydlidar lidar.launch
当执行该命令后会发现雷达顺时针转动起来,完整的操作日志如下:
当启动雷达后,查看发布的话题及其消息格式定义:
(2)使用lidar_view.launch来启动雷达并同时启动rviz进行雷达数据可视化显示:
roslaunch ydlidar lidar_view.launch
在终端中输入:ls /dev 可以查看到端口信息从下图中可以看到端口ydlidar
根据上图可知在雷达中也需要规定在ROS下的x,y,z方向,为了弄清楚x正方向就需要知道如下规定:
在ROS下坐标轴方向使用的是右手系,食指指向x轴正方向,中指指向y轴正方向,拇指指向的是z轴正方向。对于旋转的正负方向规定是:右手握拳拇指指向z轴正方向,其余四指弯曲的方向即旋转的正方向,即围绕z轴做逆时针旋转是角速度的正方向,顺时针旋转是角速度的负方向。
由此可以得知雷达的旋转方向与ROS规定的正向旋转是相反的,因此雷达扫描得到的原始数据也需要经过处理才行,现在这部分已经在ROS源码中经过处理了,因此现在雷达的坐标轴如下,在小车上安装时需要注意这个方向:
0x03 launch文件解析
首先来分析lidar.launch文件,里面的一些参数我们需要修改,因为这个launch文件是一个通用的启动文件,还可以启动YDLIDAR下的其他型号,具体的参数我们需要根据x4来做相应修改才行,下面是需要注意的一些参数:
(1)frame_id:设置当前雷达的坐标系名称
(2)angle_min和angle_max是设置雷达扫描的角度范围,这是一对很有用的参数。我们经常遇到以下情况,由于雷达在机器人底盘上的放置位置导致其并不能将360范围数据都拿来使用,经常只需要雷达的前180度的扫描数据:
下面开始开始测试这两个参数,首先我们将雷达放到一个纸箱子里,这样保证四面都可以检测到障碍:
当我们使用默认的参数(angle_min=-180,angle_max=180),然后使用roslaunch ydlidar lidar_view.launch来启动雷达和打开rviz查看数据,如下图所示:
然后测试将angle_min改为-90,angle_max改为90,在rviz中查看效果如下:
(3)配置x4雷达的测距范围,根据雷达的性能参数表得知,在室内环境下测距范围最小值0.12m,最大值10m,因此可以配置rang_min=0.12,range_max=10.0即可。
(4)对于测距频率sample_rate和扫描频率frequency两个参数不用修改,因为修改了也没用,因为在ROS驱动源码中已经将x4雷达的这两个参数给固定了,设置sample_rate=5和frequency=7,如果真的要想修改就需要修改源码了。
参考资料
[1].激光雷达YDLIDARX4 使用手册
[2].激光雷达YDLIDARX4 数据手册
[3].激光雷达YDLIDAR X4资料下载官网地址http://www.ydlidar.cn/cn/download
[4].sensor_msgs/LaserScan的消息格式定义http://docs.ros.org/api/sensor_msgs/html/msg/LaserScan.html