サンプルプログラム2:MM_S2_Viz_Basic

現在ご覧いただいているのは未リリースのバージョンです(V2.1.0)。異なるバージョンを参照する場合は、画面右上のボタンから切り替えが可能です。

■ ご利用中のバージョンが分からない場合はお気軽にサポート窓口までご連絡ください。

プログラム概要

機能

ロボットがMech-Vizプロジェクトをトリガーして実行し、その後計画された経路を取得して、把持および配置を実行します。

ファイル場所

Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある Communication Component/Robot_Interface/FANUC/sample/MM_S2_Viz_Basic

必要なプロジェクト

Mech-VisionとMech-Vizプロジェクト

使用前提

  1. 標準インターフェース通信設定 が完了しました。

  2. 自動キャリブレーション が完了しました。

このサンプルプログラムは参考用です。ユーザーは実際の状況に応じて、このプログラムを基に変更を加える必要があります。このプログラムをそのまま使用しないでください。

プログラム説明

以下はMM_S2_Viz_Basicサンプルプログラムのコードと関連する説明です。

   1:  !-------------------------------- ;
   2:  !FUNCTION: trigger Mech-Viz ;
   3:  !project and get planned path ;
   4:  !Mech-Mind, 2023-12-25 ;
   5:  !-------------------------------- ;
   6:   ;
   7:  !set current uframe NO. to 0 ;
   8:  UFRAME_NUM=0 ;
   9:  !set current tool NO. to 1 ;
  10:  UTOOL_NUM=1 ;
  11:  !move to robot home position ;
  12:J P[1] 100% FINE    ;
  13:  !initialize communication ;
  14:  !parameters(initialization is ;
  15:  !required only once) ;
  16:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  17:  !move to image-capturing position ;
  18:L P[2] 1000mm/sec FINE    ;
  19:  !trigger Mech-Viz project ;
  20:  CALL MM_START_VIZ(2,10) ;
  21:  !get planned path, 1st argument ;
  22:  !(1) means getting pose in JPs ;
  23:  CALL MM_GET_VIZ(1,51,52,53) ;
  24:  !check whether planned path has ;
  25:  !been got from Mech-Viz ;
  26:  !successfully ;
  27:  IF R[53]<>2100,JMP LBL[99] ;
  28:  !save waypoints of the planned ;
  29:  !path to local variables one ;
  30:  !by one ;
  31:  CALL MM_GET_JPS(1,60,70,80) ;
  32:  CALL MM_GET_JPS(2,61,71,81) ;
  33:  CALL MM_GET_JPS(3,62,72,82) ;
  34:  !follow the planned path to pick ;
  35:  !move to approach waypoint ;
  36:  !of picking ;
  37:J PR[60] 50% FINE    ;
  38:  !move to picking waypoint ;
  39:J PR[61] 10% FINE    ;
  40:  !add object grasping logic here, ;
  41:  !such as "DO[1]=ON" ;
  42:  PAUSE ;
  43:  !move to departure waypoint ;
  44:  !of picking ;
  45:J PR[62] 50% FINE    ;
  46:  !move to intermediate waypoint ;
  47:  !of placing ;
  48:J P[3] 50% CNT100    ;
  49:  !move to approach waypoint ;
  50:  !of placing ;
  51:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  52:  !move to placing waypoint ;
  53:L P[4] 300mm/sec FINE    ;
  54:  !add object releasing logic here, ;
  55:  !such as "DO[1]=OFF" ;
  56:  PAUSE ;
  57:  !move to departure waypoint ;
  58:  !of placing ;
  59:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  60:  !move back to robot home position ;
  61:J P[1] 100% FINE    ;
  62:  END ;
  63:   ;
  64:  LBL[99:vision error] ;
  65:  !add error handling logic here ;
  66:  !according to different ;
  67:  !error codes ;
  68:  !e.g.: status=2038 means no ;
  69:  !point cloud in ROI ;
  70:  PAUSE ;

