李红岩,张 伟,杨晨帆
(西安科技大学 电气与控制工程学院,陕西 西安 710054)
乒乓球是一种风靡我国且老少皆宜的全民性运动,但对于爱好者来说,在训练完捡球并根据颜色分类既费时又费力,影响体验。本课题设计了一种基于OpenCV的乒乓球分类捡球机器人,通过摄像头采集环境信息,经过树莓派运算识别出场地上乒乓球的位置及颜色信息,以STM32F4单片机作为主控制器,控制机器人完成捡球与分类动作。同时还有自我保护功能,保护在运动过程中撞到障碍物或者被人踩伤。
本课题设计的基于OpenCV的乒乓球分类捡球机器人主要由OpenCV图像识别系统与控制系统组成,结构如图1所示。OpenCV是基于树莓派上布署的Linux系统。机器人启动后,树莓派通过摄像头采集环境信息,识别乒乓球的位置及颜色信息并以串口通信的方式发送给STM32F4主控制器作为控制参量,控制机器人向目标乒乓球做趋近运动。运动过程中,安装在机器人四周的人体红外传感器与超声波距离传感器实时监测周围障碍物以及运动方向是否有人存在。如探测到人或障碍物则结合传感器数据,根据设定算法自动选择一条最优的无障碍通道。机器人系统总体组成如图1所示。
捡球装置由两级并联毛刷滚轮、直流减速电机、减速器、编码器、联轴器组成。两级柔性毛刷滚轮通过驱动器控制两直流减速电机的正反转与速度完成收取动作。收取动作采用阶梯式传递方式,一级滚轮高速旋转收起地面上的球,二级滚轮低速旋转将球抬升并送到储存仓仓口等待分类入仓。收取装置如图2所示。
图1 系统总体结构
图2 收集装置结构
运动部分采用四轮驱动式结构,包括直流减速电机、减速器、编码器、联轴器和橡胶轮胎。通过驱动器控制直流减速电机实现前进、后退、转弯等动作,满足捡球所需要的运动方式。驱动器采用东芝公司生产的一款直流电机驱动器件TB6612FNG,其使用MOSFET的H桥结构,可同时驱动两电机,支持PWM调速方式。系统驱动电路与实物如图3所示。
图3 系统驱动电路与实物
分类装置位于两储存仓之间,包括180°舵机、转轴、轴承和仓门。当球到达储存仓仓口时,控制器根据树莓派传回的球体颜色信息,控制舵机将与球体颜色相反的仓门向外倾斜45°关闭,使球落入对应颜色仓内,达到分类目的。分类装置结构图如图4所示。
图4 分类系统结构
避障系统包括超声波距离传感器、人体红外传感器。传感器分布在底盘周围,将采集到的信息返回控制器,经过控制器对数据的计算与判断,控制运动系统实现自主避障功能,达到自我保护目的。传感器分布位置如图5所示。
图5 传感器位置分布图
OpenCV识别基于Linux平台,开发环境为Python3,版本为4.3.0。OpenCV系统启动后自动运行乒乓球识别程序,将摄像头采集到的数据经过滤波、灰度化、圆形检测,颜色识别等处理方式,精确识别到乒乓球并将位置及颜色信息以串口通信的方式发送给控制器。
控制部分基于Windows平台,开发环境为MDK。控制器STM32F4接收到树莓派所发送的位置及颜色信息时,收集系统开始工作。控制器输出PWM信号控制分类系统调整对应颜色的仓门。同时,控制运动系统向目标乒乓球做趋近运动。整个运动过程中,避障系统实时监测周围障碍物的数据,超过警戒值立即执行避障程序,直到完成目标球的收集。
摄像头捕捉到的图像为三通道8位R,G,B彩图,每一个像素点的R,G,B值表示了该像素点的颜色。为了提升霍夫圆的识别效率,减轻运算量,对彩色图像中的无用的三维色彩信息进行剔除,转换成一维的表示黑色(0)到白色(255)之间强度变量,这个过程叫做灰度化。在OpenCV中提供了色彩空间转换函数为Gray=cv2.cvtColor(src,cv2.COLOR_BGR2GRAY)。图像原图与灰度化后图像如图6所示。
图6 图像灰度处理
在平面直角坐标系中任意圆均可表示为:
C:(x-a)2+(y-b)2=r2
式中:(a, b)表示圆心的坐标;r表示半径。将其映射到abr坐标系就是一条三维曲线。而在xy坐标系中所有非零点经过映射就构成了abr坐标系中许多条三维曲线。映射到三维图像上的点被称为投票,如图7所示。显然,在同一圆上对应的三维坐标系所得到的票数最多,即可判定能(x, y, r)坐标点就是圆。即可得到圆的圆心和半径。
图7 OpenCV坐标空间转换
在OpenCV库中封装有霍夫圆检测的库函数,检测成功后返回圆心坐标和半径信息,调用库函数:
cv2.HoughCircles(Gray, method, dp, minDist, circles,param1, param2, minRadius, maxRadius)
识别成功的乒乓球如图8所示。
图8 OpenCV识别乒乓球
机器人以避障功能达到自我保护的目的,其核心为避障算法。避障算法以超声波距离传感器所测距离,人体红外传感器的导通状态为输入,以控制运动系统为输出,控制机器人避过障碍趋近于目标位置。在机器人运动过程中超声波距离传感器始终检测前方距离,当前方距离小于安全距离10 cm或者人体红外检测到人,即可判定前方有障碍物。此时机器人停止,检测安装在机器人两侧的距离传感器的值来判定左边和右边障碍物的情况,当左边距离大于右边距离时,说明左边无障碍物向左转弯并继续前行,同时又继续检测前方距离,直到球被收集起来。避障流程如图9所示。
图9 避障算法流程
机器人上电后,系统启动,树莓派通过摄像头采集环境信息,识别到乒乓球后通过串口打印出一帧信息,如图10所示。其中包括乒乓球的位置信息,颜色信息,(R,G,B)值信息,通过串口发送给STM32F4主控。机器人达到了预期的收集和分类效果,实际测试效果图如图11所示。
图10 OpenCV系统测试
图11 机器人运行效果测试
本文所设计的基于OpenCV的分类捡球机器人充分考虑到捡球过程中遇到的困难并给出了有效的处理措施,使其可以很好的规划运动路径,搜索球体,准确趋近目标,并完成捡球、分类、储存的动作。同时充分利用了OpenCV图像处理的便捷与高效,保证了整个过程的快速与准确。根据此设计理念和设计方法可以推广到其他球类的收集工作中去。