Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

SLAM+语音机器人DIY系列:(六)SLAM建图与自主避障导航——1.在机器人上使用传感器

小虎哥哥爱学习 2019-02-21 15:39:00 阅读数:409 评论数:0 点赞数:0 收藏数:0

摘要                                            

通过前面的基础学习,本章进入最为激动的机器人自主导航的学习。在前面的学习铺垫后,终于迎来了最大乐趣的时刻,就是赋予我们的miiboo机器人能自由行走的生命。本章将围绕机器人SLAM建图、导航避障、巡航、监控等内容展开。本章内容:

1.在机器人上使用传感器

2.google-cartographer机器人SLAM建图

3.ros-navigation机器人自主避障导航

4.多目标点导航及任务调度

5.机器人巡航与现场监控

1.在机器人上使用传感器            

SLAM建图需要用到底盘、激光雷达和IMU,所以这里详细介绍如何在机器人上使用这些传感器。要使用这些传感器也很简单,就是在机器人上开启相应传感器的ROS驱动节点,在设置合适的可配参数就行了。

需要注意的是,底盘、激光雷达、IMU这三个传感器都使用串口与树莓派通信,为了防止每次开机这三个设备的串口号发生变动,需要将串口号进行绑定与重映射,操作方法在前面已经介绍过了,如果还没有绑定直接前往前面相关内容参考

