摘要:机器视觉系统可以快速地获取大量信息,是机器人感知外部环境、获取信息的一个重要途径。从采集到的图像中提取有效信息并加以应用,是机器视觉技术的核心内容。本次设计,基于STM32和OpenMV制作完成了一套乒乓球追踪系统。利用OpenMV进行图像采集与处理,将数据通过串口传输至stm32,通过stm32与PID算法实现对舵机云台的控制,达到追踪乒乓球的效果。经过测试,本次设计完成的乒乓球追踪系统能过稳定、快速地跟随目标乒乓球。
关键词:OpenMV、阈值分割、PID、乒乓球追踪、舵机云台
1. 引言
机器人控制技术快速发展,越来越多的智能机器人开始走进工厂、校园、商场等场所。机器视觉在智能机器人对外部环境感知中起着越来越重要的作用。故本次设计,将嵌入式控制系统与机器视觉相结合,采用图像处理的方法,对目标乒乓球进行识别。并搭建舵机云台,利用PID控制算法,使得舵机云台能够稳定的跟随目标乒乓球。
2. 系统简述
2.1 系统组成
乒乓球追踪系统主要由三部分:电源管理、搭载OpenMV的舵机云台、STM32。OpenMV进行图像的采集与处理,并将图像处理结果通过串口通讯传送至STM32。STM32接受OpenMV发送的数据,利用PID控制具有两个自由度的舵机云台,从而对乒乓球进行追踪。系统总貌如图1所示。

图1 乒乓球追踪系统实物图
电源管理上,利用LM2596降压模块将锂电池提供的12V电源降至5V,为OpenMV和舵机云台中的上下两个舵机供电。STM32产生PWM波控制舵机的旋转角度,并通过USART1与OpenMV进行数据传输。
2.2 硬件选型
2.2.1 图像采集
为达到快速跟踪的效果,本次设计对图像的采集与处理速度由一定的要求。常见的图像传感器模块,采集到的图像有VGA、QVGA、QQVGA三种分辨率大小。其中VGA为640*480像素,QVGA为320*240像素,QQVGA为160*120像素。对于一幅320*240分辨率的图像,每一个像素占2字节,则出书一幅完成图像的大小为320*240*2,共153600字节。若用普通的I/O进行数据读取,由于数据量较大,消耗CPU使得单片机无法正常从事其他任务,同时,数据传输速度还会受到图像采集模块如:OV7670的输出同步信号频率大小的限制。
对于带有缓冲区FIFO的图像采集模块,可先将图像保存至缓冲区内,再利用普通的I/O端口读取缓冲区内的数据。但是由于还需进行图像的处理等运算,使用带FIFO的图像采集模块会存在读取卡顿,不连续的情况,影响最终的跟踪效果。
故本次设计最终采用OpenMV3机器视觉模块作为完成图像的采集和处理。OpenMV搭载了MicroPython解释器和ARM Cortex M7,400MHz处理器,可利用Python进行编程,其处理速度完全能够满足本次设计的需求。同时OpenMV有专用的IDE可作为上位机,来观察采集到的图像,与图像处理之后的识别效果。

图2 OpenMV3
2.2.2 ARM选型
主控芯片需要完成三个任务:通过串口通讯获取OpenMV传输的数据,利用定时器产生两路独立的PWM信号控制舵机转向,通过两个PID调节器控制PWM占空比使得搭载OpenMV的舵机能够对乒乓球进行追踪。则需要一个串口通信中断,两个定时器和一个定时器中中断。 则使用STM32F103C8T6可以满足需求。
2.2.3 舵机云台
舵机云台为本乒乓球跟踪系统的主要控制对象,主要由上下两个舵机和四个连接件构成。如图3所示。

图3 舵机云台
下舵机,控制云台的左右移动,上舵机控制云台的俯仰运动。两个舵机的旋转范围均为0-180度。通过控制舵机云台的运动,带动其搭载的OpenMV机器视觉模块运动。
2.3 控制思路
基本控制思路如图4所示。OpenMV进行图像采集与处理,将获取的坐标信息编码之后通过串口发送至STM32,STM32接受数据并提取坐标信息之后,利用PID调节器,调节舵机云台上下两个舵机的占空比,从而控制舵机的转向,使其能够跟踪目标乒乓球。

图4 控制流程图
3. 控制算法
3.1 图像处理算法
利用OpenMV采集QQVGA(160*120)分辨率的图像,在Lab颜色空间下进行阈值分割,L为像素亮度,a和b为两个颜色通道。原图和经过阈值分割之后的图像如图5所示。

