ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)

YDLIDAR-X4激光雷达介绍

YDLIDAR X4激光雷达是深圳越登智能科技有限公司(YDLIDAR,这家公司属于EAI)研发的一款 360 度二维测距产品,本产品基于三角测距原理,并配以相关光学、电学、算法设计,实现高频高精度的距离测量,在测距的同时,机械结构 360 度旋转,不断获取角度信息,从而实现了 360 度扫描测距,输出扫描环境的点云数据。
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第1张图片
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第2张图片
由上图大家可知,该雷达其实很小巧,唯一不妥的地方感觉就是这个使用皮带传动:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第3张图片
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第4张图片
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第5张图片0x01 下载编译ROS下驱动源码

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

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

ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第6张图片
博主在通过udev规则配置脚本时采用如下方法:
由于开发机器人的过程中,发现电脑每次开机,设备的窗口都会改变;如果每次都修改代码就有些麻烦,而且浪费时间。所以百度下了解决方法——>建立USB串口别名,创建udev规则。

一、查看USB端口信息

运行lsusb命令,然后拔掉你要建立别名的设备,再次运行lsusb,确定你设备的ID号:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第7张图片
二、新建规则

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

出现/dev/rplidar,则说明别名成功。
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第8张图片

当下载完源码后,接下来就可以在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

ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第9张图片

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

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

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

roslaunch ydlidar lidar_view.launch

ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第10张图片
在终端中输入:ls /dev 可以查看到端口信息从下图中可以看到端口ydlidar
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第11张图片
根据上图可知在雷达中也需要规定在ROS下的x,y,z方向,为了弄清楚x正方向就需要知道如下规定:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第12张图片
在ROS下坐标轴方向使用的是右手系,食指指向x轴正方向,中指指向y轴正方向,拇指指向的是z轴正方向。对于旋转的正负方向规定是:右手握拳拇指指向z轴正方向,其余四指弯曲的方向即旋转的正方向,即围绕z轴做逆时针旋转是角速度的正方向,顺时针旋转是角速度的负方向。

ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第13张图片
由此可以得知雷达的旋转方向与ROS规定的正向旋转是相反的,因此雷达扫描得到的原始数据也需要经过处理才行,现在这部分已经在ROS源码中经过处理了,因此现在雷达的坐标轴如下,在小车上安装时需要注意这个方向:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第14张图片
0x03 launch文件解析

首先来分析lidar.launch文件,里面的一些参数我们需要修改,因为这个launch文件是一个通用的启动文件,还可以启动YDLIDAR下的其他型号,具体的参数我们需要根据x4来做相应修改才行,下面是需要注意的一些参数:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第15张图片
(1)frame_id:设置当前雷达的坐标系名称

(2)angle_min和angle_max是设置雷达扫描的角度范围,这是一对很有用的参数。我们经常遇到以下情况,由于雷达在机器人底盘上的放置位置导致其并不能将360范围数据都拿来使用,经常只需要雷达的前180度的扫描数据:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第16张图片
下面开始开始测试这两个参数,首先我们将雷达放到一个纸箱子里,这样保证四面都可以检测到障碍:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第17张图片
当我们使用默认的参数(angle_min=-180,angle_max=180),然后使用roslaunch ydlidar lidar_view.launch来启动雷达和打开rviz查看数据,如下图所示:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第18张图片

然后测试将angle_min改为-90,angle_max改为90,在rviz中查看效果如下:
ubuntu16.0 ROS(介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法)_第19张图片
(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

你可能感兴趣的:(激光雷达,配置,linux,自动驾驶)