远 飞 黄 山 吴方芳
(1.无锡商业职业技术学院 江苏 无锡:214153;2.苏州德创测控科技有限公司 江苏 苏州:215000)
中国汽车行业的快速发展为汽车电子技术提供了巨大的发展空间,汽车连接器产业因此得到快速发展。随着汽车连接器产业的兴起,对于汽车连接器尺寸的要求愈发严苛,对于已经注塑成型的汽车连接器,引脚的位置是否准确成为判断该产品是否符合生产要求的重要指标之一[1]。汽车连接器的引脚相对连接器上圆孔的位置必须在50μm误差范围内,才能顺利装配。人工检测效率在一个固定区间,无法大幅提升,在流水线重复且机械化的检测过程中,检测人员很容易出现疲劳而导致检测效率降低;而机器视觉检测能够更快的检测产品,特别是在生产线检测高速运动的物体时,机器能够提高检测效率,速度甚至能够达到人工10-20倍[2]。本文使用康耐视的VisionPro软件,通过C#脚本程序,研究了一种汽车连接器引脚位置的机器视觉检测方法。
汽车连接器引脚位置的机器视觉检测系统由光源、镜头、相机、计算机及执行单元组成,如图1所示。该系统的功能是先检测汽车连接器的引脚的位置坐标,再根据坐标值判断与相连的部件是否匹配,并发出指令给执行单元。
图1 机器视觉系统框图
视觉软件使用康耐视的VisionPro,VisionPro是基于 PC 架构的视觉系统软件开发包,主要应用于复杂的机器视觉领域[3]。
通过相机获得一组汽车连接器的图片,作为VisionPro的ImageSource。VisionPro的PMAlign是一个基于图像轮廓或边缘特征的图案位置搜索定位工具,支持图像中特征的旋转与缩放。
PMAlign工具经过抓取图像、设置训练区域及参数、训练模板、设置运行参数与搜索区域、运行等操作,就可以查看结果了。通过这个工具,可以迅速地在图片中搜索到连接器,并得到连接器训练区域中心在图片坐标系中的坐标和旋转角度,如图2所示。
图2 搜索定位与建立工件坐标系
图片坐标系的原点在图片的左上角,如图2所示。工件在图片中的位置并不固定,并且可能发生一定角度的旋转,如果以图片坐标系为参考,小孔或引脚的位置不固定,也就无法判断有无。所以,为了判断工件上某个位置是否有小孔或引脚等,需要相对工件固定不变的坐标系即工件坐标系。建立工件坐标系由Fixture工具实现,工件坐标系的原点在图片坐标系中的坐标XY和工件坐标系的旋转角度由PMAlign工具的运行结果提供,如图2所示。PMAlign通过函数GetPose()将获得的坐标系参数链接到Fixture的UnfixturedFromFixturedTransform中作为输入参数,如图3所示。
图3 PMAlign传递参数给Fixture
若是连接器要与其他配件装配到一起,涉及到穿孔和插接,如果连接器上的引脚相对其右上角的圆孔的位置有偏差,会影响装配。所以连接器上的引脚位置坐标不以工件坐标系为参考,而是以其右上角圆孔中心为原点的坐标系为参考,此坐标系即为连接器坐标系。
工具FindCircle找到连接器右上角的圆孔,并得到圆心在工件坐标系中的坐标。工具FindLine找到连接器的上边线,得到上边线起点、终点和中点在工件坐标系中的坐标和上边线相对X轴的旋转角度。工具CreateLinePerpendicular过圆心作垂直于上边线的直线。工具CreateLine过圆心作平行于上边线的直线。工具之间的链接关系见图4。
图4 建立连接器坐标系
通过5个Blob工具分别找到5个引脚的位置,得到引脚相对工件坐标系的坐标,如图5所示。
图5 Blob工具找引脚
假设过圆心平行于连接器上边线的直线1作为X轴,向左为正方向;过圆心垂直于上边线的直线2作为Y轴,向下为正方向。则引脚的横坐标为引脚到直线2的距离,引脚的纵坐标为引脚到直线1的距离。每个引脚的坐标需要测量两个点到线的距离,使用DistancePointLine工具,如图6所示。
图6 DistancePointLine工具测距离
通过以上的VisionPro程序设计,可以查看每个DistancePointLine工具的输出距离,从而得到每个引脚的坐标值。但是这样查看坐标不直观不便捷,可以添加C#脚本程序,把每个引脚的坐标显示在图片上引脚的旁边,并判断引脚与圆孔中心的距离是否在要求的公差范围内,在公差范围内的,显示“OK”;不满足公差要求的,显示“NG”。
在QuickBuild应用程序中有三个地方可以添加C#脚本程序,分别是ToolGroup、Job 和CogToolBlock。本文的C#脚本在CogToolBlock中,CogToolBlock脚本选择C# Advanced。利用CogToolBlock工具,可以根据功能来组织视觉工具,创建可以反复利用的模块,为复杂的视觉逻辑任务提供简单的接口。在脚本编辑器中有一个脚本类CogToolBlockAdvancedScript,它继承于工具块脚本基类CogToolBlockAdvancedScriptBase。这个类里面有四个方法,工具块运行时执行方法GroupRun,工具块创建图像时执行方法ModifyCurrentRunRecord,工具块创建最后运行图像时执行方法ModifyLastRunRecord,脚本初始化执行方法Initialize[4]。本文需要在最后运行结果中显示坐标和判断结果,脚本需要在类CogToolBlockAdvancedScript中开始部分定义变量;在工具运行时方法GroupRun中进行变量赋值,确定引脚坐标,判断合格与否;在最后运行结果方法ModifyLastRunRecord中显示。程序流程图如图7所示,
图7 脚本程序流程图
在脚本程序一开始,类CogToolBlockAdvancedScript的前面,是一段引用命名空间的程序:
using System.Drawing;
using Cognex.VisionPro;
using Cognex.VisionPro.ToolBlock;
using Cognex.VisionPro.PMAlign;
using Cognex.VisionPro.CalibFix;
using Cognex.VisionPro.Caliper;
using Cognex.VisionPro.Dimensioning;
using Cognex.VisionPro.Blob;
脚本中调用的方法属于不同的命名空间,需要先using引用命名空间,再调用。以上引用的命名空间对应程序中使用的工具和C#脚本中使用的类。对于各种工具需要引用的命名空间,网上可以找到 VisionPro工具与命名空间对照表。对于脚本程序中使用的类,在Visual Sdudio环境下鼠标点到类的名称,左下角出现一个标记,点击添加命名空间,或者alt+shift+f10添加命名空间。如果工具或者类没有using对应的命名空间,脚本程序会报错。
通过VisionPro的程序设计和C#脚本程序的运行,最终结果显示如图8所示,如果在50μm误差范围内的汽车连接器被判定为合格产品,界面显示坐标的同时显示“OK”;反之,则被判定为不合格产品,界面显示坐标的同时显示“NG”。对于不合格连接器,执行机构拿掉,合格连接器用于后续装配。
图8 显示结果
本文获得汽车连接器的图像后,用VisionPro视觉软件对连接器引脚进行定位和测量,通过C#脚本程序显示出引脚相对圆孔中心的坐标,并判断汽车连接器是否格。事实证明,这种检测方法可以准确的判断汽车连接器引脚相对圆孔的位置是否满足装配要求。相对于传统的人工检测,机器视觉检测精度和检测效率提升10倍以上。