サンプルプログラム3:MM_S3_Vis_Path

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

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

プログラム概要

機能

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

ファイル場所

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

必要なプロジェクト

Mech-Visionプロジェクト

Mech-Visionプロジェクトには 経路計画 ステップを含め、出力 ステップの ポータタイプ パラメータを「事前定義済み(ロボット経路)」に設定する必要があります。

使用前提

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

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

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

プログラム説明

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

   1:  !-------------------------------- ;
   2:  !FUNCTION: trigger Mech-Vision ;
   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 NO.1 Mech-Vision project ;
  20:  CALL MM_START_VIS(1,0,2,10) ;
  21:  !get planned path from NO.1 ;
  22:  !Mech-Vision project; 2nd ;
  23:  !argument (1) means getting pose ;
  24:  !in JPs ;
  25:  CALL MM_GET_VISP(1,1,51,52,53) ;
  26:  !check whether planned path has ;
  27:  !been got from Mech-Vision ;
  28:  !successfully ;
  29:  IF R[53]<>1103,JMP LBL[99] ;
  30:  !save waypoints of the planned ;
  31:  !path to local variables one ;
  32:  !by one ;
  33:  CALL MM_GET_JPS(1,60,70,80) ;
  34:  CALL MM_GET_JPS(2,61,71,81) ;
  35:  CALL MM_GET_JPS(3,62,72,82) ;
  36:  !follow the planned path to pick ;
  37:  !move to approach waypoint ;
  38:  !of picking ;
  39:J PR[60] 50% FINE    ;
  40:  !move to picking waypoint ;
  41:J PR[61] 10% FINE    ;
  42:  !add object grasping logic here, ;
  43:  !such as "DO[1]=ON" ;
  44:  PAUSE ;
  45:  !move to departure waypoint ;
  46:  !of picking ;
  47:J PR[62] 50% FINE    ;
  48:  !move to intermediate waypoint ;
  49:  !of placing ;
  50:J P[3] 50% CNT100    ;
  51:  !move to approach waypoint ;
  52:  !of placing ;
  53:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  54:  !move to placing waypoint ;
  55:L P[4] 300mm/sec FINE    ;
  56:  !add object releasing logic here, ;
  57:  !such as "DO[1]=OFF" ;
  58:  PAUSE ;
  59:  !move to departure waypoint ;
  60:  !of placing ;
  61:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  62:  !move back to robot home position ;
  63:J P[1] 100% FINE    ;
  64:  END ;
  65:   ;
  66:  LBL[99:vision error] ;
  67:  !add error handling logic here ;
  68:  !according to different ;
  69:  !error codes ;
  70:  !e.g.: status=1003 means no ;
  71:  !point cloud in ROI ;
  72:  !e.g.: status=1002 means no ;
  73:  !vision results ;
  74:  PAUSE ;

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

sample3

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

処理流れ コートと説明

座標系設定

   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-Visionプロジェクトをトリガー

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

  • 1:Mech-Visionプロジェクト番号。

  • 0:Mech-Visionプロジェクトがすべての経路点を返すことを期待します。

  • 2:ロボットの現在のフランジ位置姿勢をMech-Visionプロジェクトに送信します。

  • 10:位置レジスタPR[10]の番号。このレジスタはカスタマイズされた関節角度データを保存します。本サンプルではこのデータに実際の用途はありませんが、位置レジスタの番号を必ず設定する必要があります。

このコマンドは、ロボットがビジョンシステムをトリガーして番号1のMech-Visionプロジェクトを実行し、Mech-Visionプロジェクトがすべての経路点を返すことを期待することを意味します。

計画された経路を取得

  21:  !get planned path from NO.1 ;
  22:  !Mech-Vision project; 2nd ;
  23:  !argument (1) means getting pose ;
  24:  !in JPs ;
  25:  CALL MM_GET_VISP(1,1,51,52,53) ;
  • MM_GET_VISP:Mech-Visionが計画された経路を取得するためのコマンド。

  • 最初の1:Mech-Visionプロジェクト番号を指定します。

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

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

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

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

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

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

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

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

  66:  LBL[99:vision error] ;
  67:  !add error handling logic here ;
  68:  !according to different ;
  69:  !error codes ;
  70:  !e.g.: status=1003 means no ;
  71:  !point cloud in ROI ;
  72:  !e.g.: status=1002 means no ;
  73:  !vision results ;
  74:  PAUSE ;

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

計画された経路を保存

  30:  !save waypoints of the planned ;
  31:  !path to local variables one ;
  32:  !by one ;
  33:  CALL MM_GET_JPS(1,60,70,80) ;
  34:  CALL MM_GET_JPS(2,61,71,81) ;
  35:  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-Visionで計画された経路に3つの経路点が含まれていると仮定しています。最初の経路点は「把持のアプローチ点(PR[60])」、2番目の経路点は「把持点(PR[61])」、3番目の経路点は「把持の離れる点(PR[62])」です。Mech-Visionプロジェクトに応じて、プログラムを適切に変更し、経路を保存する必要があります。

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

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

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

把持点に移動

  40:  !move to picking waypoint ;
  41:J PR[61] 10% FINE    ;

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

DO設定による把持

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

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

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

把持の離れる点に移動

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

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

中間点に移動

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

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

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

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

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

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

  51:  !move to approach waypoint ;
  52:  !of placing ;
  53: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]の設定を変更し、ロボットが移動する際に衝突がないことを確認してください。

配置点に移動

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

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

DO設定による配置

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

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

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

配置の離れる点に移動

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

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

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

Home位置に移動

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

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

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

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