サンプルプログラム

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

事前準備

  1. ロード手順 を参照して標準インターフェースのプログラムをロボットのコントローラにロードし、Mech-Centerとの通信を確立します。

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

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

  4. Mech-Centerの「設定」でMech-Visionのプロジェクトリストを同期させます。またプロジェクトの順序も調整することができます。

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

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

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

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

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

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
CNVRT PX070 PX070 RF
CNVRT PX071 PX071 RF TL#(1)
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接続を切断します。

カスタマイズ

  • TCP座標を定義

    TL#(1)は、1番目のツール番号を使用することを示します。ユーザーはツール番号を実際のTCP値が格納されているツール番号に変更する必要があります。

    注意

    0番目のツールは自動キャリブレーションに使用されますので、それを使用しないでください。

  • 画像撮像姿勢を定義

    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
CNVRT PX070 PX070 RF
CNVRT PX071 PX071 RF TL#(1)
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接続を切断します。

カスタマイズ

  • TCP座標を定義

    TL#(1)は、1番目のツール番号を使用することを示します。ユーザーはツール番号を実際のTCP値が格納されているツール番号に変更する必要があります。

    注意

    0番目のツールは自動キャリブレーションに使用されますので、それを使用しないでください。

  • 画像撮像姿勢を定義

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