姜阔胜,杨涵坤
(1.安徽理工大学 机械工程学院,安徽 淮南 232001;2.深部煤矿采动响应与灾害防控国家重点实验室,安徽 淮南 232001)
产品质量检测是制造业中重要的环节,人工检测存在精度低、质量一致性差、效率低、成本高、智能化水平低等问题,而机器视觉检测则可以解决这些问题[1]。曹旭明等[2]介绍了一种使用Blob分析图像处理、亚像素拟合轮廓边缘等方法对螺栓类零件各几何参数进行实时测量的系统,提高了在线测量和分拣的效率。袁纵青等[3]设计了一套机器视觉汽车零部件的冲孔和字符的检测系统。使用阈值分割、像素点面积特征、圆度特征和深度学习的方法实现了良好检测效果。
然而上述系统还存在问题,传统单一化的生产方式已经难以满足个性化定制需求[4],不同形状尺寸零件的视觉检测方案是不同的,一旦检测的零件和缺陷种类发生变化,就需要重新设计检测方案,测控系统柔性化不足。
为解决上述问题,把柔性视觉检测[5]概念引入视觉测控系统是一个不错的思路。柔性化应用技术对解决视觉检测设备检测零件和缺陷种类单一、相机利用率低及检测效率低的问题有现实意义。柔性视觉测控系统是在传统的视觉检测设备基础上增加柔性控制器、柔性检测装置、柔性信息处理装置和柔性检测功能模块,从而使系统具备自协调、自适应的能力。本文根据柔性化需求,设计研发了一种智能高速云盘机柔性视觉检测系统。在此系统中,主要通过相机采集系统的柔性、控制器程序的柔性、检测软件的柔性来达到柔性检测的目的。系统软件采用C++编程语言结合Qt框架编写,并使用OpenCV计算机视觉算法库编写了10个视觉检测功能,硬件配置兼备开放性和柔性,预期实现采集、检测、控制一体综合柔性化。
一个典型的柔性测控系统分为硬件柔性和软件柔性。在硬件上,可以根据被测零件种类的不同、被测缺陷的不同、被测区域位于零件部位的不同增减,改变相机数量和安装角度位置;在软件上,检测软件作为柔性系统的核心,可以在检测前为每个相机选择组合一个或多个视觉检测功能,以达到柔性检测的目的。
以圆垫片和六角螺母为例。需检测圆垫片的外圆半径、内外圈圆心度和表面质量是否合格时,可在系统中安装背光源和环形光源各一台相机,相机镜头垂直于垫片表面,背光源用于检测圆半径,环形光源相机用于检测表面质量,在软件中可以设置两个相机分组,在环形光源相机分组下选择用于检测表面质量的检测功能,在背光源相机分组下选择用于检测圆半径和圆心度的功能。需检测六角螺母的高度时,可在系统中安装背光源一台相机,相机镜头正对螺母侧面与其表面平行,在软件中可以选择一个相机分组,在背光源相机分组下选择用于检测距离尺寸的功能。
除此之外,系统自动运行时应能准确地对零件进行质量判定和下料,相机能够准确抓拍零件,软件可以设置系统运行参数以及显示统计检测结果,以获得良好的检测效果。
由于检测的零件和缺陷种类的不确定性,根据柔性测控系统性能需求,制定了如下柔性测控方案:系统在检测前从上位机软件获得用户自定义的视觉检测方案和上、下位机参数,检测时相机将采集到的图像传输到软件中按照设定好的检测方案进行图像分析、识别、判断,软件再将检测结果发送给下位机剔除不合格品,系统方案如图1所示。
图1 测控系统方案
检测流程如下:根据检测零件和缺陷确定需要的相机个数和光源类型并以合适的角度位置安装,取一被测零件的合格件置于运料装置上并使之处于会使用到的一台相机镜头下方并拍照,在软件中选择对应相机分组,每一个相机在软件中都有一个对应的分组,分组是相机在软件中的数据映射,不同分组间数据相互独立,可在该分组中依据此相机的检测环境和拍摄的零件图像规划检测过程,包括选择一个或多个缺陷检测功能(一种缺陷使用一个检测功能检测),设定图像处理阈值参数,给定缺陷判定标准值,完成后把合格件依次置于其余要使用到的相机镜头下方,重复上述步骤,依次完成相应相机分组的检测流程规划设置。接着将一个零件置于运料装置上使之出现在每个相机画面正中,完成相机在运料装置上的位置标定,以便于自动运行时零件经过相机图像采集区域时相机可以准确拍照。自动运行检测开始后,零件在转盘转动下依次经过每台相机,每台相机在每个零件转动到镜头下方时,控制器触发相机拍照,每台相机的图像数据传输到上位机软件中对应的相机分组中,软件根据每个分组中设置好的检测流程方案对零件进行检测和质量判定并储存判定结果,在同一分组中,若有一项缺陷检测项目检测不合格,则判定该零件在该相机分组下的检测结果为不合格。当一个零件随着运料装置经过最后一个相机完成检测后,软件对所有分组下的这一个零件的检测结果进行逻辑与运算,有一台相机分组下的检测方案检测不合格,则判定这个零件为不合格品,检测结果再由软件传输给下位机控制器,控制器控制合格与不合格件下料口的开合实现合格品和不合格品的分离下料,在软件界面实时显示检测零件总数、合格数、合格率、检测速度等参数,并可查看检测零件实时缺陷参数和被测不合格零件历史图像。系统检测流程如图2所示。
图2 系统检测流程
如图3所示,系统分为4个部分:图像采集,图像处理,控制器,上料、下料、运料系统。图像处理由工控机完成,图像采集由工业相机、光源、光源控制器、支持架和数字光纤传感器组成,上料、下料和运料系统由伺服电机、伺服控制器、玻璃云盘、下料吹气口、气泵和振动上料盘组成。被测零件置于云盘上随之转动,振动上料盘、光纤传感器、相机、光源、下料吹气口逆时针依次分布在云盘四周。控制器为PLC。
图3 测控系统三维图
根据测控系统方案,开放性的图像采集系统是刚需。系统由两组CCD工业相机(一组安装环形光源,一组安装背光源)、数字光纤传感器、支持架组成。相机和光源安装在具有齿轮齿条机构的支持架上,安装方向可调节,可上下前后运动,满足不同零件不同位置所需视场大小的调节[6]。系统支持最多8组相机和光源,可根据检测方案更换、增减相机和光源。相机依次排布于转盘边,以便于先后抓拍零件,每台相机采集的图片可以完成检测环境相同的多种缺陷的检测,达到一机多用、一图多用的效果。
视觉测控系统要求成像品质、采样频率和传输速率较高,因此选用acA1300-60gm面阵工业相机,分辨率1280 px×1024 px,帧速率60 fps,触发线与PLC连接,同时采用GigE与工控机相连。数字光纤传感器型号为基恩士FS-N18N,安装在玻璃云盘上方,与PLC相连。传感器检测到零件后,待零件到达拍摄区域,PLC输出高电平触发相机拍照,相机驱动程序将图片传输至上位机软件。
(1)上料系统:使用一台振动上料盘(型号为LWCL-140)进行上料,上料口置于玻璃转盘的上方。
(2)运料系统:由玻璃转盘、伺服电机、伺服驱动器、减速器组成,驱动器型号为松下MBDLN25SG,减速器传动比为10,自动运行时转盘为逆时针旋转。这样的设计有利于不同零件的运输、光源打光和图像检测。
(3)下料系统:下料系统由两个吹气口和气泵组成,转盘逆时针转过的第一个下料口为合格品下料口,第二个为不合格品下料口。完成图像检测后,PLC根据接收的判定结果,待零件到达相应的吹气口时,对相应的吹气口进行吹气控制。
PLC型号为三菱F5U,与工控机通讯使用RS232串口通讯,波特率9600 bps。由于相机、光纤传感器、下料口都分布在转盘四周,需要利用伺服电机的脉冲值对其进行定位,云盘机转动一周为10万脉冲,光纤传感器处为原点,每1个脉冲对应0.003 6°,在PLC中为每个硬件分配一个寄存器存储其在转盘四周相对于原点的角度对应的脉冲值,便可以在检测时精确地判断硬件的位置,当零件通过原点后转过相应的脉冲值后到达该角度位置时,PLC可以采取相应的控制动作对零件进行拍照或者下料。
为了满足柔性化多相机使用需求,PLC程序支持控制8个相机,分配输出口Y010—Y017分别触发相机1—8,分配D744—D730中地址为双数的寄存器分别存储相机1—8的定位脉冲值。检测时,C235计时器不断记录转盘转过的脉冲值,当零件依次达到光纤传感器位置并被传感器检测到时,PLC依次为每个零件分配一个32位寄存器用于存储此时C235中的脉冲值,并将此值记为此零件的原点,用零件原点分别加上D744—D730中8个相机的定位脉冲值并依次不断与C235中变化脉冲值进行数值匹配,若有一个相机的定位脉冲值与零件原点之和与C235中的变化脉冲值相等,则使此相机对应的Y输出口置1,触发该相机拍照。
图像处理是视觉检测系统的核心,包括图像预处理和零件缺陷检测两部分[7]。视觉柔性检测的对象和目的千差万别,即使是同一检测对象也有不同的检测位置和视角,所以检测方案和项目也不同。对常见零件缺陷进行归纳整理,在缺陷检测工艺分析基础上,软件结合OpenCV算法库,采用算法组合的方法,通过调用、重构和自行编写图像处理算法的方式,编写封装了预处理、面积测量、圆半径、圆心距、线线角度、线线距离、点点距离、弯曲程度和模板匹配等9个视觉检测项目可供视觉柔性化检测,如图4所示。
图4 视觉检测功能项目
3.1.1 图像预处理
预处理功能完成对零件图像的灰度化、滤波、二值化、形态学处理,便于后续处理,是视觉检测时9个检测功能中的必选项。
(1)利用cvtColor算子对图像进行灰度化处理,将彩色图片RGB类型转化为灰度图颜色制式。
(2)利用高斯滤波方法[8],消除相机采集到的零件图像中的噪声,处理后的图像为Mi:
(1)
其中Ni表示初始零件图像,I表示去噪因子,H表示高斯滤波器,σ表示滤波处理平均方差。
(3)对去噪后的图片进行二值化,设定阈值,将图像中像素值高于此阈值的像素点的值置为255,即
(2)
其中(x,y)为像素坐标,src为原图,dst为处理后图像,thresh为阈值。
(4)对二值化图像进行形态学开运算处理,先腐蚀再膨胀,能够消除图像中物体外部小型团块噪音,公式为
dst=dilate(erode(src,element),element),
(3)
其中erode为腐蚀处理,dilate为膨胀处理,src为原图,dst为处理后图像,element为内核。
3.1.2 零件缺陷检测
软件归纳总结了7种常见的零件缺陷:表面质量不合格、圆形零件轮廓半径尺寸不合格、同心度不合格、边缘夹角不合格、长度尺寸不合格、边缘弯曲度不合格、轮廓度不合格。针对以上7种缺陷,软件分别采取以下检测工艺和图像处理检测算法:
(1)表面质量检测功能为面积测量,如图5(a)中的垫片表面质量,零件表面质量主要指其表面是否有大面积凹坑蚀点缺陷,凹坑在环形光源相机镜头中颜色会比表面平整部分深,所以检测表面质量的方法是利用色差提取零件边缘轮廓和内部缺陷轮廓,分别计算边缘轮廓和每个缺陷部分轮廓的像素点数量,再通过做减法得出零件轮廓内部平整部分的像素点个数,即
图5 零件缺陷检测工艺
S=S1-S2,
(4)
其中S1为边缘轮廓内像素点之和,S2为内部所有缺陷轮廓内像素点之和,S为平整区域像素点之和,若S在合理区间内,则其表面质量合格。
(2)半径尺寸检测功能为圆半径,如图5(b)中的垫片内、外圆半径r和R。圆形零件的圆半径尺寸可以通过Canny、HoughCircles霍夫圆算子拟合出零件边缘圆的方法得到,其值是两点之间连线上像素点的个数,若其在合理区间内则零件合格。
(3)同心度检测功能为圆心距,圆心度是指以圆形零件外轮廓为基准,其内轮廓圆心与外轮廓圆心之间的位置距离,如图5(b)中的垫片内外圆圆心位置,同心度同样可以通过霍夫圆算子分别拟合出两个边缘圆后,通过两圆心坐标计算圆心之间的距离,计算公式为
(5)
其中(a1,b1)、(a2,b2)是两圆心坐标,l是两圆圆心距离,其值是两点之间连线上像素点的个数,若其在合理区间内则零件合格。
(4)边缘夹角检测功能为线线角度,如图5(c)中的螺母的两边夹角θ,角度尺寸可以通过HoughLinesP累计概率霍夫直线算子分别拟合出零件两条边缘线段得到线段的两个端点坐标,通过公式
(6)
计算夹角,其中(x1,y1)、(x2,y2)分别为一条轮廓线段的两个端点坐标,(x3,y3)、(x4,y4)分别为另一条轮廓线段的两个端点坐标,α是两线夹角,若其在合理区间内则零件合格。
(5)零件长度尺寸检测功能为线线距离和点点距离。如图5(c)(d)中的螺母对边宽度和高度L,线线距离可以通过霍夫直线算子分别拟合出零件两条平行边缘线段后,通过公式
(7)
计算距离,其中L是两平行线的距离,其值为像素点个数,若其在合理区间内则零件合格。
对于如图5(e)中的橡胶件的宽度L,因其两边为曲线,无法通过线线距离测量,故点点距离是使用两条平行测量直线从外侧逼近零件轮廓,当两直线都与外轮廓相切时,测量两切点之间的距离,即两直线间距离。为了达到测量零件某一方向上外轮廓长度尺寸的目的,在测量前应给定两条测量直线一个斜率,通过Canny算子检测出零件轮廓后,使图片中封闭轮廓像素点值都为255,其余部分都为0。将两条直线从图像外侧向中心平行移动,步长为1像素,每步长遍历一次直线上的像素点,若其中一条直线上出现值为255的像素点,则该直线停止平移,待另一条上也出现后,此时两直线间距离L即零件轮廓长度尺寸可通过公式(7)计算,L为像素点个数,若在合理区间内则零件合格。
(6)边缘弯曲度检测功能为弯曲程度,如图5(f)中的钣金件内轮廓曲边半径无法使用圆半径功能测量,故通过弯曲度来检测,弯曲程度为弯曲曲线的弦高与弯曲曲线的长度之比,可通过先对被测零件进行轮廓提取,再对提取的轮廓进行最小二乘法曲线拟合的方法,得到曲线长度、弦长和弦高,通过公式
C=H/L
(8)
计算出其弯曲度,其中H为曲线弦高,L为曲线长度,C为曲线弯曲度,若在合理区间内则零件合格。
(7)针对零件轮廓度的检测功能为模板匹配,零件轮廓度是指零件轮廓的变形,使用matchShapes算子通过CAD绘制的如图6所示的标准零件形状板匹配零件的形状[9-10],得出形状系数k,系数越小,零件和模板之间的相似度越高,若在合理区间内则零件合格。
图6 标准六角螺母CAD图 图7 软件功能界面
本软件采用Visual Studio 2017与C++作为开发环境,采用Qt框架面向对象的设计方式对人机界面进行开发设计[11],集成OpenCV2计算机视觉算法库、Pylon库(Basler相机的API库)和三菱PLC通讯控件MX Component,其功能界面如图7示。
其中,检测流程方案规划和自动运行检测功能为软件核心,3.1节中介绍的9个检测项目在软件中以函数形式封装好可供流程规划功能和自动检测运行功能调用。检测流程规划设置了两个相机分组,检测前根据检测零件和缺陷安装相机和光源。如图8(a)所示,在主界面点击需要的相机序号选择分组,同时对合格零件进行抓拍,进入流程规划界面为相应的相机分组进行检测流程规划。如图8(b)所示,界面有检测项目勾选框可勾选检测功能,调节每个检测功能下图像处理阈值参数,使用选择的每个检测项目对被测零件的良品进行检测并获取检测结果数值,以此为依据设置一个标准值及上下偏差作为自动运行检测时的判定标准。制定好的检测方案数据通过JSON数据交互格式分组保存本地。检测时,自动运行检测功能读取不同分组的JSON本地数据获取检测方案,根据接收到的每幅图像的拍摄相机,按对应分组方案调用检测项目对零件图像进行检测。不同分组和同组下不同检测项目数据相互独立,仅在组间传递每组的检测结果,组内传递每个检测项目的检测结果,由此在分组下形成一个完整的图像处理检测方案链[12],实现对分组下单个检测项目检测结果的逻辑与运算和每组检测结果的逻辑与运算,以完成对一个零件的质量判定。如图8(c)所示,自动运行检测界面在检测时可以实时显示检测总数、合格数、合格率、检测速度等检测参数。
图8 软件界面
JSON本地数据交互模块不仅保存了检测流程方案数据,还保存了下位机参数,做到软件数据的掉电不失,方便软件重启后直接运行上次已设置好的检测流程方案。
检测软件运行流程如图9所示。
图9 软件运行流程
实验分为两组,分别对两种不同种类的零件及其缺陷进行质量检测,以检验此系统的柔性化程度和可靠性。
如图10所示,第一组实验对250个内径、外径分别为2 mm和12 mm的圆垫片进行检测,其中100个表面质量不合格,50个外圈尺寸不合格,50个内外圈同心度不合格,使用背光源相机检测垫片表面缺陷,环形光源相机检测垫片的外圈半径和内外圈圆心距,检测项目为预处理、零件定位、面积测量、圆半径、圆心距。
图10 垫片检测实验
如图11所示,第二组实验对250个M5螺母进行测试,其中有100个两边夹角不合格,50个对边距离不合格,使用环形光源相机检测,检测项目为预处理、零件定位、线线角度、线线距离。
图11 螺母检测实验
圆垫片的检测结果数据如表1所示,螺母的检测结果数据如表2所示,由于被测零件数量过多,所以只列出两组实验各5个零件的检测结果参数,两组实验最终检测结果如表3所示。
由表1和表2的数据可以看出,在两个实验中,系统在有多个检测项目的情况下,根据设定的尺寸要求和测量结果对零件进行了准确的逻辑判定,运行稳定。由表3可以看出,在检测速度为较为适中的每秒2个的情况下,垫片实验中出现误判的零件个数为2个,螺母实验中这一数据为1个,两个实验的准确率分别达到了96%和99%,检测误差很小。实验表明,本系统取得了良好的检测效果,上料口和下料口均可以精确上料和下料,相机可以精准抓拍零件图像,检测效率和准确度达到使用需求,可以完成对不同零件不同缺陷的柔性化视觉检测。
表1 部分圆垫片检测结果
表2 部分螺母检测结果
表3 实验结果
该柔性测控系统软件使用成熟框架和算法开发,硬件使用成熟的控制器和执行元器件,节约了研发成本,提高了系统的可靠性。通过实验验证得到以下结论:
(1)高速云盘机柔性视觉检测系统精度和柔性化程度较高,性能较强,在零件质量检测领域会发挥巨大的作用。
(2)视觉检测软件人机交互界面友好、操作简单、检测精度和效率高、数据处理自动化程度高、实时性强,可以实现柔性视觉检测。
(3)OpenCV图像处理算法库高度开放,基于此开发的检测算法兼容性强,后期升级空间大,成本低,优势明显,可以满足各类零件的多种检测需求。