上記のサンプルプログラムの処理流れは、下図の通りです。

sample2

下表は上記のプログラムのコードとその説明です。コマンド名のリンクをクリックすることで、その詳細な説明を確認できます。

処理流れ コートと説明

座標系設定

   7:  !set current uframe NO. to 0 ;
   8:  UFRAME_NUM=0 ;
   9:  !set current tool NO. to 1 ;
  10:  UTOOL_NUM=1 ;
  • UFRAME_NUM=0:現在選択されているユーザー座標系番号を0(ワールド座標系)に設定します。

  • UTOOL_NUM=1:現在選択されているツール座標系番号を1に設定します(ユーザーは事前に1番ツール座標系を設定する必要があります)。

上記の2つのコマンドは、現在選択されているユーザー座標系とツール座標系を設定することを意味します。

Home位置に移動

  11:  !move to robot home position ;
  12:J P[1] 100% FINE    ;
  • J:ロボットの関節移動コマンドで、ロボットが円弧型の経路に沿って指定された位置に移動することを意味します。

  • P[1]:ロボットが移動する目標位置を指定します。この場合、ティーチング法で設定されたHome位置を指します。通常、この位置はロボットがワークや周辺機器から安全な位置に離れている場所です。

  • 100%:最大移動速度に対する相対的な移動速度の割合を示します。

  • FINE:ロボットが目標位置に到達した際に、少し停止してから次の目標位置に移動することを意味します。

このコマンドは、ロボットが関節移動の方式で設定されたHome位置に移動することを意味します。

Home位置(P[1])を事前に設定する必要があります。詳細については、キャリブレーションの開始点を設定 をご参照ください。

通信初期化

  13:  !initialize communication ;
  14:  !parameters(initialization is ;
  15:  !required only once) ;
  16:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  • MM_INIT_SKT:通信を初期化するためのコマンド。

  • '8':ロボットのポート番号。

  • '127.0.0.1':IPCのIPアドレス。

  • 50000:IPCのポート番号。

  • 5:通信のタイムアウト待機時間(5分間)。

このコマンドは、ロボットが MM_INIT_SKT コマンドを使用して、通信対象(IPC)のIPアドレス、ポート番号、およびタイムアウト待機時間を指定し、ビジョンシステムとの接続を確立することを意味します。

実際の状況に基づいてIPCのIPアドレスやポート番号を変更し、ビジョンシステムで設定されたパラメータと一致するようにする必要があります。

撮影位置に移動

  17:  !move to image-capturing position ;
  18:L P[2] 1000mm/sec FINE    ;
  • L:ロボットの直線移動コマンドで、ロボットが指定された位置まで直線的に移動することを意味します。

  • P[2]:ロボットが移動する目標位置を指定します。この場合、ティーチング法で設定された画像撮影位置を指します。撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。

このコマンドは、ロボットが直線移動の方式で設定された撮影位置に移動することを意味し、移動速度は1000mm/秒です。

撮影位置(P[2])を事前に設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。

Mech-Vizプロジェクトをトリガー

  19:  !trigger Mech-Viz project ;
  20:  CALL MM_START_VIZ(2,10) ;
  • MM_START_VIZ:Mech-Vizプロジェクトの実行をトリガーするためのコマンド。

  • 2:位置レジスタPR[10]で示される関節角度データをMech-Vizプロジェクトに送信します。

  • 10:位置レジスタPR[10]の番号。このレジスタはカスタマイズされた関節角度データを保存します。関節角度は、事前にティーチング法で設定する必要があります。把持経路を計画する際に、Mech-Vizプロジェクトの仮想ロボットはこの関節角度から最初の経路点に移動します。

このコマンドは、ロボットがビジョンシステムをトリガーしてMech-Vizプロジェクトを実行し、Mech-VizがMech-Visionから出力されたビジョン結果に基づいて把持経路を計画することを意味します。

