複数カメラの使用
本章では、複数のカメラを使用してピック精度を向上させる方法について説明します。
プログラム例 7.1
例タイプ:
ピック領域の精度を向上させるための複数の固定下向きカメラの使用
構成
- ロボットの数:1
- フィーダーの数:1
- フィーダー上のパーツの種類数:1
- 配置場所の数:1
- プラットフォーム種類:平面
- ピックエリア:領域B
- カメラの向き
- カメラ#1:下向き固定。視野はフィーダートレイ全体。パーツブローブシーケンスで使用
- カメラ#2:下向き固定。視野は領域Bと同じ(トレイの半部)。パーツ検出シーケンスで使用
解説
カメラ#1の視野は、フィーダートレイ全体が映るように設定します。パーツブローブシーケンスはカメラ#1を使用します。パーツブローブシーケンスは、トレイ内のパーツの数と分布に基づいて、フィーダーの振動種類を決定するのに使用されます。カメラ#2の視野には、ピック領域B全体が映るように設定します。カメラ視野を有効に使うために、カメラ#2をカメラ#1に対して90度回転させる必要があります(つまり、カメラは互いに直交する)。カメラ#2はパーツ検出シーケンスに使用されます。
パーツ検出シーケンスによって検出されたパーツは、パーツ座標キューを生成するために使用されます。視野はカメラ#1の視野の半分のサイズであるため、解像度(mm/ピクセル)を大幅に向上させることができます。
さらに、カメラ#1はフィーダーの振動方法を判断するためにのみ使用されるため、カメラ#2よりも解像度の低いカメラを使用することができます。たとえば、カメラ#1の解像度は640×480ピクセルで、カメラ#2の解像度は5472×3648ピクセルです。
視野を狭め、カメラの解像度を上げることで、ロボットのピック精度が向上します。
フリップ&セパレーションの自動キャリブレーションは、パーツ検出シーケンスを使用して、ピック可能なパーツが見つかったことを確認します。パーツ検出シーケンスに小さな視野のカメラが使用されている場合、追加の手順を実施しないと、フリップ&セパレーションの自動キャリブレーションは正しく機能しません。
次のいずれかの方法を実施してください:
自動キャリブレーションをスキップし、フリップ&セパレートキャリブレーションパラメーターを手動で調整します。
自動キャリブレーションのみで使用する、カメラ#1(広視野)を使用する一時的なパーツ検出シーケンスを作成します。
この例では、カメラ#2(狭視野)を使用するパーツ検出シーケンスの名前は「PartSeq」です。カメラ#1(広視野)を使用する一時的なパーツ検出シーケンスの名前は「PartSeqTemp」です。「PartSeqTemp」は、Geometricオブジェクトを使用してパーツを検索します。
「PartSeqTemp」は、フィーダーのキャリブレーションに一時的にのみ使用されます。パーツ検出ビジョンシーケンスとして「PartSeqTemp」を選択します(以下を参照)。
Part Feedingダイアログのキャリブレーション&テストページに移動し、セパレーションの自動キャリブレーションを実行します。
必要なすべてのキャリブレーションが完了したら、キャリブレーション&テストダイアログを閉じます。パーツ検出ビジョンシーケンスを「PartSeq」(狭視野のカメラ#2を使用)に戻します。実行時には、「PartSeq」の結果を使用して、パーツ座標キューが生成されます。
特別なコードは必要ありません。
サンプルコード
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
プログラム例 7.2
例タイプ:
固定下向きカメラとモバイルカメラの両方を使用してピック精度を向上させる
構成
- ロボットの数:1
- フィーダーの数:1
- フィーダー上のパーツの種類数:1
- 配置場所の数:1
- プラットフォーム種類:平面
- ピックエリア:全面
- カメラの向き
- カメラ#1:下向き固定。視野はフィーダートレイ全体。パーツブローブシーケンス、およびパーツ検出シーケンスで使用
- カメラ#2:モバイル(J2軸)。視野はパーツよりやや大きい。ピック前にパーツの二次画像を取得
解説
モバイルカメラ(軸2)には「アーム」が定義されます(スカラロボットのみ)。 6軸ロボットを使用している場合は、モバイルカメラ(軸6)には(アームではなく)ツールを定義できます。
グリッパーがパーツ座標に直接移動するように命令する代わりに、カメラ#2がパーツの上部に移動します。追加のビジョンシーケンスが実行され、パーツのより正確なピック位置が決定されます。
モバイルカメラの視野は、固定下向きカメラよりもはるかに小さいため、ピックの精度が向上します。パーツ上にカメラを移動するために必要な追加動作とビジョン処理のために、全体的なサイクルタイムは長くなります。
アームを自動的に定義するには、Epson RC+ - ツール - ロボットマネージャーに移動します。 ロボットマネージャーの[増設アーム]タブを選択します。この例では、Arm 1を選択し、[増設アーム設定ウィザード]ボタンをクリックします。ウィザードの各ステップを実行します。
ウィザードの詳細は、以下のマニュアルを参照してください。
"Vision Guide 8.0ソフトウェア編 - カメラ設置位置のアーム設定"
モバイルカメラをキャリブレーションし、フィーダー上の単一のパーツを見つけることができる、ビジョンシーケンスを作成します。このシーケンスは、PF_Robotコールバック内で実行(VRun)します。この例では、シーケンスは「MobileCam」という名称です。 パーツフィーディングダイアログでは「MobileCam」は選択しません。パーツブローブシーケンスとパーツ検出シーケンスはカメラ#1を使用し、通常どおりパーツフィーディングダイアログで選択します。
サンプルコード
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
Boolean found
Real x, y, u
Do While PF_QueLen(PartID) > 0
P0 = PF_QueGet(PartID)
Arm 1 'Select the Arm that is defined for the Mobile Camera
Jump P0 :Z(0) 'Position the Mobile camera over the part
VRun MobileCam
VGet MobileCam.Geom01.RobotXYU, found, x, y, u
Arm 0 'Select default robot arm
If found Then
Jump XY(x, y, PICKZ, u) /R
On Gripper; Wait 0.2
Jump Place
Off Gripper; Wait 0.2
EndIf
PF_QueRemove PartID
If PF_IsStopRequested(PartID) = True Then
Exit Do
EndIf
Loop
PF_Robot = PF_CALLBACK_SUCCESS
Fend
プログラム例 7.3
例タイプ:
複数の固定カメラを使用してピック精度を向上させる
構成
- ロボットの数:1
- フィーダーの数:1
- フィーダー上のパーツの種類数:1
- 配置場所の数:1
- プラットフォーム種類:平面
- ピックエリア:全面
- カメラの向き
- カメラ#1:下向き固定。視野はフィーダートレイ全体。パーツブローブシーケンスおよびパーツ検出シーケンスで使用
- カメラ#2:上向き固定。ロボットのグリッパーに保持されたパーツのツールオフセットを作成するために使用
解説
カメラ#1はフィーダートレイの上にあり、下向き固定です。 カメラ#2は上向き固定です。カメラ#1の視野は、フィーダーのトレイ全体をカバーします。パーツブローブビジョンシーケンスとパーツ検出シーケンスは、カメラ#1を使用します。
カメラ#2の視野は、パーツの大きさよりも若干大きくします。ロボットがフィーダーからパーツをピックアップした後、ロボットはそのパーツをカメラ#2の上に移動します。カメラ#2は、グリッパーに保持されているパーツのツールオフセットを動的に作成するために使用されます。ロボットは、新しく定義されたツールオフセットを使用して、パーツを配置します。ツールオフセットは、フィーダーからのピックアップの不正確さを補正します。
カメラ#2は、PF_Robotコールバックでのみ使用されます。Epson RC+ 8.0メニュー - [ツール] - [パーツフィーディング] - [ビジョン]には、カメラ#2のビジョンシーケンスは設定しません。サンプルコードでは、カメラ#2のVGet RobotToolXYUリザルトを使用して、ツールのオフセットを決定しています。
このPF_Robot関数はまず、グリッパーでパーツを把持するための手順を実行します。次に、VGet RobotToolXYUを使ってツールオフセットを取得し、TLSetを使ってツールを定義します。そして、ロボットは新しいツールオフセットを使ってパーツを配置します。
この例では、上向き固定カメラをキャリブレーションする必要があります。上向き固定カメラのキャリブレーション方法の詳細については、以下のマニュアルを参照してください。
"Vision Guide 8.0ソフトウェア編 - キャリブレーション手順: 上向き固定カメラ"
サンプルコード
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
Boolean found
Real xTool, yTool, uTool
Do While PF_QueLen(PartID) > 0
P0 = PF_QueGet(PartID)
Tool 0 ' Select the correct Tool number for the Gripper
Jump P0
On Gripper; Wait 0.2
Jump upCam
VRun findPartInGripper
VGet findPartInGripper.Geom01.RobotToolXYU, found, xTool, yTool, uTool
If found Then
TLSet 1, XY(xTool, yTool, 0, 0)
Tool 1
Jump Place
Else
Jump reject ' Part not found in gripper - reject part
EndIf
Off Gripper; Wait 0.2
PF_QueRemove PartID
If PF_IsStopRequested(PartID) = True Then
Exit Do
EndIf
Loop
PF_Robot = PF_CALLBACK_SUCCESS
Fend
← エラー処理 ビジョンの結果の改善 →