在ROS下使用EAI的激光雷达YDLIDAR-X4
1、系统环境
ROS2GO的U盘 系统:Ubuntu16.04 + ROS Kinetic
激光雷达:EAI的YDLIDAR X4
主要参考文档:
推荐: EAI官方 《YDLIDAR X4 使用手册》
[介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法
于2018-05-17由corvin_zhang发布](http://www.corvin.cn/686.html)
[ROS与激光雷达入门教程-ROS中使用激光雷达(EAI F4)](https://www.ncnynl.com/archives/201702/1362.html)
[EAI激光雷达X4使用hector_slam建图(一)](https://blog.csdn.net/zhu751191958/article/details/78969825)
EAI官方文档《YDLIDAR ROS 使用手册.pdf》
[ROS与SLAM入门教程-激光雷达(EAI F4)gmapping构建地图](https://www.ncnynl.com/archives/201702/1363.html)
2、下载源码、编译并配置环境
(1)建立工作空间
mkdir -p ~/lidar_ws/src
注意: 一个工作空间不要放太多驱动,否则编译时可能会系统卡死。
新建一个lidar_ws的工作空间: mkdir -p ~/lidar_ws/src
自动生成文件夹目录 /home/tianbot/lidar_ws/src
如果用eai的多种不同雷达,工作空间命名还可以更加细化,如建立X4激光雷达的制定工作空间 eaix4_ws : mkdir -p ~/eaix4_ws/src
建立通用的工作空间 catkin_ws: mkdir -p ~/catkin_ws/src
参考:
http://www.cnblogs.com/peida/archive/2012/10/25/2738271.html
(2)进入目录
cd ~/lidar_ws/src
(3)下载ROS驱动包
方法一、先下载再复制文件
官网下载X4雷达对应的ROS驱动包,复制到/home/tianbot/lidar_ws/src/ydlidar文件夹下
到百度上输入EAI,找到EAI玩智商官网:
http://www.eaibot.com/
下载ROS驱动包
将下载好ROS雷达驱动包在windows下解压并重命名为ydlidar放到src里,
方法二、直接联网下载(可能不识别是X4的,听说驱动可能更新)
从github下载ydlidar x4的ROS下驱动源码,该源码需要放在ros工作空间下的src目录下进行编译,下载命令如下:
git clone https://github.com/EAIBOT/ydlidar.git
(4)编译代码
切换工作空间根目录 cd ~/lidar_ws
编译整个工作空间 catkin_make
注意:编译时候,注意目录下src文件中是否有其他代码,若代码太多,容易编译失败,系统司机卡住
方法二、编译生成 ydlidar_node 和 ydlidar_client。
$catkin_make --pkg ydlidar
参考:
首先切换到自己的ROS工作空间: $ cd ~/catkin_ws
如果你想编译整个工作空间里面的包:$ catkin_make
如果你只想编译工作空间某一个包:$ catkin_make -DCATKIN_WHITELIST_PACKAGES= "包名"
例如:$ catkin_make -DCATKIN_WHITELIST_PACKAGES="beginner_tutorials"
原文:https://blog.csdn.net/qingdu007/article/details/51483065
(5)添加环境变量
cd ~/lidar_ws
source devel/setup.bash
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
添加 ydlidar 环境变量到~/.bashrc 文件中,并使其生效,刷新配置
永久添加配置,输入以下命令就可以不用一直重复source:
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bash
刷新配置:source ~/.bashrc
以防万一还是再source当前环境:source ~/lidar_ws/devel/setup.bash
“直接使用roscd指令切换到自己的程序包目录”
cd ~/lidar_ws
source devel/setup.bash
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
roscd ydlidar
参考:
[ROS学习笔记-roscd指令](https://blog.csdn.net/jimjarry/article/details/78983675)
备注:cd命令和roscd命令都是切换到指定目录的命令。
不同的是,cd是Linux系统的命令,在使用时必须指定目标目录的完整路径;
而roscd是ros系统中的,利用包的名字直接切换到相应的文件目录下。
(6)添加udev规则(非必须)
cd ~/lidar_ws/src/ydlidar/startup
sudo ./initenv.sh
ls -l /dev/ttyUSB*
ls -l /dev/ydlidar
以后就不用来看雷达挂载点是ttyUSB0还是ttyUSB1这些了,因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为该设备配置一个别名,该udev配置规则脚步放在ydlidar/startup目录下名字是initenv.sh
参考资料:
Udev是Linux的设备管理器,动态地创建和删除节点的硬件设备。简而言之,它有助于你的电脑很容易找到你的机器人。
[原ROS 简单的udev rules](https://blog.csdn.net/u011118482/article/details/52442403)
os项目使用usb接口串口通讯的传感器时,我们都希望有个固定的设备名供程序调用。
由于usb为即插即用设备,节点注册的ID不同,会导致设备名称会不同。
linux系统下如何让系统绑定固有的usb设备,使用设定好的设备名称?如何永久修改设备权限?
解决办法:编写规则文件,放到系统配置路径下,进行设置后,即可一劳永逸。
[ros使用usb硬件,调用固定设备名修改设备权限的设置方法](https://blog.csdn.net/qq_38288618/article/details/77839305)
(7)创建别名,运行脚本
为 X4 的串口增加一个设备别名 /dev/ydlidar
方法一、直接用roscd命令进入目录
$roscd ydlidar/startup
备注:注意观察目录是否错误
使脚本文件获得权限
$sudo chmod 0777 *
运行脚本文件
$sudo sh initenv.sh
方法二、
#进入驱动包的startup目录下:
#cd ~/lidar_ws/src/ydlidar/startup
使.sh脚本文件获得权限:
sudo chmod +x initenv.sh
直接运行脚本文件:
sudo sh initenv.sh
注意:创建别名后, 重新插拔 USB 才生效
(8)打开lidar.launch文件,更改雷达对应波特率为128000
备注:官方手册说要改,lidar.launch文件路径在 /home/tianbot/lidar_ws/src/ydlidar/launch打开 lidar.launch,
修改<param name="baudrate" type="int" value="128000"
树莓派的地址如下:
/home/corvin/lidar_ws/src/ydlidar/launch
修改lidar.launch文件后,先另存到其它目录,再拷贝过来(貌似不能直接替换)
其它方法:ubuntu中调用VIM命令直接修改(未测试成功)
命令行修改(按insert修改,esc退出,:wq 保存,未成功)
cd ~/lidar_ws/src/ydlidar/launch
vim lidar.launch
以下
<param name="baudrate" type="int" value="128000"
备注 1: 雷达型号对应波特率: G4 : 230400 X4 : 128000 F4 : 153600
3、运行激光雷达
电脑Ubuntu系统中,运行雷达并用Rviz将数据可视化:
roslaunch ydlidar lidar_view.launch
或者先启动雷达扫描测距:roslaunch ydlidar lidar.launch
再查看激光雷达的数据:rosrun ydlidar ydlidar_client
树莓派Raspbian 系统中,好像也没必要先运行 lidar.launch,直接运行lidar_view.launch就可以了。
备注:先保证 roscd运行在正确目录下 roscd ydlidar,然后再启动roslauch
4、问题及解决
错误问题1:供电不足
EAI的X4数据口在一般情况下可以当做供电和数据同时使用,这是我们用户比较期望的,但是X4对于某些主控比如树莓派就不行,必须单独供电,也就是说如果你拿树莓派跑的话,需要一条单独供电的线和一条数据线
错误问题2:无法加载ydlidar节点
ERROR: cannot launch node of type [ydlidar/ydlidar_node]:
can't locate node [ydlidar_node] in package [ydlidar]
无法加载节点的原因,可能是多次编译,ros命令寻找文件位置时发生错误。
解决方法:
“直接使用roscd指令切换到自己的程序包目录”
cd ~/lidar_ws
source devel/setup.bash
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
先保证 roscd运行在正确目录下
roscd ydlidar
然后再启动roslauch
roslaunch ydlidar lidar_view.launch
参考:
https://answers.ros.org/question/145801/cant-locate-node-in-package/
树莓派使用问题
- 供电问题
现象:雷达不转, 雷达转几下停了,雷达正常转,但是启动 lidar.launch过程中有提示
错误提示[ERROR] [1543845072.458324094]: start YDLIDAR is failed! Exit!!
解决方法:充电宝好像不行(自动断电?),要找个比较稳定的电源适配器。
https://github.com/EAIBOT/ydlidar/issues/12
2、RViz不显示点云图像
启动激光雷达EAI YDLIDAR X4后,查询有数据(rosrun ydlidar ydlidar_client),但是在RViz中没有图像,解决办法是改变显示方式:把Style 从Squares改成 Points,就显示了。
问题解决:把Style 从Squares改成 Points就显示
5、查询激光雷达数据及其发布的消息
rosmsg show sensor_msgs/LaserScan
查询雷达输出话题:rostopic echo -n1 /scan
(下面这个命令少了 –n1,会不停地刷新数据)
[ROS中发布激光扫描消息]( https://www.cnblogs.com/21207-iHome/p/7840129.html)
通过 rostopic hz /scan 命令查看激光数据发布频率
插入USB后在终端中输入以下命令查看USB转串口设备:ls /dev/tty*