这里将建立一个叫catkin_ws的ROS工作空间,专门用于存放机器人传感器相关的ROS驱动功能包。关于创建ROS工作空间的操作,请参考前面[相应部分内容](https://www.cnblogs.com/hiram-zhang/p/10387292.html),这里就不做讲解。

1.1.使用底盘                

在机器人上只需要使用miiboo这个驱动包就可以驱动底盘了。将miiboo这个驱动包拷贝到~/catkinws/src/中,编译后就可以使用了。miiboo驱动包文件结构,如图1。miiboo驱动包中含有两个ROS功能包miiboobringup和miiboodescription,驱动miiboo底盘、底盘PID整定、里程计标定这些功能包含在miiboobringup中,miiboo底盘urdf模型包含在miiboo_description中。

(图1)miiboo驱动包文件结构

底盘控制可配参数:

关于底盘控制可配参数都放在miiboo_bringup/launch/minimal.launch中,如图2。

参数com_port是底盘控制的串口号,由于前面已经做了绑定,所以直接填入绑定好的名称/dev/miiboo就行了;

参数speed_ratio是里程计走直线标定值,这个值通过标定得到。

参数wheel_distance是里程计转角标定值,这个值通过标定得到。

其余参数一般不需要修改,如有需要可以结合阅读源码来了解参数含有和做相应修改。

(图2)底盘控制可配参数

驱动miiboo底盘:

其实很简单,一条命令启动miiboo底盘控制。roslaunch miiboo_bringup minimal.launch

底盘PID整定:

我们的miiboo机器人底盘的stm32控制板中已经内置了整定好的PID参数,如果选用我们提供的控制板和电机,一般情况下是不需要整定PID的。

对于想体验一下PID参数整定过程或将我们的miiboo机器人底盘的stm32控制板应用到其他地方的朋友,这里给出了整定PID的整个操作过程和思路,方便大家学习和更深层次的研究。这里主要讲解PID整定的操作,关于原理性的东西可以参考前面相关内容进行了解。

由于底盘PID整定是非必须的功能,所以没有对底盘PID整定的串口(DEBUG-uart1)做绑定,需要先手动插入该串口到树莓派3,然后手动查看该串口的设备号,并修改该设备号的可读写权限。然后将该设备号填入miiboobringup/launch/pidset.launch中的comport参数中。然后,需要启动底盘控制节点、底盘调试节点、键盘控制节点。键盘控制节点teleoptwistkeyboard需要通过apt-get命令来安装,rqtplot是ROS提供的绘图工具。/#打开终端,启动底盘控制节点 roslaunch miiboobringup minimal.launch /#再打开一个终端,启动底盘调试节点,按提示输入命令 roslaunch miiboobringup pidset.launch /#安装键盘控制工具sudo apt-get install ros-kinetic-teleop-twist-keyboard /#再打开一个终端,启动键盘控制节点, source~/.bashrc rosrun teleoptwistkeyboard teleoptwistkeyboard.py /#再打开一个终端,用rqtplot对底盘速度曲线进行绘制,指定曲线数据来源的topic rosrun rqtplot rqtplot

ROS提供的绘图工具rqtplot用法很简单,在rqtplot界面中,在Topic栏输入曲线数据来源,我们这里为左、右轮速度,然后点击旁边的“+”将曲线加入绘制界面,人如图3。

(图3)用rqt_plot显示速度曲线

然后,通过在启动teleoptwistkeyboard节点的终端通过I/

(图4)实时速度曲线显示

里程计标定:

机器人底盘运行的精度是衡量底盘的重要指标。底盘精度受里程计的走直线误差和转角误差影响。因此,需要对里程计的走直线和转角进行标定,尽量减小误差。miiboo机器人底盘的ROS驱动中已经写好了相应的标定程序,跟里程计标定有关的文件主要有:

.../miiboobringup/launch/checklinear.launch为里程计走直线标定启动文件

.../miiboobringup/launch/checkangular.launch为里程计转角标定启动文件

.../miiboo_bringup/launch/minimal.launch为设置标定参数及底盘控制启动文件

下面是标定步骤过程。

由于标定过程在前面已经讲解过了,请直接前往相应内容参考。

miiboo底盘urdf模型:

urdf模型描述了机器人底盘的形状、传感器之间的安装关系、各个传感器在tf tree中的关系。其实,miiboo底盘urdf模型的主要作用是提供各个传感器在tf tree中的关系,这些关系将在SLAM和导航算法中被使用。

(图5)miiboo机器人底盘中各个传感器tf关系

图5是miiboo机器人底盘中各个传感器tf关系,basefootprint是底盘的运动中心,baselaserlink是激光雷达的中心,imulink为IMU模块的中心。以basefootprint为原点,建立机器人底盘的坐标系,坐标系为标准右手系,即底盘正前方为x轴、正左方为y轴、正上方为z轴、以x轴起始逆时针方向为theta轴。以basefootprint为父坐标系,建立basefootprint->baselaserlink关系,建立basefootprint->imulink关系,就实现了各个传感器tf关系的构建,构建的具体实现在miiboodescription/urdf/miiboo.urdf中完成。如图6,为miiboo.urdf的具体内容。

(图6)miiboo底盘urdf模型描述文件

要使用这个urdf模型就很简单了,直接一句命令启动。roslaunch miiboodescription miiboodescription.launch

1.2.使用激光雷达            

在机器人上只需要使用ydlidar这个驱动包就可以驱动ydlidar-x4雷达了。将ydlidar这个驱动包拷贝到~/catkinws/src/中,编译后就可以使用了。ydlidar驱动包文件结构,如图7。ydlidar驱动包中的其他文件我们不需要关心,这些都是由雷达厂商提供的标准驱动,只需要设置我们自己建立的ydlidar/launch/myx4.launch文件,这个用于启动雷达。

(图7)ydlidar驱动包文件结构

激光雷达数据可配参数:

关于激光雷达数据可配参数都放在ydlidar/launch/my_x4.launch中,如图8。

参数port是激光雷达的串口号,由于前面已经做了绑定,所以直接填入绑定好的名称/dev/lidar就行了;

参数rangemin和rangemax是设置激光雷达数据的有效值区间。

其余参数一般不需要修改,如有需要可以结合阅读源码来了解参数含有和做相应修改。

(图8)激光雷达数据可配参数

驱动ydlidar-x4激光雷达:

其实很简单,一条命令启动ydlidar-x4激光雷达。roslaunch ydlidar my_x4.launch

激光雷达数据格式:

激光雷达采用右手坐标系,雷达正前方为x轴、正左方为y轴、正上方为z轴、以x轴起始逆时针方向为theta轴。激光雷达的扫描数据以极坐标的形式表示,雷达正前方是极坐标0度方向、雷达正左方是极坐标90度方向,红色点为扫描到的数据点,如图9所示。

(图9)激光雷达数据格式

激光雷达的数据在ROS中是以sensormsgs/LaserScan消息类型进行表示,如图10,angleincrement表示激光数据点的极坐标递增角度,ranges数组存放实际的极坐标点距离值。

(图10)激光雷达数据sensor_msgs/LaserScan消息类型

1.3.使用IMU                                                  

在机器人上只需要使用miibooimu这个驱动包就可以驱动mpu9250模块了。将miibooimu这个驱动包拷贝到~/catkinws/src/中,编译后就可以使用了。miibooimu驱动包文件结构,如图11。ydlidar驱动包中的其他文件我们不需要关心,只需要设置ydlidar/launch/my_x4.launch文件,这个用于启动IMU。

(图11)miiboo_imu驱动包文件结构

IMU数据可配参数:

关于IMU数据可配参数都放在miiboo_imu/launch/imu.launch中,如图12。

参数come_port是IMU的串口号,由于前面已经做了绑定,所以直接填入绑定好的名称/dev/imu就行了;

其余参数一般不需要修改,如有需要可以结合阅读源码来了解参数含有和做相应修改。

(图12)IMU数据可配参数

驱动IMU模块:

其实很简单,一条命令启动IMU模块。roslaunch miiboo_imu imu.launch

IMU数据格式:

IMU模块采用右手坐标系,IMU模块正前方为x轴、正左方为y轴、正上方为z轴。IMU模块提供3轴加速度、3轴角速度、3轴磁力计、经数据融合后用欧拉角表示的姿态。

IMU数据在ROS中是以sensor_msgs/Imu消息类型进行表示,如图13。

(图13)IMU数据sensor_msgs/Imu消息类型

1.4.使用摄像头               

miiboo机器人上使用的是USB摄像头,用ROS驱动USB摄像头可以采用以下3中方法。

方法1:

使用usb_cam这个ROS包直接驱动

方法2:

使用gscam这个ROS包直接驱动

方法3:

自制OpenCV,cvbridge,imagetransport驱动ROS包

为了方便起见,我采用的是方法1,直接安装usb_cam这个ROS包直接驱动。

usb_cam摄像头驱动安装:

将usbcam下载到~/catkinws/src/中,直接编译就行了。cd ~/catkinws/src/git clone https://github.com/ros-drivers/usbcam.git rosdepinstallusbcam cd~/catkinws/catkin_make

摄像头数据可配参数:

关于摄像头数据可配参数都放在usbcam/launch/usbcam.launch中,如图14。

参数video_device是摄像头的设备号,由于直插了一个USB摄像头,所以直接填入名称/dev/video0就行了;

其余参数一般不需要修改,如有需要可以结合阅读源码来了解参数含有和做相应修改。

(图14)摄像头数据可配参数

驱动USB摄像头:

其实很简单,一条命令启动USB摄像头。roslaunch usbcam usbcam.launch

摄像头远程显示:

摄像头数据远程显示的方法有两种,方法一是在PC端rviz中订阅摄像头发布的图像topic,方法二是用Android手机上miiboo机器人APP直接显示。

先说方法一,在PC端打开rviz,在rviz中添加需要显示的Topic,这样就可以看到图像了。如图15和16。

(图15)在rviz中添加需要显示的图像Topic

(图16)在rviz中显示图像Topic

方法二,就很简单了,只要Android手机上miiboo机器人APP连接到机器人端成功后,就能自动显示图像了。如图17。

(图17)在Android手机的miiboo机器人APP中显示图像Topic

1.5.局域网内广播机器人自己的IP                 

这个很简单,由broadcastip这个功能包实现,我已经写好放入~/catkinws/src/并编译了。只需要一句命令启动就行了。roslaunch broadcastip broadcastudp.launch

后记                                                      

如果大家对博文的相关类容感兴趣,或有什么技术疑问,欢迎加入下面的《SLAM+语音机器人DIY》QQ技术交流群,一起讨论学习^_^

 

版权声明
本文为[小虎哥哥爱学习]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/hiram-zhang/p/10412509.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领