計画された経路を取得

  21:  !get planned path, 1st argument ;
  22:  !(1) means getting pose in JPs ;
  23:  CALL MM_GET_VIZ(1,51,52,53) ;
  • MM_GET_VIZ:Mech-Vizが計画された経路を取得するためのコマンド。

  • 1:取得した経路点の位置姿勢を関節角度の形式として指定します。

  • 51:数値レジスタR[51]の番号。このレジスタはビジョンシステムから返された経路点の数を保存します。

  • 52:数値レジスタR[52]の番号。このレジスタは、「ビジョン処理による移動」の経路点(把持点)が経路全体における位置番号を保存します。

  • 53:数値レジスタR[53]の番号。このレジスタはコマンド実行のステータスコードを保存します。

このコマンドは、ロボットがMech-Vizプロジェクトから返された計画経路を取得することを意味します。

返された計画経路はロボットのメモリに保存されるため、この時点ではユーザーが計画経路を直接取得することはできません。その後の「計画された経路を保存」コマンドを実行することで、経路を取得することができます。
  24:  !check whether planned path has ;
  25:  !been got from Mech-Viz ;
  26:  !successfully ;
  27:  IF R[53]<>2100,JMP LBL[99] ;
  • 「IF A,JMP B」:条件Aが成立した場合、プログラムはBにジャンプして実行を続けます。

  • <>:等しくないことを意味します。

上記のコードは、ステータスコードR[53]が2100の場合、ロボットがすべての計画された経路を正常に取得することを意味し、それ以外の場合はビジョンシステムに異常が発生し、プログラムはLBL[99]にジャンプして実行を続けることを意味します。以下にLBL[99]のコードを示します。

  64:  LBL[99:vision error] ;
  65:  !add error handling logic here ;
  66:  !according to different ;
  67:  !error codes ;
  68:  !e.g.: status=2038 means no ;
  69:  !point cloud in ROI ;
  70:  PAUSE ;

ユーザーは、特定のエラーコードに応じて適切な処理を行うことが可能です。本サンプルでは、すべてのエラーコードに対して同一の処理を行い、PAUSEコマンドを使用してプログラムの実行を停止しています。

計画された経路を保存

  28:  !save waypoints of the planned ;
  29:  !path to local variables one ;
  30:  !by one ;
  31:  CALL MM_GET_JPS(1,60,70,80) ;
  32:  CALL MM_GET_JPS(2,61,71,81) ;
  33:  CALL MM_GET_JPS(3,62,72,82) ;
  • MM_GET_JPS:計画された経路を保存するためのコマンド。

  • 1:最初の経路点を保存します。

  • 60:位置レジスタPR[60]の番号。このレジスタは最初の経路点の関節角度を保存します。

  • 70:数値レジスタR[70]の番号。このレジスタは最初の経路点に対応するラベルを保存します。

  • 80:数値レジスタR[80]の番号。このレジスタは最初の経路点に対応するロボットハンド番号を保存します。

「CALL MM_GET_JPS(1,60,70,80)」コマンドは、最初の経路点の関節角度、ラベル、およびロボットハンド番号をそれぞれ指定されたレジスタに保存することを意味します。

このサンプルでは、Mech-Vizで計画された経路に3つの経路点が含まれていると仮定しています。最初の経路点は「把持のアプローチ点(PR[60])」、2番目の経路点は「把持点(PR[61])」、3番目の経路点は「把持の離れる点(PR[62])」です。Mech-Vizプロジェクトで作成されたワークフローに応じて、プログラムを適切に変更し、経路を保存する必要があります。

把持のアプローチ点に移動

  34:  !follow the planned path to pick ;
  35:  !move to approach waypoint ;
  36:  !of picking ;
  37:J PR[60] 50% FINE    ;

ロボットが把持のアプローチ点(PR[60]が表す位置)に移動します。

把持点に移動

  38:  !move to picking waypoint ;
  39:J PR[61] 10% FINE    ;

ロボットが把持点(PR[61]が表す位置)に移動します。

DO設定による把持

  40:  !add object grasping logic here, ;
  41:  !such as "DO[1]=ON" ;
  42:  PAUSE ;

