两轮差速底盘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、修改驱动包名字
刚下载下来不能直接编译,需要先修改驱动包名字。进入驱动包文件夹打开CmakeLists.txt文件,查看project(ydlidar)
可以知道工程名字为ydlidar
,回到src目录把驱动包重命名为ydlidar
即可编译。
1 |
|
3、配置udev规则为
因为每次开机时usb设备的加载顺序是随机的,这样就导致挂载点也随机,为了保证我们的启动雷达的代码统一,因此就需要为X4的串口配置一个设备别名 /dev/ydlidar
,udev配置规则脚步放在ydlidar/startup
目录下名字是initenv.sh
。
1 |
|
执行完脚本需要重新拔插激光雷达才可以生效。
运行YDLIDAR包
启动雷达有两个launch文件,一个lidar.launch是直接执行启动雷达进行扫描测距,另外一个是lidar_view.launch不仅可以启动雷达,还可以顺带启动rviz来将雷达数据可视化显示。
1、RVIZ查看扫描结果
运行 launch 文件,打开 rviz 查看 X4 扫描结果,如下图所示:
1 |
|
2、终端上显示数据
1 |
|
二次开发
激光雷达安装
X4内部极坐标系
为了方便二次开发,X4内部定义了极坐标系。系统极坐标系以X4的旋转核心的中心为极点,规定角度顺时针为正,零位角位于X4电机的正前方,如下图所示:
ROS下坐标系
在ROS下坐标系方向使用的是右手坐标系,食指指向x轴正方向,中指指向y轴正方向,拇指指向的是z轴正方向。
对于旋转的正负方向规定是:右手握拳拇指指向z轴正方向,其余四指弯曲的方向即旋转的正方向,即围绕z轴做逆时针旋转是角速度的正方向,顺时针旋转是角速度的负方向。
由此可以得知雷达的旋转方向与ROS规定的正向旋转是相反的,因此雷达扫描得到的原始数据也需要经过处理才行。现在这部分已经在ROS源码中经过处理了,因此现在雷达的坐标轴如下:
实际安装方向摆放
从上面分析可以知道,在小车上安装时需要注意激光雷达的方向,电机的方向即是你小车的X轴正方向。
launch文件解析
首先来分析lidar.launch文件,在它的功能包说明文档已经有说明:
所以不需要修改太多的东西,官方的开发技术人员已经完善了功能包,我们只需要理解参数代表什么意思,再根据实际情况进行修改即可。里面的一些参数我们需要需要注意一下:
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 |
|
复制X4激光雷达的官方启动文件lidar.lancun
内容,在上面进行修改:
1 |
|
其实只是修改了args
参数,使其坐标对应机器人的实际情况。
参考资料
[1]. YDLIDAR官网资料下载