基于图像识别的差异性有色物体自分拣系统研究
2018-09-10仇国华李志煌孙树亮
仇国华 李志煌 孙树亮
(福建师范大学福清分校电子与信息工程学院, 福建 福清 350300)
随着科技的发展,机器人技术也不断成熟,机器人可以更好地协助或替代人们完成工作[1-2]。在农业应用中,机器人大多用来帮助人们完成物体搬运、水果采摘、野外探查或其他有一定危险性的工作,从而使人们的工作效率更高,而工作危险性大大降低。但是,机器人一般只能按照固定的程序指令完成一些简单的动作,灵活性和智能性仍有不足[3]。为了提高机器人的灵活性和智能性,本次研究将建立基于图像识别的差异性有色物体自分拣系统。通过该系统将摄像头和机器人的功能结合起来,让摄像头充当机器人的眼睛,使得机器人能够像人类一样“观察”外界,捕捉外界事物,进而实现对目标的跟踪定位及物体自主抓取。
1 系统整体设计
系统从底层硬件到顶层应用主要分为机械手设备、主控核心芯片、机智云平台和手机App这4部分(见图1)。
四自由度机械手是整个系统的终端控制设备,它的动作主要通过舵机转动来实现。该设备主要由STM32主控芯片来控制,通过相应程序完成一系列动作组,能够实现物体跟踪和物体抓取等功能。
主控芯片STM32是系统的中枢部分,其功能包括:通过OV7670进行图像获取,并在TFT屏上实时显示;读取按键值,实现机械手物体抓取、机械手物体跟踪、机械手复位、摄像头特效切换,以及灯光模式、饱和度、亮度、对比度等效果切换;利用模数转化通道获取系统电压,当电压过低时启动蜂鸣器;充当数据解读器,分析WiFi和蓝牙数据,并将命令下达给终端机械手去执行;通过PID算法和腐蚀算法让机械手能够更加灵活地实现物体自主抓取。
图1 系统整体框架图
网络服务器中存储了设备的所有相关数据信息,如设备ID、设备MAC地址、设备是否在线、设备是否连网、设备数据点信息以及WiFi的软硬件版本号等。它充当App与WiFi进行沟通的桥梁,WiFi通过路由器将数据上报给服务器,而App通过读取服务器数据来取得底层硬件信息;反过来,App将控制指令上发给服务器,借由服务器将数据下发给WiFi,从而控制硬件设备。网络服务器只是存储数据的中介。
系统具备WiFi-App和蓝牙App以供使用。系统的WiFi-App通过服务器与硬件设备进行沟通,而蓝牙App则不同。系统的蓝牙App不必通过服务器的数据传递,而是与手机本身的蓝牙建立连接,实现短距离无线通讯。WiFi-App可对硬件设备进行异地控制,设备在网就可以进行通讯;反之,蓝牙所提供的App只能实现短距离通讯,一旦超出蓝牙信号范围就无法进行数据传输。这两款App各有优势。
2 系统硬件设计
2.1 OV7670摄像头
OV7670是一款支持多分辨率的摄像头,同样支持多种RGB格式,可以通过对100多个寄存器的配置来实现摄像头的一些功能[4]。该摄像头是通过8位数据进行数据采集和存储,使用方便。系统显示部分则采用2.8寸TFT液晶屏,其分辨率是240×320,与摄像头分辨率相同,能够显示图像、汉字、图片等[5]。相对于普通1 602/12 864显示屏,本系统的显示屏更加人性化,更符合本系统的设计要求。摄像头数据采集和读取过程如图2和图3所示。
图2 摄像头模块图像采集过程
2.2 蓝牙与WiFi
蓝牙HC-05是一款高性能主从一体串口通信芯片,可以和其他串口设备进行无线数据传送。它所能支持的波特率范围为4 800~1 382 400,能够兼容5 V或者3.3 V的单片机系统,很容易与其他设备进行连接。蓝牙HC-05可以通过命令响应工作模式来执行相应的AT指令设置模块的参数,如密码、波特率等,也可以通过AT指令对其进行相应的控制。
图3 摄像头模块图像数据读取过程
ESP8266模块是乐鑫公司生产的高性能WiFi模块,它的通讯模式不同于蓝牙的短距离通讯。 ESP8266模块可以通过路由器或者热点等途径实现联网功能,内部固件采用AT指令,通过串口与单片机进行通信,与蓝牙类似。该模块可以用于各种3.3 V的单片机系统,实现无线数据传输。ESP8266模块采用802.11802.11 bgn标准,内置TCPIP协议和ADC数模转换程序,并且内部有低功率的32位CPU,所以可当作处理器来使用。
2.3 舵机
相比其他电机,舵机更加适用本系统。舵机的角度可以调控,操作中能够很轻松地控制机械手的动作,并通过控制占空比来控制其速度。一般情况下,舵机的PWM波周期为20 ms, 占空比0.5~2.5 ms的脉冲电平对应舵机角度为0°~180°,且呈线性关系[6]。采用500~2 500个脉冲范围对应舵机控制输出角度的占空比0.5~2.5 ms的范围,LDX-335MG舵机的控制精度为3 μs,在2 000个脉冲范围内控制精度能达到0.3°。
为了实现舵机速度的控制,在舵机的起点位置和终点位置之间划分多个控制点,而不是让舵机一次性从起点转到终点(此种情况舵机速度是最大的)。舵机的速度将控制点的影响,控制点越多速度越慢,反之越快。本系统程序设计就是基于此原理,实现机械手动作的速度控制。
2.4 电压读取及低压检测电路
蜂鸣器在本系统中充当报警器,无须程序I/O口的干涉,一旦检测到电池电压过低将会自动报警。在整个电路图的设计当中,利用PNP三极管放大电流以驱动蜂鸣器。由于PNP三极管在低电平下才能导通,所以将PNP三极管的基极接到比较器LM393的输出端。LM393的正相为系统电压,其反相为设定的阈值,正反相电压的差值若为正数则输出高电平,若为负数则输出低电平(即电池电压过低)[7]。这样就可以达到低压报警、高压不报警的效果。除此之外,在被测输入电压处加设1 ∶ 5分压电路,比例为1的电路接ADC模拟口。这样就可以通过ADC转换获取被测输入电压的1/6值,进而推算出被测电压,最终获取系统电压。
3 系统算法程序设计
3.1 腐蚀算法的程序实现
通过摄像头获取图像的RGB(色彩)信息,将RGB信息转化成HSL(即色度、饱和度、亮度),对HSL设定一个阈值和搜索范围(即图像分辨率240×320);接着开始以阈值为标准开始搜索第一个腐蚀中心,得到第1个腐蚀中心后,将从该点开始分别向上下左右4个方向进行读点,若点的颜色符合条件则予以读取[8-9];当4个方向读点全部结束后获得4个边缘点的坐标,那么这4个点组成的矩形区域就是所识别的物体。这就是腐蚀算法的程序实现流程(见图4)。
图4 腐蚀算法的程序实现流程
3.2 PID算法的程序实现
3.2.1 PID算法工作流程
如图5所示为PID算法工作流程图。PID算法相关参数如下:
PV1:E1=SV-PV1
PV2:E2=SV-PV2
PV3:E3=SV-PV3
…
PV(K-1):E(K-1)=SV-PV(K-1)
PVK:EK=SV-PVK
其中:PV1~PVK为系统开始运行以来传感器读回的控制对象的值(采样序列,采样时间间隔越短越好);E1~EK为系统开始运行以来的偏差值,EK为最新一次的偏差。
图5 PID算法工作流程图
该算法控制方式包括比例控制、积分控制、微分控制,分析如下:
(1) 比例控制。比例控制主要由EK(当前偏差)来决定,用来表示当前情况。EK表示的当前情况有3种:EK>0,表示当前控制算法不达标;EK=0,表示当前控制算法刚好达标;EK<0,表示当前控制算法已经超标。根据EK的值输出控制量POUT,POUT主要是用来调整整个控制算法的增益,POUT=KP*EK,乘以KP相当于放大或者缩小EK的值。比例控制中,输出信号跟EK成比例,根据当前偏差值和比例大小输出控制信号;而传统位式控制算法只能输出高低电平,其输出信号一般是一个PWM波信号。
(2) 积分控制。积分控制主要运用了积分的概念,是通过E1~EK这些历史数据的偏差之和SK来表示历史情况,SK=E1+E2+…+EK。SK表示的历史情况有3种:SK>0,表示历史情况大多是SV>PV,系统历史情况多数不达标(即输出控制信号并没有将控制对象的值控制到设定点上,总体上数值偏低);SK<0,表示历史情况大多是SV (3) 微分控制。微分控制运用了微分的概念,只考虑最近几次偏差E(K-2)~EK的变化趋势DK,DK=EK-E(K-1)。DK表示的变化趋势有3种:DK>0和DK<0,说明偏差值变化的趋势,DK绝对值越大,表示离目标值越来越远;DK=0,表示偏差一直保持某个稳定值,但不表示偏差值为零,用DOUT=KP*DK来表示,参数DOUT只考察偏差变化的趋势。 通过以上分析可知,比例控制只根据当前误差EK来决定输出控制信号,只要当前有偏差就开始控制,无偏差就不控制,且偏差越大,输出信号也越大;其缺点是只考虑当前情况,不考虑历史情况。积分控制只根据历史偏差SK来决定输出控制信号,只要历史情况不达标,就输出大量控制信号,如果历史情况达标就不输出控制信号。其缺点是只考虑历史情况而不考虑当前情况。微分控制考虑的是变化趋势DK,只要DK不等于零就输出控制信号。其缺点是不能对偏差进行控制,因为一旦DK=0,即使偏差不等于零,也不会输出控制信号。 3.2.2 PID算法公式与单片机程序实现 通过以上分析,得到公式(1): QOUT=POUT+IOUT+DOUT =KP(EK+SK+DK) (1) 式中:QOUT—— 当前控制器的总输出量; POUT—— 控制器的比例调节输出量; IOUT—— 控制器的积分调节输出量; DOUT—— 控制器的微分调节输出量; Kp—— 比例系数; EK—— 当前偏差值; SK—— 历史偏差值之和; DK—— 控制器的微分调节输出量。 此公式只是理论雏型,要转换成数学模型还应对SK和DK进行转换。在单片机实际应用当中,常用到公式(2): (2) 相比式(1),式(2)中多了参数T、Ti、Td(T为采样周期,Ti为积分时间,Td为微分时间)。将式(2)带入式(1)得: (3) 将式(3)简化如下: Kd*(EK-E(K-1)) (4) 这是PID算法的位置式公式。增量式公式[10]则是: QOUT K-QOUT (K-1)=KP(EK-E(K-1))+ Ki*EK+Kd(EK-2E(K-1)+E(K-2)) (5) 通过公式(5),可以编写出单片机的PID控制算法。先获取每次物体坐标(当前值PV),然后与中心坐标(设定值SV)做差进行PID算法控制,输出机械手的移动偏移量进行坐标补偿(见图6),从而实现物体跟踪的目的。 图6 PID算法坐标补偿实现 本系统的App是在APICloud平台的APICloundStudio开发环境下,采用Html、Css及JavaScript语言进行编写。开发界面友好,各类控件齐全。API Cloud平台提供众多丰富模块的API接口,已经成为 App开发的首选。在API Clound Studio软件中,通过机智云服务器提供的SDK包与服务器建立联系,获取或上传数据到服务器,使得App能够间接控制硬件设备。 在系统软硬件调试完成后,进行图像采集测试[11]。系统摄像头所采集的图像能够在液晶屏上清楚地显示出来,通过按键也可以准确切换显示效果。打开手机App,可以在App上可以进行机械手的远程操作(见图7、图8)。传感器值能够以形象的曲线图进行展示,通过模式切换,机械手也能够进行相应的跟踪和抓取。 图7 App控制界面 图8 数据曲线图 系统下位机的数据能够准确地上传到云端服务器,利用手机App可以进行设备相关信息以及状态的查询,并且该系统能够准确地获取图像并予以实时显示,能够实现物体跟踪、物体抓取及低压报警等功能。3.3 应用层 App 软件设计
4 系统测试