サンプルプログラム
以下では、標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について説明します。
事前準備
-
標準インターフェースの通信設定 を参照して標準インターフェースの通信設定が行われます。
-
コントローラにインストールされたキャリブレーションプログラムを実行するか、手動でロボットを移動させてキャリブレーションポイントを追加します。 キャリブレーションの操作手順 を参照し、外部パラメータのキャリブレーションが行われます。
-
必要なMech-Vision、Mech-Vizのプロジェクトを作成し、 プロジェクトの自動読み込み が設定されます。
-
TCP座標を正しく設定します。
-
ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。
サンプルプログラムの紹介
簡単な把持・配置のサンプルプログラムは、Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある Mech-Center/Robot_Interface/YASKAWA/sample
フォルダに格納されています。
ティーチペンダントでは、以下のサンプルコードのARGFは英括弧で表示されます。 |
以下のサンプルプログラムを紹介します。
Mech-Visionからビジョン結果を取得
NOP
'*****************************
'FUNCTION:simple pick and place
'with Mech-Vision
'2022-5-27
'*****************************
'clear I50 to I69
CLEAR I050 20
'Initialize p variables
SUB P070 P070
SUB P071 P071
'set 200mm to Z
SETE P070 (3) 200000
'move to the home position
MOVJ C00000 VJ=80.00
'move to the camera position
MOVJ C00001 VJ=80.00 PL=0
'set ip address of IPC
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
TIMER T=0.20
CALL JOB:MM_OPEN_SOCKET
'set vision recipe
CALL JOB:MM_SET_MODEL ARGF"1;1"
'Run vision project
CALL JOB:MM_START_VIS ARGF"1;0;2"
'get result from Vis
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
PAUSE IF I052<>1100
'set the first pos to P071;
'set lables to I61;
'set speed to I62;
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVL P071 V=80.0 PL=0
'enable gripper
DOUT OT#(1) ON
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVJ C00002 VJ=80.00
'drop point
MOVJ C00003 VJ=80.00 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET
END
プログラムロジック
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SOCKETでソケット通信を初期化します。
-
MM_OPEN_SOCKETでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。
-
MM_START_VISでMech-Visionプロジェクトに実行をトリガーします。
-
1秒待機します。Eye-In-Handでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT命令が必要です。Eye-To-Handでは、MM_START_VISとMM_GET_VISの間にMOVJ、MOVLがある場合、このWAIT命令は必要ありません。
-
MM_GET_VISDATAを呼び出し、Mech-Visionプロジェクトのビジョン結果を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
MM_GET_POSEを呼び出し、受信された最初の位置姿勢をP071に保存します。
-
ロボットを把持位置に移動させ、把持を行います。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
-
MM_CLOSE_SOCKETでTCP接続を切断します。
カスタマイズ
-
ロボットがビジョンポイントに到達したときに使用するツールを定義
詳細については、 ロボットがビジョンポイントに到達したときに使用するツールを定義 をご参照ください。
-
画像撮像位置を定義
MOVJ C00000 VJ=80.00、写真撮影位置をティーチング方法でC00000に記録する必要があります。
-
動作経路を定義
MOVJ C00002 VJ=80.00、経路点の位置をティーチング方法でC00002に記録する必要があります。この経路はロボットが周辺環境と衝突しないように設定する必要があります。途中の経路は複数個設定することも可能です。
-
把持、配置位置からのZ方向オフセットを定義
-
把持位置に近づけます
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
ロボット座標系に基づき、ロボットを把持位置上の200mmを移動させます。接近する際に衝突しないように、オフセット(つまり
SETE P070 (3) 200000
行の200000)を修正する必要があります。 -
把持位置から離れます
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
ロボット座標系に基づき、ロボットを把持位置上の200mmを移動させます。離れる際に衝突しないように、オフセット(つまり
SETE P070 (3) 200000
行の200000)を修正する必要があります。
-
-
配置位置を定義
MOVJ C00003 VJ=80.00 PL=0、配置位置をティーチインでC00003に記録する必要があります。
-
ロボットハンドの制御ロジックを追加
DOUT OT#(1) ON および DOUT OT#(1) OFF、把持点と配置点に移動するときにロボットハンドの開閉を制御するためのロジックを追加する必要があります。
Mech-Vizから動作計画を取得
NOP
'*****************************
'FUNCTION:simple pick and place
'with Mech-Viz
'2022-5-27
'*****************************
'clear I50 to I69
CLEAR I050 20
'Initialize p variables
SUB P070 P070
SUB P071 P071
'set 200mm to Z
SETE P070 (3) 200000
'move to the home position
MOVJ C00000 VJ=80.00
'move to the camera position
MOVJ C00001 VJ=80.00 PL=0
'set ip address of IPC
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
TIMER T=0.20
CALL JOB:MM_OPEN_SOCKET
'set vision recipe
CALL JOB:MM_SET_MODEL ARGF"1;1"
TIMER T=0.20
'Run Viz project
CALL JOB:MM_START_VIZ ARGF"1"
TIMER T=0.20
CALL JOB:MM_SET_BRANCH ARGF"1;1"
'get result from Viz
TIMER T=1.00
CALL JOB:MM_GET_VIZDATA ARGF"2;51;52;53"
PAUSE IF I053<>2100
'set the first pos to P071;
'set lables to I61;
'set speed to I62;
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVL P071 V=80.0 PL=0
'enable gripper
DOUT OT#(1) ON
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVJ C00002 VJ=80.00
'drop point
MOVJ C00003 VJ=80.00 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET
END
プログラムロジック
Mech-Vizが出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SOCKETでソケット通信を初期化します。
-
MM_OPEN_SOCKETでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。
-
MM_START_VIZでMech-Vizプロジェクトを実行します。
-
MM_SET_BRANCHでMech-Vizプロジェクトの分岐ステップを指定した出口から実行させます。
-
MM_GET_VIZDATAでMech-Vizから行動作計画を取得します。
-
返された経路計画取得のステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
MM_GET_POSEで受信された最初の位置姿勢をP071に保存します。
-
ロボットを把持位置に移動させ、把持を行います。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
-
MM_CLOSE_SOCKETでTCP接続を切断します。
カスタマイズ
-
ロボットがビジョンポイントに到達したときに使用するツールを定義
詳細については、 ロボットがビジョンポイントに到達したときに使用するツールを定義 をご参照ください。
-
画像撮像位置を定義
MOVJ C00004 VJ=80.00、写真撮影位置をティーチインでC00004に記録する必要があります。
-
動作経路を定義
MOVJ C00006 VJ=80.00、経路点の位置をティーチインでC00006に記録する必要があります。この経路はロボットが周辺環境と衝突しないように設定する必要があります。途中の経路は複数個設定することも可能です。
-
把持、配置位置からのZ方向オフセットを定義
-
把持位置に近づけます
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
ロボット座標系に基づき、ロボットを把持位置上の200mmを移動させます。接近する際に衝突しないように、オフセット(つまり
SETE P070 (3) 200000
行の200000)を修正する必要があります。 -
把持位置から離れます
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
ロボット座標系に基づき、ロボットを把持位置上の200mmを移動させます。離れる際に衝突しないように、オフセット(つまり
SETE P070 (3) 200000
行の200000)を修正する必要があります。
-
-
配置位置を定義
MOVJ C00007 VJ=80.00 PL=0、配置点の位置をティーチインでC00007に記録する必要があります。
-
ロボットハンドの制御ロジックを追加
DOUT OT#(1) ON および DOUT OT#(1) OFF、把持点と配置点に移動するときにロボットハンドの開閉を制御するためのロジックを追加する必要があります。
Mech-Visionの「経路計画」ステップを使用して経路を取得
NOP
'*****************************
'FUNCTION:105_GET_VISPATH
'with Mech-Vision
'2023-1-9
'*****************************
'clear I50 to I69
CLEAR I050 20
'Initialize p variables
SUB P070 P070
SUB P071 P071
SUB P072 P072
'move to the home position
MOVJ C00000 VJ=80.00
'move to the camera position
MOVJ C00001 VJ=80.00 PL=0
'set ip address of IPC
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
TIMER T=0.20
CALL JOB:MM_OPEN_SOCKET
'set vision recipe
CALL JOB:MM_SET_MODEL ARGF"1;1"
TIMER T=0.20
'Run vision project
CALL JOB:MM_START_VIS ARGF"1;0;3;90"
TIMER T=1.00
'get result from Vis
CALL JOB:MM_GET_VISPATH ARGF"1;2;51;52;53"
TIMER T=0.20
'Validation Status
PAUSE IF I053<>1103
'set the first pos to P070;
'set lables to I61;
'set speed to I62;
CALL JOB:MM_GET_POSE ARGF"1;70;61;62"
'set the second pos to P071;
'set lables to I63;
'set speed to I64;
CALL JOB:MM_GET_POSE ARGF"2;71;63;64"
'set the third pos to P072;
'set lables to I65;
'set speed to I66;
CALL JOB:MM_GET_POSE ARGF"3;72;65;66"
MOVJ P070 VJ=50.00
MOVL P071 V=80.0 PL=0
'enable gripper
DOUT OT#(1) ON
MOVJ P072 VJ=50.00
MOVJ C00002 VJ=80.00
'drop point
MOVL C00003 V=500.0 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET
END
プログラムロジック
このサンプルは、Mech-Visionの「経路計画」ステップで計画した経路を取得して把持を行い、固定配置点に配置します。
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_INIT_SOCKETでソケット通信を初期化します。
-
MM_OPEN_SOCKETでTCP接続を構築します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。
-
MM_START_VISでMech-Visionプロジェクトに実行をトリガーします。
-
1秒待機します。Eye-In-Handでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT命令が必要です。Eye-To-Handでは、MM_START_VISとMM_GET_VISの間にMOVJ、MOVLがある場合、このWAIT命令は必要ありません。
-
MM_GET_VISPATHを呼び出し、Mech-Visionの「経路計画」ステップで取得した経路を取得します。このサンプルを実行すると、3つの経路点が取得され、2番目の経路点が把持点とします。
-
返された経路計画取得のステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
MM_GET_POSEを呼び出し、受信した経路点を異なる変数に保存します。
-
ロボットを把持位置に移動させ、把持を行います。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
-
MM_CLOSE_SOCKETでTCP接続を切断します。
カスタマイズ
-
ロボットがビジョンポイントに到達したときに使用するツールを定義
詳細については、 ロボットがビジョンポイントに到達したときに使用するツールを定義 をご参照ください。
-
画像撮像位置を定義
MOVJ C00009 VJ=80.00 PL=0、写真撮影位置をティーチイン方法でC00009に記録する必要があります。
-
配置位置を定義
MOVL C00011 V=500.0 PL=0、配置位置をティーチイン方法でC00011に記録する必要があります。
-
ロボットハンドの制御ロジックを追加
DOUT OT#(1) ON および DOUT OT#(1) OFF、把持点と配置点に移動するときにロボットハンドの開閉を制御するためのロジックを追加する必要があります。