ロボットでビジョンを使用する方法

ロボットガイダンスにビジョンシーケンスからのリザルトを使用する前に、そのシーケンスで使用するカメラをキャリブレーションする必要があります。詳細は、以下を参照してください。
ビジョンキャリブレーション

キャリブレーションを必要とするシーケンスオブジェクトからリザルトを取得しようとしたとき、キャリブレーションがされていない場合は、実行時にエラーが発生します。

位置リザルト

キャリブレーションされたカメラを使用したビジョンシーケンス内のオブジェクトによって得た位置リザルトは、指定したローカル座標系にあります。他のロボット/ビジョンシステムとは違い、ピクセル座標からロボット座標への変換ファンクションコールを行うための更なるステップはありません。これは、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つのツールオフセットの計算方法を示します。

ロボットマネージャーツールウィザードでツールを定義する
ロボットマネージャーのツールウィザードからツールを定義することができます。
ツールウィザードを使用するには、次の手順にしたがってください。

  1. ロボットマネージャーを開きます。
  2. [ツール設定]タブを選択します。
  3. [ツール設定ウィザード]ボタンをクリックします。
  4. ウィザードに示される手順にしたがい、ツールを作成します。

ツールオフセットの計算に、上向き固定カメラを使用する方法
ツールオフセットの計算に、上向き固定カメラを使用する方法を次に示します。ツールオフセットの特定には、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  
    
  1. U軸を0°に位置決めします。
  2. ツールを “0” (TOOL0)に設定します。
  3. ロボットをジョグし、ハンドが基準点に重なるように注意深く合わせます。U軸の設定は変更しないでください。
  4. 現在位置のX座標とY座標をX1とY1として控えておきます。
  5. U軸を180°の位置にジョグします。
  6. ロボットをジョグし、ハンドが基準点に重なるように注意深く合わせます。U軸の設定は変更しないでください。
  7. 現在位置のX座標とY座標をX2とY2として控えておきます。
  8. 下記の公式を使って、ツールオフセットを計算します。
    xTool = (X2 - X1) / 2
    yTool = (Y2 - Y1) / 2
  9. ロボットマネージャー、あるいはコマンドウィンドウのツールページから、ツールを定義します。
    TLSET 1, XY(xTool, yTool, 0, 0)
  10. ツール設定をテストします。
    現在ツールを前述の手順で定義したツールに設定してください。例えば、TOOL1と設定します。そして、ハンドを基準点に重なるようにジョグしてください。ここで、U軸をジョグします。このとき、ハンドは基準点に重なったままになっていなければなりません。

ロボットが把持している基板でのツール計算

この例で、Vision Guide 8.0は、ロボットが把持している基板のツール計算を行います。基板内の2つの基準点の座標からツールオフセットを算出します。これには上向き固定カメラが1台必要です。カメラをキャリブレーションした後、基板を置く位置を教示する必要があります。

置く位置の教示方法:

  1. 基板をロボットでピックアップします。

  2. ツール1を計算するために、ファンクション例CalBoardToolを呼び出します。

  3. Tool 1に切り替えます。

  4. 基板を置く位置にジョグします。

  5. 置く位置を教示します。

    記号 内容
    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型ロボットでのみ使用可能です。