树莓派&ROS:驱动EAI的激光雷达YDLIDAR-X4
【目录】
- 1、配置环境与背景介绍
- 1.1、硬件配置环境
- 1.2、主要参考文档:
- 2、下载源码、编译并配置环境
- 2.1、建立工作空间
- 2.2、下载ROS驱动包
- 2.3、编译代码
- 2.4、添加环境变量
- 2.5、创建别名,运行脚本
- 2.6、修改波特率
- 3、运行激光雷达
- 4、问题及解决
- 4.1、供电不足导致雷达无法正常运行
- 4.2、无法加载ydlidar节点
- 4.3、RViz不显示点云图像
- 4.4、USB不识别
- 5、查询激光雷达数据及其发布的消息
1、硬件环境与背景介绍
1.1、硬件配置环境
ROS2GO的U盘 系统:Ubuntu16.04 + ROS Kinetic
激光雷达:EAI的YDLIDAR X4
树莓派:系统 Raspbian Stretch系统的ROS Kinetic版
参考【发布v1.0版本基于Stretch的ROS Kinetic完整版树莓派3B+镜像】
1.2、激光雷达:YDLIDAR-X4
(1)基本参数
激光雷达候选:
1)EAI YDLIDAR X4 :
安装:数据线接口是水平方向,方便接线;
电源:转接板有专门的电源接口(一个USB口接数据,一个USB口接电源)。
2)思岚科技 RPLIDAR A1
安装:数据和电源接口,朝向为向下,安装时要注意,容易卡住。
电源:供电和数据线是在一个usb口里面,如果供电不足,会影响雷达工作。
3)参数对比
扫描频率:电机转速可调,Hz。
(2)激光雷达的固定
雷达原来的固定支柱,塑料,螺纹孔不通用(好像是M2.5)
被我改成了M3的螺柱(虽然不是塑料绝缘的,但影响不大),这样后期把底座固定在打孔的木板上,选择螺丝更方便。
1.3、主要参考文档:
推荐: 《EAI官方 《YDLIDAR X4 使用手册》
[介绍EAI的YDLIDAR-X4激光雷达在ROS下使用方法]
[ROS与激光雷达入门教程-ROS中使用激光雷达(EAI F4)]
https://www.ncnynl.com/archives/201702/1362.html
[EAI激光雷达X4使用hector_slam建图(一)]
https://blog.youkuaiyun.com/zhu751191958/article/details/78969825
《EAI官方文档《YDLIDAR ROS 使用手册.pdf》
[ROS与SLAM入门教程-激光雷达(EAI F4)gmapping构建地图]
https://www.ncnynl.com/archives/201702/1363.html
2、下载源码、编译并配置环境
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
进入进入工作空间目录下
cd ~/lidar_ws/src
2.2、下载ROS驱动包
方法一、先下载再复制文件
官网下载X4雷达对应的ROS驱动包,复制到/home/tianbot/lidar_ws/src/ydlidar文件夹下
到百度上输入EAI,找到EAI玩智商官网:
下载ROS驱动包
将下载好ROS雷达驱动包在windows下解压并重命名为ydlidar放到src里,
方法二、直接联网下载(可能不识别是X4的)
从github下载ydlidar x4的ROS下驱动源码,该源码需要放在ros工作空间下的src目录下进行编译,下载命令如下:
git clone https://github.com/EAIBOT/ydlidar.git
2.3、编译代码
切换工作空间根目录 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.youkuaiyun.com/qingdu007/article/details/51483065
2.4、添加环境变量
添加 ydlidar 环境变量到~/.bashrc 文件中,并使其生效,刷新配置。
(切换目录 cd ~/lidar_ws)
(1)永久添加配置,以后就不用重复source刷新配置。
方法一(推荐)、使用echo命令 和 >>指令向文件追加内容,原内容将保存:
$ echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bash
方法二、打开文件,在~/.bashrc最后,手动添加添加一行以下内容:
source ~/lidar_ws/devel/setup.bash
(2)刷新配置
$ source ~/.bashrc
或 $ rospack profile
以防万一还是再source当前环境:
source ~/lidar_ws/devel/setup.bash
打开文件 source devel/setup.bash
添加一行配置 echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
刷新配置 source ~/.bashrc
操作步骤(方法二)、直接使用roscd指令切换到自己的程序包目录
cd ~/lidar_ws
source devel/setup.bash(是否需要?)
echo "source ~/lidar_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
roscd ydlidar(是否需要?)
参考:
【ROS学习笔记-roscd指令】
https://blog.youkuaiyun.com/jimjarry/article/details/78983675
备注:cd命令和roscd命令都是切换到指定目录的命令。
不同的是,cd是Linux系统的命令,在使用时必须指定目标目录的完整路径;
而roscd是ros系统中的,利用包的名字直接切换到相应的文件目录下。
2.5、为USB设备创建别名
为 X4 的串口增加一个设备别名 /dev/ydlidar,添加udev规则
方法一、直接用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 才生效
插入USB后,在终端中输入以下命令,查看USB转串口设备:
ls /dev/tty*
列出USB设备:
ls -l /dev/ttyUSB*
ls -l /dev/ydlidar
原理:
以后就不用来看雷达挂载点是ttyUSB0还是ttyUSB1这些了,因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为该设备配置一个别名,该udev配置规则脚步放在ydlidar/startup目录下名字是initenv.sh
参考资料:
Udev是Linux的设备管理器,动态地创建和删除节点的硬件设备。简而言之,它有助于你的电脑很容易找到你的机器人。
【原ROS 简单的udev rules】
https://blog.youkuaiyun.com/u011118482/article/details/52442403
Ros项目使用usb接口串口通讯的传感器时,我们都希望有个固定的设备名供程序调用。
由于usb为即插即用设备,节点注册的ID不同,会导致设备名称会不同。
linux系统下如何让系统绑定固有的usb设备,使用设定好的设备名称?如何永久修改设备权限?
解决办法:编写规则文件,放到系统配置路径下,进行设置后,即可一劳永逸。
【ros使用usb硬件,调用固定设备名修改设备权限的设置方法】
https://blog.youkuaiyun.com/qq_38288618/article/details/77839305
2.6、修改波特率
打开lidar.launch文件,更改雷达对应波特率为128000
备注:官方手册说要改,其它文档没看到,lidar.launch文件路径在 /home/tianbot/lidar_ws/src/ydlidar/launch
打开 lidar.launch,更改不同型号雷达对应的波特率,以下为 X4 的配置。
命令行修改(按insert修改,esc退出,:wq 保存,未成功)
cd ~/lidar_ws/src/ydlidar/launch
vim lidar.launch
以下
备注 1: 雷达型号对应波特率: G4 : 230400 X4 : 128000 F4 : 153600
3、运行激光雷达测试
新终端,运行roscore
$ roscore
新终端,运行雷达X4并用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、问题及解决
4.1、供电不足导致雷达无法正常运行
EAI的X4数据口在一般情况下可以当做供电和数据同时使用,这是我们用户比较期望的,但是X4对于某些主控比如树莓派就不行,必须单独供电,也就是说如果你拿树莓派跑的话,需要一条单独供电的线和一条数据线
树莓派使用问题
供电问题
现象:雷达不转, 雷达转几下停了,雷达正常转,但是启动 lidar.launch过程中有提示
错误提示[ERROR] [1543845072.458324094]: start YDLIDAR is failed! Exit!!
解决方法:充电宝好像不行(自动断电?),要找个比较稳定的电源适配器。
https://github.com/EAIBOT/ydlidar/issues/12
4.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/
4.3、RViz不显示点云图像
启动激光雷达EAI YDLIDAR X4后,查询有数据(rosrun ydlidar ydlidar_client),但是在RViz中没有图像,解决办法是改变显示方式:把Style 从Squares改成 Points,就显示了。
问题解决:把Style 从Squares改成 Points就显示
4.4、USB不识别
现象:[ERROR] [1553706336.319141339]: YDLIDAR Cannot bind to the specified serial port /dev/ydlidar
查询:查看USB转串口设备:ls /dev/tty*,无 ttyUSB*
连接Windows电脑,不识别COM口
原因: USB线质量太差,换一根好点的(粗一点),就能识别USB了
5、查询激光雷达数据及其发布的消息
rosmsg show sensor_msgs/LaserScan
查询雷达输出话题:rostopic echo -n1 /scan
(下面这个命令睡少了 –n1,会不停地刷新数据)
[ROS中发布激光扫描消息]( https://www.cnblogs.com/21207-iHome/p/7840129.html)
通过 rostopic hz /scan 命令查看激光数据发布频率