サンプルプログラム

本節ではMech-Centerで提供される標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について紹介します。

事前準備

  1. ロード手順 を参照して標準インターフェースの通信設定が行われます。

  2. コントローラにインストールされたキャリブレーションプログラムを実行するか、手動でロボットを移動させてキャリブレーションポイントを追加する。キャリブレーションの操作手順 を参照し、外部パラメータのキャリブレーションが行われます。

  3. 必要なMech-Vision、Mech-Vizのプロジェクトを作成し、現在のプログラムを自動的に読み込む にチェックを入れます。

  4. TCP座標を正しく設定します。

  5. ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。

サンプルプログラムの紹介

簡単な把持・配置のサンプルプログラムは、Mech-Mindソフトウェアシステムのインストールパス Mech-Center/Robot_Interface/YASKAWA/sample フォルダに格納されています。

注意

ティーチペンダントでは、以下のサンプルコードのARGFは英括弧で表示されます。

以下のサンプルプログラムを紹介します。

Mech-Visionからビジョン結果を取得

NOP
'*****************************
'FUNCTION:simple pick and place
'with Mech-Vision
'mechmind, 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 vision project
CALL JOB:MM_START_VIS ARGF"1;2;2"
TIMER T=1.00
'get result from Vis
CALL JOB:MM_GET_VISDATA ARGF"1;50;51;52"
TIMER T=0.20
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"
PAUSE IF I061<>1
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVL P071 V=80.0 PL=0
'enable girpper
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

プログラムロジック

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影姿勢に移動します。

  3. MM_INIT_SOCKETを呼び出し、ソケット通信を初期化します。

  4. MM_OPEN_SOCKETを呼び出し、TCP接続を構築します。

  5. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。

  6. MM_START_VISを呼び出し、Mech-Visionプロジェクトをトリガーします。

  7. 1秒待機します。Eye-In-Handモードでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT命令が必要です。Eye-To-Handモードでは、MM_START_VISとMM_GET_VISDATAの間にMOVJ、MOVLがある場合、この待機時間は必要ありません。

  8. MM_GET_VISDATAを呼び出し、Mech-Visionプロジェクトのビジョン結果を取得します。

  9. 返されたビジョン結果取得のステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  10. MM_GET_POSEを呼び出し、受信された最初の位置姿勢をP071に保存します。

  11. ロボットを把持位置に移動させ、把持を行います。

  12. ロボットを把持位置と配置位置間の経路を移動させます。

  13. 設定した配置位置にロボットを移動し、ワークを配置します。

  14. 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から経路計画を取得

'*****************************
'FUNCTION:simple pick and place
'with Mech-Viz
'mechmind, 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 C00004 VJ=80.00
'move to the camera position
MOVJ C00005 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;50;51;52;53"
TIMER T=0.20
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"
PAUSE IF I061<>1
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVL P071 V=80.0 PL=0
'enable girpper
DOUT OT#(1) ON
SFTON P070
MOVJ P071 VJ=50.00
SFTOF
MOVJ C00006 VJ=80.00
'drop point
MOVJ C00007 VJ=80.00 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET
END

プログラムロジック

Mech-Vizが出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。

  1. ロボットを初期位置に移動します。

  2. ロボットを画像撮影姿勢に移動します。

  3. MM_INIT_SOCKETを呼び出し、ソケット通信を初期化します。

  4. MM_OPEN_SOCKETを呼び出し、TCP接続を構築します。

  5. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。

  6. MM_START_VIZを呼び出し、Mech-Vizプロジェクトを実行します。

  7. MM_SET_BRANCHを呼び出し、Mech-Vizプロジェクトの分岐ステップを指定した出口から実行させます。

  8. MM_GET_VIZDATA を呼び出し、Mech-Vizから行動計画を取得します。

  9. 返された経路計画取得のステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  10. MM_GET_POSEを呼び出し、受信された最初の位置姿勢をP071に保存します。

  11. ロボットを把持位置に移動させ、把持を行います。

  12. ロボットを把持位置と配置位置間の経路を移動させます。

  13. 設定した配置位置にロボットを移動し、ワークを配置します。

  14. MM_CLOSE_SOCKETでTCP接続を切断します。

カスタマイズ

  • ロボットがビジョンポイントに到達したときに使用するツールを定義

  • 画像撮像姿勢を定義

    MOVJ C00000 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の「経路計画」ステップを使用して経路を取得

'*****************************
'FUNCTION:105_GET_VISPATH
'with Mech-Vision
'mechmind, 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 C00008 VJ=80.00
'move to the camera position
MOVJ C00009 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;0;0"
TIMER T=1.00
'get result from Vis
CALL JOB:MM_GET_VISPATH ARGF"1;2;50;51;52;53"
TIMER T=0.20
'Validation Status
PAUSE IF I053<>1105
'set the first pos to P070;
'set lables to I61;
'set speed to I62;
CALL JOB:MM_GET_POSE ARGF"1;70;61;62"
'Validation lable
PAUSE IF I061<>1
'set the second pos to P071;
'set lables to I63;
'set speed to I64;
CALL JOB:MM_GET_POSE ARGF"2;71;63;64"
'Validation lable
PAUSE IF I063<>1
'set the third pos to P072;
'set lables to I65;
'set speed to I66;
CALL JOB:MM_GET_POSE ARGF"3;72;65;66"
'Validation lable
PAUSE IF I065<>1
MOVJ P071 VJ=50.00
MOVL P072 V=80.0 PL=0
'enable girpper
DOUT OT#(1) ON
MOVJ P073 VJ=50.00
MOVJ C00010 VJ=80.00
'drop point
MOVL C00011 V=500.0 PL=0
'release gripper
DOUT OT#(1) OFF
CALL JOB:MM_CLOSE_SOCKET

プログラムロジック

このサンプルは、Mech-Visionの「経路計画」ステップで計画した経路を取得して把持を行い、固定配置点に配置します。

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影姿勢に移動します。

  3. MM_INIT_SOCKETを呼び出し、ソケット通信を初期化します。

  4. MM_OPEN_SOCKETを呼び出し、TCP接続を構築します。

  5. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_SET_MODELで設定することができます。

  6. MM_START_VISを呼び出し、Mech-Visionプロジェクトをトリガーします。

  7. 1秒待機します。Eye-In-Handモードでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT命令が必要です。Eye-To-Handモードでは、MM_START_VISとMM_GET_VISDATAの間にMOVJ、MOVLがある場合、この待機時間は必要ありません。

  8. MM_GET_VISPATHを呼び出し、Mech-Visionの「経路計画」ステップで取得した経路を取得します。このサンプルを実行すると、3つの経路点が取得され、2番目の経路点が把持点とします。

  9. 返された経路計画取得のステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  10. MM_GET_POSEを呼び出し、受信した経路点を異なる変数に保存します。

  11. ロボットを把持位置に移動させ、把持を行います。

  12. ロボットを把持位置と配置位置間の経路を移動させます。

  13. 設定した配置位置にロボットを移動し、ワークを配置します。

  14. 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、把持点と配置点に移動するときにハンドの開閉を制御するためのロジックを追加する必要があります。