程序示例 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”表示相机的图像缓冲区)。如果扣除图像缓冲区,则会有效地删除文件夹中的图像。

如下所述为其步骤。

  1. 创建新的视觉序列“PartBlob”。

  2. 将送料器的背光灯设为ON,除去送料器托盘上的所有部件。

  3. 单击PartBlob的SaveImage属性中的[Click to save]按钮。在本例中,将图像文件命名为“EmptyIF-240”。如下所示为文件的图像。

  4. 通过视觉引导的工具栏,拖放ImageOp对象。

  5. 更改ImageOp的尺寸,设为相机视野全体。

  6. 将ImageOp的Operation属性更改为“SubtractAbs”。

  7. 将ImageOp的ImageBuffer1属性更改为“File”。

  8. 单击ImageBufferFile按钮,选择以前作为“EmptyIF-240”保存的文件。

  9. 通过视觉引导的工具栏,添加Blob对象。更改Blob搜索窗口的尺寸,设为大于送料器托盘。

  10. 将Blob的ThresholdColor属性更改为“White”。

  11. 将1个部件放到托盘上,然后按下Vision Guide工具栏中的[直方图]。

    拖动直方图中的红色ThresholdHigh条,直至部件被适当地二值化。根据需要单击[更新],结束之后单击直方图窗口中的[OK]按钮。
    通过上述操作后,如果执行PartBlob,则会删除所有的送料器图像。条也会在全白背景中显示为黑色。送料器被PartBlob序列有效地屏蔽。

  12. 在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