房国栋,高军伟,朱晨曦,孔德帅
(青岛大学自动化学院,山东青岛 266071)
机械臂分拣技术被运用到各种工厂作业中。传统的机械臂操作通过精准的示教作业,能完成复杂的点到点的运动[1],显著提高了分拣效率,但是此方式要求抓取目标的位置相对固定,当目标位置出现偏差时,则会导致机械臂抓取目标失败。为了实现机械臂可以自动获取到其工作范围内任意位置的目标并能调整末端执行器的位置,避免因位置出现偏差而导致抓取失败的问题,需要引进一种基于机器视觉的目标识别和定位方法。这样,系统便可以通过摄像头自动获取目标图片并通过算法分析获得所需要的目标信息。系统以三自由度机械臂为例,以分拣4种形状不同的工件作为分拣任务,研究了基于机器视觉技术的目标识别、形心坐标提取及定位等技术,结合三自由度机械臂的运动学模型分析,给出了分拣系统的实现方法。
基于机器视觉的机械臂智能分拣系统主要包括工件识别和机械臂分拣控制。部分工件识别部分的主要过程为摄像头采集图像信息发送至MATLAB,通过识别算法识别出工件类型并提取位置坐标;机械臂分拣控制部分通过机械臂逆运算根据提取到的工件位置坐标解得3个连杆的关节转角,将其转换为机械臂的步进值,并通过串口通信的方式将步进值发送给Arduino单片机,然后由Arduino控制机械臂的活动,实现工件取放操作,完成分拣任务。图1为系统流程框图。
图1 分拣系统框图
识别图像中的多个目标和坐标提取是系统对图像进行预处理的目的。摄像头采集到的图像由MATLAB进行灰度、二值化处理,仍然存在很多细小的噪声点。为了能够更好地提取目标特征,需要通过腐蚀填充等形态学滤波[2]操作对二值化处理之后的图像进行再处理,以降低图像上的细小噪声点,得到形态学滤波之后的二值图像,最后对图像中的目标物体进行分析。但是,目标的具体分析和识别与图像的灰度、二值化等操作有一定的区别,后者可以将图片作为一个整体进行处理,而前者则需要把图像上出现的所有对象划分为单个个体进行分析。所以,在形态学滤波后的二值图像上,需要将每个目标划分为一个独立的连通区域,并把这些连通区域进行标记,在此基础上才能完成图像中目标个数的检测、目标类型以及各个目标坐标等参数的提取[3]。
系统采用文献[4]中所介绍的四邻域标记算法来计算出图像上所有的连通区域,按照从上到下、从左到右的顺序[5]对连通区域标以连续的自然数标记并创建最小外接矩形[6],为后面工件类型的识别和形心坐标的提取做准备。图2为连通区域标记后的图像。
图2 连通区域标记后图像
2.2.1 图像剪切
工件在工作台上出现的位置是任意的,需要将之前标记好连通区域的图像根据每个目标的最小外接矩形剪切成N(工件的个数)个小图片,然后分别分析每张图片中的内容。
2.2.2 工件类型识别算法
针对工件在放置时存在的旋转变化,本系统采用对数极坐标变换-傅里叶变换(log-polar transformation,LPT-fourier transformation)的模板匹配[7]算法来识别工件的类型。被识别的图像在经过对数极坐标变换后,可将图像的旋转变化转换为平移变化,再结合Fourier平移变换的模值不变性,实现图像的旋转不变性。
2.2.2.1 对数极坐标变换
图像的对数极坐标变换是将笛卡尔坐标系转换为对数坐标系[8],其对应的转换公式为
(1)
式中:(x,y)和(u,v)分别为变换前后的图像的坐标;(x0,y0)为坐标变换中心;k、m是为了放大变换后的图像而引入的放大参数。
笛卡尔-对数极坐标坐标系的对应关系如图3所示。
图3 笛卡尔-对数极坐标坐标系
根据式(1),当原图像转动φ弧度时,得:
v′=m·(θ+φ)=v+mφ
(2)
此时,v′表示转动后的图像在对数极坐标中的横坐标。由此可见,笛卡尔坐标系下的旋转变化可转化为对数极坐标系下的平移变化。图4为同一种工件在不同摆放角度下的平移变换。
图4 对数极坐标下的平移变换
2.2.2.2 离散傅里叶变换
在时域空间内,傅里叶变换的模值具有平移不变性。在图像处理时,图像给出的信号是二维离散型的,所以采用二维离散傅里叶变换[9]。假设尺寸为M×N的图像的函数f(x,y)对应的二维离散傅里叶变换F(u,v)为
(3)
图像平移之后,f(x-x0,y-y0)的变换为
F′(u,v)=F(u,v)·e-j2π(ux0+vy0)
(4)
得到平移前后的模值:
|fft2[f(x,y)]|=|fft2[(x-x0,y-y0)]|
(5)
从式(1)~式(5)可以看出图像的旋转不变性。
由于本系统所选取的4种工件都是对称工件,且工件表面不存在其他任何图案,所以,除了圆形工件只取0°状态图以外,其他3种工件各选取0°、15°、30°、45°、60°、75°、90°等7种不同旋转状态的图片,组成含有22张图片的模板库。
综上,本系统工件类型的识别部分可分为以下过程:
(1)创建模板库。
(2)将整张图像先进行灰度、二值化等操作,然后将每一个独立的工件标记连通区域并剪切成相应的几个小图像。
(3)将待识别的图像和模板库里的图像作对数极坐标变换并得到相关系数,与之匹配相关系数最大的一类工件。把三角形、五边形、圆形和正方形的识别结果分别用数字1~4表示。
(4)下次识别重复步骤(2)~(3)。
2.3.1 形心坐标的提取
在完成工件的识别之后,需要对图像中的目标进行定位。首先求取工件在图像上的形心坐标,在二值图像中,目标区域为白色,用1表示,非目标区域为黑色,用0表示,如式(6)所示,式(7)为目标图像的形心求取公式[10]。
(6)
(7)
式中:x0,y0为目标工件的形心坐标;f(x,y)为点(x,y)在二值图像上的像素值;xf(x,y),yf(x,y)分别为点(x,y)在二值图像中x和y坐标的像素值。
根据式(6)、式(7)可求出二值图像中每个连通区域的形心坐标,即目标物体在成像坐标系中的像素坐标。图5为求取到的工件的像素坐标点。
图5 工件的像素位置坐标点
2.3.2 坐标转换
求取到的形心坐标并不能直接作为工件的定位坐标,需要将其从像素坐标系转换到机械臂基坐标系下的表示。如图6所示,{O0}为像素坐标系,{O1}为物理坐标系,{B}为基坐标系。
图6 坐标系
(u0,v0)=(640,512)为整幅图像的中心点。用x1、y1表示工件在{O1}下的实际物理位置,dx1、dy1分别表示坐标轴x1和y1方向上的单位像素长度,便可得到每个像素在{O0}和{O1}坐标系下存在的关系:
(8)
即得到每个像素点在{O1}下的表示:
(9)
根据式(9)可得到工件在图像上的实际物理位置,但要作为机械臂末端最终用来抓取的定位坐标,还需要将其转换成基坐标系{B}下的表示。对本系统的三自由度机械臂而言,末端执行器只需要描述其位置,通过式(10)可使基坐标系{B}与{O1}具有相同的方位,使得两坐标系之间只存在平移关系。
(10)
设位置矢量p0=[x0y0z0]T为{O1}相对于{B}的位置,p={xyz}T为{O1}中的一点,则点p相对于坐标系{B}的位置pB=[pxpypz]T可由矢量相加得到,即:
pB=p+p0
(11)
将根据式(6)、式(7)求取到的每个工件的像素坐标的代入式(9)~式(11),便可得到工件在基坐标下的最终定位坐标,将其横纵坐标值分别放入px,py向量中,因为机械臂在抓取过程中,需要确定目标物体在三维空间下的坐标[11],所以需设一组向量pz,表示工件在三维空间下的高度。
三自由度机械臂结构如图7所示,腰部为水平面上的旋转运动,大臂跟小臂为垂直于底座水平旋转平面的俯仰运动,小臂末端安装一个电磁铁,通过控制电磁铁的得失电实现对工件的抓取和放置操作,图8为系统搭建图。
图7 机械臂结构图
要想使机械臂末端准确地运动到工件正上方,需要控制好每个机械臂关节转动的角度。为此,系统需要通过已解算得到的定位坐标代入机械臂逆运算,求取每个机械连杆的转动角度。对本系统的机械臂建立如图9所示的连杆坐标系,然后根据表1所示的连杆参数采用标准的D-H法[12]建立三自由度机械臂的运动学模型。
图9 机械臂连杆坐标系
先根据表1和式(12)所示的相邻两连杆坐标系间的变换法则求取机械臂正解,可到机械臂末端与基坐标系{B}之间的变换矩阵,见式(13)。
表1 各关节D-H参数表
(12)
(13)
式中:nx、ny、nz、ox、oy,oz、ax、ay、az分别为机械臂末端坐标系x、y、z轴在B坐标系中的方向矢量;px、py、pz分别为机械臂末端位置在基坐标系中的坐标。
(14)
令方程两边元素(1,4) 、(2,4)、 (3,4)分别对应相等,得:
(15)
解得:
(16)
其中,si=sinθi,ci=cosθi,A=pxc1+pys1-a1,B=(a32-a22-A2-C2)/(2a2),C=-(-pz+d1)。
此时,只需要知道机械臂末端即将运行到目标位置的情况[14],即知道工件的定位坐标px、py和pz,便可得到每个机械连杆的转动角度。
本系统机械臂的核心控制器部分采用便捷灵活的Arduino控制板及Arduino IDE编程环境,机械臂使用三自由度机械臂,控制机械臂转动的步进电机使用具有过电流保护的A4988驱动模块来控制,可在全步、1/2、1/4、1/8和1/16等5种步进模式下操作。为了保证机械臂的高精度,本系统选用1/16步进模式,搭配电机自身10∶1的减速比,步进电机转动一圈需要32 000个步进脉冲,即每个脉冲驱动电机转动0.011 25°。此时只需将逆解部分解出的转动角度根据公式steps=θ/0.011 25便可得到每个机械臂转动的步进值。然后将步进值以串口通信方式[15]发送给下位单片机,下位单片机得到上位机的控制命令后,通过控制每个机械臂的步进电机来实现机械臂的运动。
最后对系统进行整体测试。其中,8个目标工件的实验测试数据如表2所示,图10为放置在机械臂和摄像头工作空间下随机的几个工件,末端执行器抓取其中一个正方形工件到放置区域的过程。
图10 单个工件取放过程
从图10和表2中可以看出,设计搭建的基于机器视觉的机械臂智能分拣系统,对任意放置在机械臂工
表2 机械臂控制实验数据
作空间下的工件,能够较好地实现工件识别和定位功能,改善了因工件位置发生变化而不能准确抓取的情况。