两轮差速底盘SLAM系列(5)--ROS下驱动激光雷达EAI-X4

本文最后更新于:2022年5月29日 上午

前言

机器人必备条件——深度信息。

这里使用的激光雷达型号是EAI-X4,可以到它的官网查看对应型号的使用手册,它里面都会有详细的操作说明。但在实际应用中往往需要修改某些参数,以达到我们的设计要求。

本文仅以 Ubuntu16.04、Kinetic 版本 ROS 为例。

ROS驱动包安装

1、下载驱动包

进入到你的catkin_ws工作空间src目录,从GitHub下载 YDLIDAR X4 的最新 ROS 驱动包:

1
2
cd ~/catkin_ws/src
git clone https://github.com/YDLIDAR/ydlidar/tree/X4

2、修改驱动包名字

刚下载下来不能直接编译,需要先修改驱动包名字。进入驱动包文件夹打开CmakeLists.txt文件,查看project(ydlidar)可以知道工程名字为ydlidar,回到src目录把驱动包重命名为ydlidar即可编译。

1
2
3
<先重命名驱动包>
cd ~/catkin_ws
catkin_make

3、配置udev规则为

因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为X4的串口配置一个设备别名 /dev/ydlidar,udev配置规则脚步放在ydlidar/startup目录下名字是initenv.sh

1
2
3
cd ~/catkin_ws/src/ydlidar/startup
sudo chmod +x initenv.sh
sudo sh initenv.sh

执行完脚本需要重新拔插激光雷达才可以生效。

运行YDLIDAR包

启动雷达有两个launch文件,一个lidar.launch是直接执行启动雷达进行扫描测距,另外一个是lidar_view.launch不仅可以启动雷达,还可以顺带启动rviz来将雷达数据可视化显示。

1、RVIZ查看扫描结果

运行 launch 文件,打开 rviz 查看 X4 扫描结果,如下图所示:

1
roslaunch ydlidar lidar_view.launch

1oDLb6.png

2、终端上显示数据

1
2
roslaunch ydlidar lidar.launch
rosrun ydlidar ydlidar_client

1orFqP.png

二次开发

激光雷达安装

X4内部极坐标系

为了方便二次开发,X4内部定义了极坐标系。系统极坐标系以X4的旋转核心的中心为极点,规定角度顺时针为正,零位角位于X4电机的正前方,如下图所示:

1x27Zt.png

ROS下坐标系

在ROS下坐标系方向使用的是右手坐标系,食指指向x轴正方向,中指指向y轴正方向,拇指指向的是z轴正方向。

对于旋转的正负方向规定是:右手握拳拇指指向z轴正方向,其余四指弯曲的方向即旋转的正方向,即围绕z轴做逆时针旋转是角速度的正方向,顺时针旋转是角速度的负方向。

V3CUKK.png

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

1x2HdP.png

实际安装方向摆放

从上面分析可以知道,在小车上安装时需要注意激光雷达的方向,电机的方向即是你小车的X轴正方向。

launch文件解析

首先来分析lidar.launch文件,在它的功能包说明文档已经有说明:

1xIylT.png

所以不需要修改太多的东西,官方的开发技术人员已经完善了功能包,我们只需要理解参数代表什么意思,再根据实际情况进行修改即可。里面的一些参数我们需要需要注意一下:

1xI2m4.png

angle_min和angle_max是设置雷达扫描的角度范围,这是一对很有用的参数。

  • 在实际情况中,由于机器人的结构设计问题,雷达在机器人底盘上的位置导致其并不能将360°范围数据都拿来使用,经常只需要雷达的前180度的扫描数据。那么你只需要修改这两个参数的值,将angle_min改为-90,angle_max改为90,这样就可以达到需要的结果。

在最后arg 参数依次对应的含义是:

0.2245 0.0 0.2 0.0 0.0 0.0 /base_footprint /laser_frame 40
x y z yaw pitch roll frame_id child_frame_id period_in_ms
  • x,y,z:xyz的坐标;

  • yaw,pitch,roll:绕z旋转弧度角,绕y旋转弧度角,绕x旋转弧度角;

  • frame_id,child_frame_id,period_in_ms:父坐标系,子坐标系,发布间隔(ms)。

上述是指的x方向增加0.2245m,z方向增加0.2m(其中注意 yaw,pitch,roll 不要弄错,可以通过rviz查看,红色是x ,绿色是y,蓝色是z)

修改launch文件

修改launch文件其中的参数,使其对应我们的实际机器人,在agv_car新建launch文件夹,里面存放launch启动文件:

1
2
3
roscd agv_car/
mkdir launch
gedit laser4.launch

复制X4激光雷达的官方启动文件lidar.lancun内容,在上面进行修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<launch>
<node name="ydlidar_node" pkg="ydlidar" type="ydlidar_node" output="screen" respawn="false" >
<param name="port" type="string" value="/dev/ydlidar"/>
<param name="frame_id" type="string" value="laser_frame"/>
<param name="resolution_fixed" type="bool" value="true"/>
<param name="auto_reconnect" type="bool" value="true"/>
<param name="angle_min" type="double" value="-180" />
<param name="angle_max" type="double" value="180" />
<param name="range_min" type="double" value="0.1" />
<param name="range_max" type="double" value="10.0" />
<param name="ignore_array" type="string" value="" />
</node>
<node pkg="tf" type="static_transform_publisher" name="base_link_to_laser4"
args="0.19 0.0 0.31 0.0 0.0 0.0 /base_footprint /laser_frame 40" />
</launch>

其实只是修改了args参数,使其坐标对应机器人的实际情况。

参考资料

[1]. YDLIDAR官网资料下载

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


两轮差速底盘SLAM系列(5)--ROS下驱动激光雷达EAI-X4
https://kevinloongc.github.io/posts/3290.html
作者
Kevin Loongc
发布于
2020年2月16日
许可协议