プログラム例 8.1
例タイプ:
イメージバッファーとImageOp、 SubtractAbsの使用
構成
- ロボットの数:1
- フィーダーの数:1
- フィーダー上のパーツの種類数:1
- 配置場所の数:1
- カメラの向き:フィーダー#1上の固定下向きカメラ
解説
バックライトをオンにしても、トレイの角に影ができることがあります。ブローブオブジェクトのサーチウィンドウにトレイの角が含まれていて、しきい値が適切に調整されていない場合、影が誤ってパーツとして識別される可能性があります。
パーツブローブビジョンシーケンスは、個々のパーツまたはパーツの総数を検出するために使用されます。パーツブローブビジョンシーケンスが影をパーツと見なす場合、システムは振動の方法について誤った決定を下すか、システムがトレイ上に十分なパーツがあると判断するため、PF_Controlコールバックがホッパーをオンにしない可能性があります。
以下は、トレイの角の影がパーツとして誤認される可能性がある例です。
ImageOpビジョンオブジェクトをPartBlobシーケンスに追加すると、この問題の解決に役立つ場合があります。ImageOpのSubtractAbs処理を使用します。SubtractAbsは、2つのイメージバッファー間の差分を出力します。この例では、ImageBuffer1プロパティーは空のフィーダーの画像ファイルになり、ImageBuffer2プロパティーはカメラによって取得された画像になります(値「0」はカメラのイメージバッファーを示します)。イメージバッファーが差し引かれると、フィーダーの画像は効果的に削除されます。
手順を次に示します。
新しいビジョンシーケンス「PartBlob」を作成します。
フィーダーのバックライトをオンにして、フィーダートレイのパーツをすべて取り除きます。
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ツールバーの[ヒストグラム]を押します。
パーツが適切に2値化されるまで、ヒストグラムの赤いThresholdHighバーをドラッグします。必要に応じて[更新]をクリックし、終了したらヒストグラムウィンドウの[OK]ボタンをクリックします。
以上により、PartBlobシーケンスが実行されると、フィーダーの画像が完全に削除されます。パーツは完全に白い背景に黒く表示されます。フィーダーは、PartBlobシーケンスから効果的にマスクされます。
Epson RC+ 8.0メニュー - [ツール] - [パーツフィーディング]ビジョンページで、目的のパーツのパーツブローブビジョンシーケンスとして「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
← ビジョンの結果の改善 プログラム例 8.2 →