程序示例 8.1
示例类型:
使用图像缓冲区与ImageOp、SubtractAbs
构成
- 机器人数量:1
- 送料器数量:1
- 送料器上的部件类型数量:1
- 配置位置数量:1
- 相机的方向:送料器#1上的固定向下相机
描述
即使将背光灯设为ON,也可能会在托盘边角上留下影子。Blob对象的搜索窗口中包含有托盘的边角,并且未适当调整阈值时,可能会误将影子识别为部件。
部件Blob视觉序列被用于检测单个部件或部件总数。部件Blob视觉序列将影子视为部件时,系统会错误确定振动方法或判断托盘上没有足够的部件,因此,可能导致PF_Control回调函数不将料斗设为ON。
如下所述为误将托盘边角的影子视为部件的示例。
如果将ImageOp视觉对象添加至PartBlob序列,则可能有助于解决该问题。使用ImageOp的SubtractAbs处理。SubtractAbs用于输出2个图像缓冲区的差异。在本例中,ImageBuffer1属性为空白文件夹的图像文件,ImageBuffer2属性为通过相机获取的图像(值“0”表示相机的图像缓冲区)。如果扣除图像缓冲区,则会有效地删除文件夹中的图像。
如下所述为其步骤。
创建新的视觉序列“PartBlob”。
将送料器的背光灯设为ON,除去送料器托盘上的所有部件。
单击PartBlob的SaveImage属性中的[Click to save]按钮。在本例中,将图像文件命名为“EmptyIF-240”。如下所示为文件的图像。
通过视觉引导的工具栏,拖放ImageOp对象。
更改ImageOp的尺寸,设为相机视野全体。
将ImageOp的Operation属性更改为“SubtractAbs”。
将ImageOp的ImageBuffer1属性更改为“File”。
单击ImageBufferFile按钮,选择以前作为“EmptyIF-240”保存的文件。
通过视觉引导的工具栏,添加Blob对象。更改Blob搜索窗口的尺寸,设为大于送料器托盘。
将Blob的ThresholdColor属性更改为“White”。
将1个部件放到托盘上,然后按下Vision Guide工具栏中的[直方图]。
拖动直方图中的红色ThresholdHigh条,直至部件被适当地二值化。根据需要单击[更新],结束之后单击直方图窗口中的[OK]按钮。
通过上述操作后,如果执行PartBlob,则会删除所有的送料器图像。条也会在全白背景中显示为黑色。送料器被PartBlob序列有效地屏蔽。
在Epson RC+ 8.0菜单 - [工具] - [上料]视觉页面中,作为目标部件的部件Blob视觉序列,设定“PartBlob”。
无需特别代码。
样本代码
Main.prg
Function main
If Motor = Off Then
Motor On
EndIf
Power Low
Jump Park
PF_Start 1
Fend
PartFeeding.prg
Function PF_Robot(PartID As Integer) As Integer
Do While PF_QueLen(PartID) > 0
P0 = PF_QueGet(PartID)
Jump P0
On Gripper; Wait 0.2
Jump Place
Off Gripper; Wait 0.2
PF_QueRemove PartID
If PF_IsStopRequested(PartID) = True Then
Exit Do
EndIf
Loop
PF_Robot = PF_CALLBACK_SUCCESS
Fend