ロボットでビジョンを使用する方法
ロボットガイダンスにビジョンシーケンスからのリザルトを使用する前に、そのシーケンスで使用するカメラをキャリブレーションする必要があります。詳細は、以下を参照してください。
ビジョンキャリブレーション
キャリブレーションを必要とするシーケンスオブジェクトからリザルトを取得しようとしたとき、キャリブレーションがされていない場合は、実行時にエラーが発生します。
位置リザルト
キャリブレーションされたカメラを使用したビジョンシーケンス内のオブジェクトによって得た位置リザルトは、指定したローカル座標系にあります。他のロボット/ビジョンシステムとは違い、ピクセル座標からロボット座標への変換ファンクションコールを行うための更なるステップはありません。これは、Vision Guide 8.0により完全に処理されます。座標系は簡単に検索できます。
ビジョンシステムで検出された位置に、ロボットのハンドを正確に位置決めするには、ハンドにツールを定義する必要があります。次の項目の「ツールの定義」を参照してください。
ロボットのガイダンスには、次のリザルトを使用することができます。
リザルト | 説明 |
---|---|
RobotXYU | 検出された状態でのX, Y, Uの座標を返す |
RobotToolXYU | 上向きカメラ時のみ 検出された状態でのロボットツールを定義するためのX, Y, Uの座標値を返す |
RobotX | X座標を返す |
RobotY | Y座標を返す |
RobotU | U座標を返す |
RobotPlacePos | 上向きカメラ時のみ CalRobotPlacePosで登録したワーク配置位置 (RobotPlaceTargetPos) に、検出されたワークを配置するためのロボット位置をPoint型で返す 注意:各オブジェクトにてCalRobotPlacePosを設定する必要があります。 |
U座標0°位置は、ロボットベースからまっすぐにのびた位置にあるY軸に沿っています。
RobotPlacePosについて、以下の図で説明を補足します。
この図では、作業面であるロボット座標系に上向きカメラが配置されており、CalRobotPlacePosによってワーク配置位置 (RobotPlaceTargetPos) が登録されています。実際の作業では、まず、ピックされたワークの位置を、ビジョンシーケンスで検出 (VRun) します。その後、ワークを配置するときのロボット位置 (RobotPlacePos)を取得 (VGet) します。
図の右側は、RobotPlacePosに移動した後の状態です。RobotPlacePosに移動すると、ワークの位置姿勢をワーク配置位置と一致させることができます。
RobotPlacePosで得られるポイントは、姿勢フラグがデフォルトの値であるため、移動時に、必要に応じて補正が必要です。次の例では、ピックされたワークの位置を上向きカメラで検出し、関節移動量が少なくなるようにワーク配置位置の上まで移動する方法を示しています。
Function placePart
'Move robot into position snapshot
Go camshot
VRun findPart
VGet findPart.Blob01.RobotPlacePos, P100
'------------------\-
' When the robot is SCARA
Double diffJ4 'Angle difference between RobotPlacePos and latch position(J4)
diffJ4 = PAgl(P100, 4) \- PAgl(LatchPos(WithoutToolArm), 4)
If diffJ4 > 180 Then
Go P100 -U(360) 'Joint4 will be the shortest movement
ElseIf diffJ4 < -180 Then
Go P100 +U(360) 'Joint4 will be the shortest movement
Else
Go P100
EndIf
'------------------\-
' When the robot is 6-axis
Go P100 LJM 4 '4: Joint6 will be the shortest movement
Fend
RobotPlacePosで得られるポイントが動作範囲外となり、エラー4007が発生することがあります。その場合は、ワーク配置位置を変更するか、RobotToolXYUを使用してください
ツールの定義
ロボットハンドのツールを定義するのは重要なことです。
ツールを定義することによって、ロボットはハンドがある場所の情報を得、位置情報のすべてが、TOOL0位置に関するものではなく、ハンドに関するものになります。
SPEL+でツールを定義するには、TLSETコマンドを使用してください。
次に、3つのツールオフセットの計算方法を示します。
ロボットマネージャーツールウィザードでツールを定義する
ロボットマネージャーのツールウィザードからツールを定義することができます。
ツールウィザードを使用するには、次の手順にしたがってください。
- ロボットマネージャーを開きます。
- [ツール設定]タブを選択します。
- [ツール設定ウィザード]ボタンをクリックします。
- ウィザードに示される手順にしたがい、ツールを作成します。
ツールオフセットの計算に、上向き固定カメラを使用する方法
ツールオフセットの計算に、上向き固定カメラを使用する方法を次に示します。ツールオフセットの特定には、RobotToolXYUリザルトを使用します。
ファンクションでは、まずツールの先端を位置決めするためのシーケンスを実行します。次に、VGet RobotToolXYUでツールオフセットを取得し、TLSetでツールを定義します。
Function DefineTool
Boolean found
Real xTool, yTool, uTool
VRun findTip
VGet findTip.tip.RobotToolXYU, found, xTool, yTool, uTool
If found Then
TlSet 1, XY(xTool, yTool, 0, 0)
EndIf
Fend
ツールオフセットの手動計算方法
下記のようなツールオフセットを計算するとき、軸を(SFREEを使用して)フリージョイント状態にすることはできません。つまり、ロボットの各軸を手で動かすことはできません。ジョグタブ、またはジョグ&ティーチウィンドウからジョグボタンでロボットをジョグしてください。
ツールオフセットの計算は、次の手順にしたがって行ってください。
キーポイント
- 垂直6軸型ロボットを使用している場合、下記のLocal命令を最初に実行し、以下の手順を実行してください。 > Local 1,Here
- 手順中の現在位置取得は、Local 1での位置を取得する必要があります。ジョグ&ティーチ画面を使用する場合、ジョグモードはLocalに、現在位置の表示モードはWorldに、Local番号は1に設定してください。
コマンドウィンドウを使用する場合、下記のようにコマンドを実行することでLocal 1での位置を確認できます。
> Print Here@1
- U軸を0°に位置決めします。
- ツールを “0” (TOOL0)に設定します。
- ロボットをジョグし、ハンドが基準点に重なるように注意深く合わせます。U軸の設定は変更しないでください。
- 現在位置のX座標とY座標をX1とY1として控えておきます。
- U軸を180°の位置にジョグします。
- ロボットをジョグし、ハンドが基準点に重なるように注意深く合わせます。U軸の設定は変更しないでください。
- 現在位置のX座標とY座標をX2とY2として控えておきます。
- 下記の公式を使って、ツールオフセットを計算します。
xTool = (X2 - X1) / 2
yTool = (Y2 - Y1) / 2 - ロボットマネージャー、あるいはコマンドウィンドウのツールページから、ツールを定義します。
TLSET 1, XY(xTool, yTool, 0, 0) - ツール設定をテストします。
現在ツールを前述の手順で定義したツールに設定してください。例えば、TOOL1と設定します。そして、ハンドを基準点に重なるようにジョグしてください。ここで、U軸をジョグします。このとき、ハンドは基準点に重なったままになっていなければなりません。
ロボットが把持している基板でのツール計算
この例で、Vision Guide 8.0は、ロボットが把持している基板のツール計算を行います。基板内の2つの基準点の座標からツールオフセットを算出します。これには上向き固定カメラが1台必要です。カメラをキャリブレーションした後、基板を置く位置を教示する必要があります。
置く位置の教示方法:
基板をロボットでピックアップします。
ツール1を計算するために、ファンクション例CalBoardToolを呼び出します。
Tool 1に切り替えます。
基板を置く位置にジョグします。
置く位置を教示します。
記号 内容 a 基準点1 (Fid1CamPos) b 基板 c 算出するツールオフセット d 基準点2 (Fid2CamPos) e ロボットの把持位置
Function CalcBoardTool As Boolean
Boolean found
Real x, y, theta
Real toolX1, toolY1, toolU
Real toolX2, toolY2
CalcBoardTool = False
Jump Fid1CamPos ' Locate fiducial 1 over camera
VRun SearchFid1
VGet SearchFid1.Corr01.RobotToolXYU, found, toolX1, toolY1, toolU
If Not found Then
Exit Function
EndIf
Jump Fid2CamPos ' Locate fiducial 2 over camera
VRun SearchFid2
VGet SearchFid2.Corr01.RobotToolXYU, found, toolX2, toolY2, toolU
If Not found Then
Exit Function
EndIf
x = (toolX1 + toolX2) / 2
y = (toolY1 + toolY2) / 2
theta = Atan2(toolX1 \- toolX2, toolY1 \- toolY2)
toolU = RadToDeg(theta)
TlSet 1, XY(x, y, 0, toolU)
CalcBoardTool = True
Fend
パレット検索用カメラの位置決め
J2マウントカメラを使用している場合、カメラ撮像位置を制御するのは困難です。しかし、Armを使用することで、カメラ撮像位置を簡単にパレット上で移動することができます。Armの詳細は、以下を参照してください。
"Epson RC+ 8.0 SPEL+ ランゲージリファレンス"
ヒント:
ArmコマンドはSCARA型ロボットでのみ使用可能です。