图5 阈值分割图
由于环境影响,环境中某些背景颜色会和乒乓球的颜色相近,如棕黄色桌面等。故在框定目标区域时,会得到若干个结果,需要对得到的目标区域进行筛选。考虑到目标乒乓球距离摄像头较近,在画面中占的面积较大,故对候选目标区域的面积进行计算,最终选择面积最大的区域作为目标区域。之后再计算得到目标区域的中心位置,即为乒乓球的中心位置。其运行效果如图7所示。图中白色十字部分,即为识别到的乒乓球中心位置。

图7 图像识别效果
3.2 数据传输
在数据传输上,利用OpenMV的UART3串口与STM32的USART1串口进行数据通信。每一次发送的数据以0xAA和0xAE为开头,作为标志位,后面分别存放八位的中心位置横纵坐标数据。STM32通过USART1进入中断接收OpenMV传输的数据,首先判断是否接收到标志位0xAA和0xAE,之后再存储横纵坐标数据。利用STM32,将其接收到的数据,通过串口发送,在PC端用串口调试助手,查看数据如图8所示。课件,成功完成了数据的传输。

图8 数据传输结果
3.3 舵机控制
本次设计采用的舵机位2个SG90舵机。其工作电压为3.5V-6V,能够在0-180度范围内转动。在舵机角度的控制上,舵机内部有一个周期为20ms,宽度为1.5ms的基准脉冲信号。当外部输入一个相同周期,宽度不同的控制信号时,控制信号与基准信号产生电压差,控制电机转动,电机转动会带动舵机内部的电位器转动,从而消除电压差使得舵机达到平衡。控制信号高电平为0.5ms-2.5ms对应舵机转动角度为0-180度。、

图9 SG90舵机
故由利用TIM2的通道3和通道4产生两路周期为20ms的PWM信号,作为舵机的控制信号。而定时器的预分频和自动重装载值,则决定了对舵机控制的精确度。若选用预分频值7199,自动重转载值199,则PWM设定值偏差20,对应舵机角度变化为180度,则控制的最小旋转角度为9度,控制精确度不高。若选用预分频值719,自动重转载值1999,则PWM设定值偏差200,对应舵机角度变化为180度,其控制准确度会相对较高。若再提升自动重转载值,经过实验发现,对控制效果没有明显的提升,故采用预分频值719,自动重转载值1999的组合来设置定时器。
3.4 PID调节器
由于在OpenMV中设置的图像大小为QQVGA格式,即160*120像素大小,则目标横坐标值为80,目标纵坐标值为60。以水平方向为例,若乒乓球位于画面中心位置的左侧,则检测到的乒乓球中心位置坐标小于目标中心位置。则需要增大占空比,使得下舵机向左侧转动。
考虑到在跟踪效果上,只要保证目标乒乓球在画面的中心左右即可,无需准确达到中心无偏差位置。若控制达到精准的中心位置且没有偏差,由于乒乓球为手持状态,有抖动,会造成舵机云台频繁抖动,使得最终的控制效果较差。故在PID调节程序中,加入死区部分,当检测到的乒乓球位置与目标位置相差±10个像素位置时,PID控制器不起作用。当位置相差大于超过±10的范围时,PID调节器起作用。
在控制周期方面,利用定时器TIM3产生5ms定时,对舵机云台进行控制。同时,由于舵机控制位置较为精准,上下两个舵机的控制器均采用纯比例控制,上舵机的比例系数为0.01,下舵机的比例系数为-0.009,达到了优秀的控制效果。
具体PID程序如图10所示。

图10 PID控制子程序
4. 总结
本次设计完成的基于STM32和OpenMV的乒乓球追踪系统,通过测试,在无外接干扰情况下,舵机云台能够稳定地跟随目标乒乓球,且舵机云台的调节顺畅、灵活。完成了系统设计的目标。
同时本次设计所完成的系统也存在一些需要改进的地方,在图像处理采用的阈值分割上,当环境光照条件发生变化,能够将乒乓球分割出来的阈值也会发生变化,则在改变环境之后要相应的改变程序中设定的阈值,即本系统对环境较为敏感。
通过本次设计,从选题的确定,到硬件的选型、舵机云台的搭建,程序的编写,不仅让我对arm掌握更加熟练,同时也让我对一个项目完成的工程性有更深入的认识和体会。也注意到,在完成项目时,规范和条理的重要性。