同世雄,秦玉伟,肖康
(渭南师范学院物理与电气工程学院,陕西渭南 714099)
乒乓球运动是世界流行的球类运动项目,乒乓球训练过程中会出现球滚落在场地上的情况,散落的球需要及时清理,否则会影响运动水平的发挥。乒乓球拾取繁琐且劳累,存在发球容易,捡球难的问题。目前乒乓球捡拾器主要靠人力来完成,人工捡拾费时费力。现有的智能拾取设备多采用机械手抓取[1-2],拾取效率低下。针对乒乓球拾取困难的问题,文中提出了一种基于视觉识别的乒乓球拾取机,通过视觉传感器识别乒乓球,运动机构控制乒乓球收集机运动至目标点,栅格挤压会将球挤进栅格收集仓中,再抬升收集仓使之滑落到后方的存储仓中,完成乒乓球的拾取。
乒乓球拾取机机械结构可分为矩形栅格收集仓、乒乓球存储仓和行进装置3 部分。
乒乓球的收集仓是乒乓球拾取机的关键,该设计采用了矩形栅格按压式捡球方式,利用弹性绳能发生弹性形变的特性,将矩形弹性网格间距设置为32 mm(小于乒乓球直径40 mm),安装在机构底部。在收集仓向下按压时,弹性绳受到乒乓球的压力发生形变,乒乓球将会被挤进收集仓内,弹性绳恢复后,乒乓球的重力不会使弹性绳发生较大的形变而掉出,从而完成收集。存储仓为矩形结构,由亚克力板制成,与前面的收集仓相连。乒乓球进入收集仓后,舵机转动抬升收集仓,使乒乓球滑落至存储仓内,存储仓可最多容纳50 个乒乓球。拾取机选择4个编码减速电机带动轮子旋转运动,电机转速为131转/分,扭矩为0.69 kg/cm,可以使拾取机快速工作,能轻松上坡以及翻越较小的障碍物。
图1 控制系统示意图
STM32F407 是ST(意法半导体)开发的一种32 位高性能ARM Cortex-M4 处理器,主频高达168 MHz,支持FPU(浮点运算)和DSP 指令,1 024 kB FLASH、192 kB RAM,内部资源非常丰富。核心板上载有外扩SRAM、FLASH、EEPROM-AT24C02,能满足大容量开发的需求。乒乓球拾取机的运动控制包括收集仓的抬升与拾取机的行进转向等,屏幕显示控制和其他外设控制等都由此控制器处理。
OpenMV 是一个开源、低成本、功能强大且体积小巧的机器视觉模块,以STM32F767 为核心处理器,集成了OV7725 摄像头,在非常小的硬件单元上,用Python 语言高效地实现了核心机器视觉算法的高效开发。OpenMV 上的机器视觉算法包括颜色追踪、人脸检测、眼球跟踪、边缘检测、标记跟踪等,采用易于上手的Python 编写,降低了用户的开发难度,可轻松地完成各种机器视觉相关的任务。
STM32F7 系列处理器片内资源有UART、SPI、PWM、ADC 以及GPIO 等接口,方便扩展外围功能。乒乓球拾取机采用OpenMV 充当拾取机的“眼睛”,识别到位置信息[5]后利用串口与STM32F407 和STM 32F767 进行串口通信,完成数据交互[6]。
姿态传感器MPU6050 是乒乓球拾取机辨别自身方向与倾角的传感器,集成了3 轴MEMS 陀螺仪和一个可扩展的数字运动处理器DMP,用来测量角度和加速度,可以最大限度降低功耗、简化软件结构、提高处理速度、节省主机资源。该陀螺仪功能强大,精度较高,不仅被广泛应用于工业,同时在四轴飞行器上被大量应用。其应用原理图如图2 所示。
图2 MPU6050应用原理图
模块采用IIC 通信协议,默认总线地址为0X68(AD0 引脚为高电平时地址为0X69),单片机在总线上发送0X80 对模块进行初始化。在对陀螺仪传感器、加速度传感器、采样率进行设置后,读取器件ID为0X68 则表示连接成功,接下来就可以对模块缓存的原始数据进行读取、滤波和姿态融合,得到乒乓球拾取机的方向和机身的姿态。
乒乓球拾取机采用6 个光电开关来实现物体避障功能,如图3 所示。光电开关内部的发射器对前方空间不间断发射红外线光束,接收器把检测物反射回来的光束转换为电流传输给后面的接收电路,经放大电路处理后输出。通过转动后方电位器旋钮调整发射接收的距离,当前方出现物体时,光电开关输出低电平,MCU 通过检测电平状态确定前方是否有物体出现,再经过判断,执行相应的动作,完成避障和掉头等动作[7]。
图3 光电开关模块原理图
乒乓球拾取机搭载了一块2.8 寸的屏幕,用来实时显示拾取小球的数量、小球的位置、小车的运行状态和电量信息等,如图4 所示。屏幕的右上角是电池电量显示,上方最大的显示区域显示目前已收集的乒乓球数目,中间区域显示距离最近的乒乓球的位置坐标,下方的State 区域显示运动状态,Collect区域显示收集仓的状态,MPU6050 区域显示陀螺仪传感器的数据。在乒乓球拾取机运行过程中可以实时看到拾取乒乓球的数量、拾取目标位置、运行状态等。
图4 液晶屏幕显示分布
乒乓球拾取机首选对系统进行初始化,数据传输正常后,拾取机依靠姿态传感器和红外光电开关沿着预定方向前进,根据前方红外光电开关的电平高低判断有无障碍物或边界出现。前方有边界出现则会掉头,运行至终点时,乒乓球根据运行方向和实际边界情况返航寻找待定点,判断是否到达终点。乒乓球拾取机工作流程图如图5 所示。
图5 乒乓球拾取机的工作流程图
乒乓球运动场的地面平整和场地相对空旷的特点为视觉处理带来了相对简单的环境。乒乓球拾取机的视觉处理传感器OpenMV中,根据乒乓球颜色阈值和圆形特征,找出乒乓球的坐标位置,通过串口将乒乓球坐标发送给STM32F407。
医源性损伤是大部分脑脊液漏产生的主要原因[5]。术前:没有将术中脑脊液漏出现的风险仔细评估、对手术困难程度没有正确估计等从而没有充分的术前准备。
在寻找乒乓球的过程中,OpenMV 视野中总是出现多个乒乓球,由于乒乓球的位置不同,乒乓球拾取机总是从距离自身最近的球开始捡起,并根据乒乓球像素点的数量判断乒乓球与自身的距离。在程序运行时首先进行初始化,设置图像格式、图像大小及镜头反转等,对乒乓球颜色阈值进行选取,对镜头畸变进行校正。再寻找图像的目标阈值代表的颜色,并在目标颜色所在区域中选取最大的一个区域。对此目标颜色所在区域作霍夫变换,寻找圆形,以增强识别的准确性。将指定区域内球的数量和目标位置信息通过串口发送至STM32F407[8]。
乒乓球拾取机要将地面上的乒乓球都拾取完,就必须经过工作区域的所有地方,乒乓球拾取机可以利用编码电机进行运动距离的计算,采用MPU6050进行小车姿态和方向的判断,完成对小车位置的定位,以便完成拾取任务。
在一个矩形工作区域内,以乒乓球拾取机的起始位置为原点建立直角坐标系,每次传感器采集的数据为运动距离d与角度α,则运动位置可表示为:
其中,n为传感器采集的次数,通过运算得到了乒乓球拾取机的位置坐标(x,y),得到相对坐标信息后就可以对行进路径进行控制[9-13]。
当进行避障或者视觉传感器发现视野中出现乒乓球时,拾取机会临时改变运行路径去避障或收集乓乓球,执行动作结束时,拾取机能根据偏移前的点坐标、偏移时运行的距离、偏移的角度得到一个偏移坐标:
乒乓球拾取机由此偏移坐标Err(x,y)重新复位到预定规划的路径上去[13-15],继续进行拾球任务。
拾取乒乓球的过程中,由于传感器视角位置原因,车身前方的收集仓会在成像后变成梯形区域,通过实际测试确定梯形区域4 点的坐标。用直线将左右区域分开,用y轴坐标将前方区域与收集区域分开[16],图像区域就分成了前、后、左、右4 个区域。通过识别乒乓球所在的区域调整小车的位置,从而完成收集动作[17-18]。
在实际测试中搭载有广角摄像头的OpenMV 的有效识别距离为2 m 左右,当乒乓球拾取机向前行进时,就会扫过一个矩形区域。当拾取机到达边界时,就会掉头进行下一次寻找。如此反复,即可完成对区域内乒乓球的捡拾。捡拾路径模拟图如图6 所示。
图6 乒乓球拾取机拾取路径示意图
图6 中模拟乒乓球拾取机在实际场景中运行的情况。乒乓球拾取机从原点出发,箭头方向代表拾取机的运动方向,在其运行到边缘地区时,拾取机将会转向去完成下一次寻找,碰到障碍物会进行避障。到达终点后,乒乓球拾取机会沿着场景边缘寻找待定点,运行结束后停止拾取并在原点等待。
拾取机采用栅格挤压式捡拾与后方的收集仓结合的方式,能在提高捡拾效率的同时保证机械结构的稳定性。
在系统实际运行测试中,设置不同的捡拾时间,改变捡拾球之间的距离,进行多次测试,测试数据如表1 所示。
表1 乒乓球捡拾效率统计
根据测试数据分析,该系统能够代替人工和目前效率低下的乒乓球拾取机器人,在乒乓球捡拾领域有着较为广阔的应用前景。
该文针对人工捡拾乒乓球的低效率与高重复性,创新地提出一种栅格挤压式乒乓球拾取机。采用栅格挤压式捡拾能提高捡拾效率的同时结构稳定耐用。在正常室内环境中,能够自主完成避障及拾取乒乓球的任务,并显示收集的乒乓球的数目,能够代替传统的人工捡拾器,节省人力的同时又能够显著提高捡拾效率。