汽车结构图2019年第9期
106计算机应用技术
信息技术与信息化
基于ROS 系统的轮式物流小车控制系统设计
张哲辉* 郑旸初 朱耀佳 尤昊成
ZHANG Zhe-hui ZHENG Yang-chu ZHU Yao-jia YOU Hao-cheng
摘 要 针对传统轮式物流小车感知能力有限、功能较为单一、系统结构复杂等问题,设计了基于ROS 的轮式物
流小车,具备图像识别和语音播报等功能。方案基于上位机与下位机的结构,上位机完成摄像头图像分析和语音播报,下位机完成运动控制。本文重点给出了控制系统的软硬件的设计思路和方法,建立了一个结构简单、功能可行的轮式物流小车的控制系统。实验结果表明,该系统的设计方案是合理可行的,未来可在此基础上进一步改进。
关键词 ROS,物流小车,二维码识别
doi:10.3969/j.issn.1672-9528.2019.09.033
* 温州大学瓯江学院 浙江温州 325035
[基金项目] 温州大学瓯江学院“大学生创新创业训练计划”创新训练项目(JWCX1827)
近些年随着技术的日益发展,各类机器人逐渐进入人们的视线中,例如餐厅服务机器人,消防救援机器人,无人驾驶汽车等等。这些机器人对自动化以及人工智能技术水平提出了更高的要求。轮式物流小车是一种移动机器人,传统的移动机器人一般采用单片机作为主控单元,通过一块或多块处理器实现定位、避障、决策和导航。这类设备存在一些不足之处,例如对环境的感知能力有限,功能较为单一;系统结构复杂,移植困难[1]。本文提出一种适用于轮式物流小车的软硬件设计方案,使用微型电脑作为系统的主控制器,管理挂载的摄像头、音频设备以及用于管理小车底盘的下位机,使小车系统的处理能力有一定的上升。1 系统总体设计
设计的轮式物流小车的最终能够实现的功能是能够在仓库或者物流中心实现自主移动和语音播报,因此小车必须具备环境感知和底盘运动控制的功能。常规的设计方案采用单片机直接驱动底盘、摄像头以及音频设备,一般能够达到较为稳定的使用效果,但最大的缺点是对摄像头的图像解析能力不足。
ROS 的全称是Robot Operating System,是一个机器人软件平台,起源于斯坦福大学人工智能实验室。
平台提供一些标准操作系统服务,例如底层设备控制,硬件抽象,进程间消息以及数据包管理。ROS 基于一种图状架构,从而不同
节点的进程能接受、发布、聚合各种信息。在设计中ROS 被部署在主控制器中[2],用于
完成以下几个任务:与下位机之间的数据通信、与摄像头之间的通讯以及图像解析、驱动音频设备完成语音播报,如图1所示。
图1 小车控制结构图
上位机的ROS 平台通过摄像头不断采集图像数据进行分析,计算出小车移动的方向和速度,通过USB 端口发送给下位机。下位机通过接收到的速度和方向信息驱动电机实现向目标位置的移动,并实时将电机转速信息返回至上位机。2 系统硬件方案设计
根据总体设计,小车应具备主控制器、下位机、摄像头和音频设备。主控制器采用树莓派3b+,安装Ubuntu Mate 16.04系统和Kinetic Kame 版本的ROS 平台。树莓派是一款只有信用卡大小的微型电脑,其系统基于Linux,树莓派3b+体型小,计算速度基本能够达到要求。下位机采用STM-32F103C8单片机,主要负责小车的运动控制,其中包括电机驱动、编码器速度信息的采集。上位机与下位机之间使用USB 进行通讯,保证了通信的抗干扰性和准确性。
小车底盘采用双轮差动结构,如图2所示。底盘通过后方的两个车轮实现运动,当两轮之间存在速度差时可以实现
转向。前部车轮为从动轮,使底盘保持稳定,下位机安装在底盘上,图中底盘上的立方体表示下位机。
2019年第9期107
计算机应用技术
信息技术与
信息化
图2 小车底盘结构示意图
下位机的STM32F103C8通过TB6612芯片驱动电机,TB6612具有大电流MOSFET-H 桥结构,双通道电路输出,可同时驱动2个电机,最高可用输出15V 的电压。STM32通过2路PWM 和4个GPIO 完成两个电
机的正反转和变速。增量式编码器分两类,一类是输出AB 两相脉冲信号,另一类输出一路表示速度的脉冲信号和一路方向信号。小车采用了第一类编码器,利用STM32上的通用定时器正交解码功能实现了速度的采集。3 软件方案设计3.1 PID 闭环速度控制
在小车的控制中,使用PWM 脉冲宽度调制波来调节电机驱动电路的输出电压,从而调节电机转速,但是这种控制方式存在滞后性以及可靠性的问题。PID 算法是自动控制理论中广泛应用的一种闭环控制算法,可以实现小车车速的定速控制。由于小车是通过上位机分析摄像头的图像数据来计算出目标方位和速度,下发指令并要求下位机严格执行该指令。如果由于电池电压不稳的原因造成实际的运动与预计的不同,就会造成位置的偏离。因此在设计中采用PID 算法,实现速度的精确控制。
具体的执行步骤是:(1)上位机计算得到目标速度通过USB 发至下位机;(2)下位机检测当前编码器的数值,计算实际速度与目标速度的偏差;(3)根据编码器数据与PWM 数值的数量级差距设定比例量KP、积分量KI 和微分量KD,然后带入图3
中的公式。
图3 PID 算法公式
其中u(t)为计算得到的PWM 的值,b(t)为实际速度与目标速度的偏差。(4)不断的调整KP、KI、KD 的值使得车速从上一个稳态到新稳态之间的时间尽可能短。
在实验中,小车使用了比例环节和微分环节组成PD 控制,可以保证运动的精准性。3.2 图像分析与语音播报
小车可以通过识别二维码来领取任务,同时语音播报
任务领取成功。由于采用了树莓派做主控制器,因此设计在树莓派上部署OpenCV 对摄像头的彩图像数据进行解析,OpenCV 是一套成熟的跨平台计算机视觉库,在嵌入式平台以及电脑领域使用广泛。摄像头采用奥比中光的RGBD 摄像头,可以在对图像进行识别的同时检测距离。OpenCV 中没有对深度图像解析的功能包,因此另外使用OpenNI 来计算距离。OpenNI 是体感应用开发的一个重要的函数库,在设计中调用了OpenNI 中用于深度图解析的部分函数。语音播报是预先
在树莓派上存入几段录音,被触发后通过音频设备进行播放。图像分析和语音播报两项任务存在独立性,因此ROS 将两项任务进行联动,使小车之更好的工作。
彩图像识别二维码的过程是:(1)调用cv::VideoCapture 的open 指令获取摄像头视频流;(2)
调用cv::GaussianBlur 和cv::threshold 对图像进行模糊化和二值化;(3)调用cv::findContours 指令到轮廓并分离出矩形。由于二维码的角落有3个定位方块,因此这一步是为了得到二维码角落坐标;(4)透视变换和旋转调整图像方向,根据二维码采用的标准,如Data Matrix、MaxiCode、Aztec、QR Code、Vericode,对中间的数据点采样解析,获得任务内容。
通过以上步骤识别二维码,之后利用OpenNI 获取二维码中心点与镜头之间的距离。具体步骤包括(1)初始化OpenNI,通过open 指令打开深度摄像头;(2)通过get-MaxPixelValue 指令获取各个像素点的距离值,单位为毫米。
获知距离信息后,小车能够和二维码保持恰当的距离,较好的识别信息。利用ROS 平台下的cv_bridge 可以将OpenCV 数据进行转化,并在ROS 平台进行显示。
语音播报使用ROS 平台的sound_play 模块,预先录制几段音频,根据场合进行播放。音频内容包括“成功获取任务1”、“成功获取任务2”、“任务完成”等,对sound_play 源码进行修改,实现触发和调用。3.3 上下位机通讯协议设计
上位机与下位机之间通过USB 进行通讯,下位机使用ch340芯片将USB 数据转换为UART 串口数据进行接收。要进行稳定的上下位机通讯,良好的通讯协议是必要的。设计时考虑帧头校验和帧尾校验,因此设计8字节的通讯协议,协议如表1所示。
表1 上下位机通讯协议
帧头1帧头2左轮速度
右轮速度
备用
帧尾
0x50
0xaf
高8位低8位高8位低8位1字节校验位
上位机首先发送2字节帧头指令,之后发送2个16位左右轮目标速度指令,下位机根据目标速度进行PID 速度闭环控制。备用字节可以在将来功能扩展时进行使用,如设置启动指令、停止指令。帧尾设置求和校验,如果前面7个字
2019年第9期
108计算机应用技术
信息技术与信息化
节求和与帧尾相等,下位机执行命令,否则丢弃。下位机执行任务时实时将编码器速度信息上传,帮助上位机定位,采用同样的通讯协议。3.4 ROS 的节点设置
上位机的功能都是通过ROS 平台的topic 节点通信完成[3],一共设置3个节点,包括图像识别camera_node 节点,语音播报的audio_node 节点和用于与下位机通讯的core_node 节点,上位机的节点通讯分布图如图4
所示。
图4 ROS 节点分布图
camera_node 节点功能:彩摄像头和深度摄像头图像解析,生成具有Twist 类型的数据,Twist 类型包含三轴的速度与角度信息,通过/cmd_vel 话题发布[4]。同时发布/std::msgs 类型数据,用于触发语音播报功能。
audio_node 节点功能:订阅/std::msgs 话题,通过回调函数触发语音播报,通过/std::msgs 数据内容决定播放哪条语音。
core_node 节点功能:综合处理信息,订阅/cmd_vel 话题,通过回调函数接收数据,与下位机之间进行USB 数据通讯。4 实验结果分析
轮式物流小车控制系统设计完成后,为了验证本文设计方案能否实现预定功能,搭建了实际的硬件平台,如图5所示。下位机和音频设备放置在底盘上,上位机和摄像头放置于上
层。
图5 小车实物图
由于上位机无显示屏,无法实时查看二维码识别结果,
为了方便实验,将笔记本电脑和树莓派加入同一个局域网,进行分布式多机通讯。ROS 是一种分布式软件框架,节点之间通过松耦合的方式进行组合,节点可以运行在不同的计算平台上。在多机系统中Master 只能运行在一台机器上,其他机器通过ssh 的方式与之取得联系。
因此在测试中,笔记本和树莓派加入同一个局域网,配置两机的hosts 文件和ROS_MASTER_URI。之后树莓派上的运行roscore 作为Master,启动camera_node、audio_node、core_node 三个节点。编写camera_node 时已将彩图像经过cv_bridge 转化为/cv_bridge_image 话题,因此在笔记本上通过rqt_image_view 软件订阅/cv_bridge_image 话题可以查看二维码识别情况。
二维码识别结果表明如图6所示,成功识别角落的方块。之后根据二维码的标准,对内部的数据点进行采样,黑为1白为0
读出各行的数据进行解析,完成后可执行任务。
图6 二维码角落方块识别结果
5 结束语
轮式物流小车的设计目标是使小车能够通过二维码识别任务内容,并移动到预定位置。本文涉及了小车的控制系统搭建、二维码识别、语音播报,上下位机通讯协议的内容。在后期的使用中将对图像识别程序进行改进,利用摄像头拍摄场地的黑寻迹线来进行寻迹,或者是利用ROS 的SLAM 模块建立环境的点云模型。实验结果表明,小车能够准确的发现空间中的二维码并移动到合适的距离读取内容。环境光线对摄像头的识别效果有一定影响,在强光下二维码容易产生反光,但小车在室内环境使用的效果在可接受的范围。
参考文献
[1] 张腾,金光江,先亮. 基于ROS 的家庭服务机器人设计[J].数据通信, 2018(6):7-9+25.
[2] 宋杰,申剑涛,张豪. 基于ROS 的竞赛机器人自主定位与导航技术研究[J].科学技术创新, 2019(6):84-85.
[3] 常恒诚,孙启湲,丁承君. 基于ROS 的奶油裱花机器人系统架构设计[J].食品工业, 2019(2):216-219.
[4] 胡思旺,李春杰. 基于ROS 的人脸识别系统设计与实现[J].
电子技术与软件工程, 2019(7):32-34.【作者简介】
张哲辉(1997-),男,湖南人,温州大学瓯江学院机电工程学院,本科生;
郑旸初(1990-),男,浙江人,温州大学瓯江学院机电工程学院,讲师。
(收稿日期:2019-08-28)
发布评论