ロボットが把持点に到達した後、DOコマンド(例えば「DO[1]=ON」)を設定して、ロボットハンドを制御し、ワークを把持します。実際の状況に応じてDO設定を調整する必要があります。

PAUSEコマンドはプログラムの実行を停止します。DO設定コマンドが設定されている場合、このPAUSEコマンドは削除できます。

把持の離れる点に移動

  43:  !move to departure waypoint ;
  44:  !of picking ;
  45:J PR[62] 50% FINE    ;

ロボットが把持の離れる点(PR[62]が表す位置)に移動します。

中間点に移動

  46:  !move to intermediate waypoint ;
  47:  !of placing ;
  48:J P[3] 50% CNT100    ;
  • P[3]:ロボットが移動する目標位置を指定します。この場合、中間点を指します。

  • CNT:ロボットは目標位置に近づきますが、その位置で停止せず、次の位置で停止します。その後の数字は、ロボットが目標位置にどれだけ近づくかを示し、数値が大きいほど目標位置から遠くなります。

このコマンドは、ロボットが関節移動の方式で、把持の離れる点と配置のアプローチ点の間の中間点に移動することを意味します。

  • 中間点を追加することで、ロボットの移動がスムーズになり、不要な衝突を避けることができます。実際の状況に応じて複数の中間点を追加することが可能です。

  • 中間点(P[3])を事前に設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。

配置のアプローチ点に移動

  49:  !move to approach waypoint ;
  50:  !of placing ;
  51:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  • P[4]:ロボットが移動する目標位置を指定します。この場合、配置点を指します。配置点(P[4])を事前に設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。

  • Tool_Offset,PR[2]:ロボットは配置点(P[4])を基準に、指定されたPR[2]レジスタに従ってオフセットを適用します。ここでは、PR[2]のZ軸の値のみを設定する必要があります。例えば、Z軸の値を-100、他の値を0に設定することで、配置点のZ軸の負方向に100mmの位置に移動します。つまり、ロボットは配置点の上方100mmの位置に移動し、配置のアプローチ点に到達します。

アプローチ点を追加することで、ロボットが移動する際にシーンの物体(コンテナなど)と衝突するのを防ぐことができます。実際の状況に応じてPR[2]の設定を変更し、ロボットが移動する際に衝突がないことを確認してください。

配置点に移動

  52:  !move to placing waypoint ;
  53:L P[4] 300mm/sec FINE    ;

ロボットが配置のアプローチ点から配置点に移動します。

DO設定による配置

  54:  !add object releasing logic here, ;
  55:  !such as "DO[1]=OFF" ;
  56:  PAUSE ;

ロボットが配置点に到達した後、DOコマンド(例えば「DO[1]=OFF」)を設定して、ロボットハンドを制御し、ワークを配置します。実際の状況に応じてDO設定を調整する必要があります。

PAUSEコマンドはプログラムの実行を停止します。DO設定コマンドが設定されている場合、このPAUSEコマンドは削除できます。

配置の離れる点に移動

  57:  !move to departure waypoint ;
  58:  !of placing ;
  59:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;

ロボットは配置点の上方の所定位置に移動し、これを配置の離れる点と呼びます。

離れる点を追加することで、ロボットが移動する際にシーン内の物体(コンテナなど)との衝突を防ぐことができます。実際の状況に応じてPR[2]の設定を変更し、ロボットが離れる際に衝突がないことを確認してください。

Home位置に移動

  60:  !move back to robot home position ;
  61:J P[1] 100% FINE    ;

ロボットが配置の離れる点からHome位置に戻ります。

Mech-Mindは、お客様のプライバシーを重視しています

このサイトでは最高の体験を提供するために Cookie を使用しています。サイトの閲覧を続ける場合、Cookie の使用に同意したことになります。「拒否する」を選択すると、このサイトを訪れた際に追跡や記憶が行われないように単独の Cookie が使用されます。