サンプルプログラム1:MM_S1_Vis_Basic

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

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

プログラム概要

機能

ロボットがMech-Visionプロジェクトをトリガーして実行し、その後ビジョン結果を取得して、把持および配置を実行します。

ファイル場所

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

必要なプロジェクト

Mech-Visionプロジェクト

使用前提

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

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

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

プログラム説明

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

NOP
'--------------------------------
'FUNCTION: trigger Mech-Vision
'project and get vision result
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P070 P070
SUB P071 P071
'set 100mm to z of P070
SETE P070 (3) 100000
'move to robot home position
MOVJ C00000 VJ=50.00
'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
'open socket connection
CALL JOB:MM_OPEN_SOCKET
'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to picking waypoint
MOVL P071 V=50.0 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0
'move to placing waypoint
MOVL C00005 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0
'move back to robot home position
MOVJ C00007 VJ=50.00
END

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

sample1

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

処理流れ コートと説明

変数初期化

'clear I50 to I69
CLEAR I050 20
  • CLEAR:データをクリアするためのコマンド。

  • I050:番号が50の整数型変数(I変数)からクリアを開始することを指定します。

  • 20:クリアする変数の数を20個に指定します。

このコマンドは、整数型変数I050からI069(合計20個)の値をすべて0にクリアすることを意味します。

'initialize p variables
SUB P070 P070
SUB P071 P071
  • SUB:減算コマンド。

  • 最初のP070:減算の被減数として位置型変数(P変数)P070を指定します。また、演算結果もP070に保存されます。

  • 2番目のP070:減数として位置型変数P070を指定します。

上記の2つのコマンドは、位置型変数P070とP071をそれぞれ0に設定することを意味します。

'set 100mm to z of P070
SETE P070 (3) 100000
  • SETE:変数データを設定するためのコマンド。

  • P070:データを設定する変数としてP070を指定します。

  • 3:変数の3番目のパラメータ(ここではP070のZ軸データを指す)を設定します。

  • 100000:設定するデータ値を指定します。

上記のコマンドは、位置型変数P070のZ軸データを100000μm(100mm)に設定することを意味します。

Home位置に移動

'move to robot home position
MOVJ C00000 VJ=50.00
  • MOVJ:関節移動コマンド。

  • C00000:ティーチング法で設定されたロボットの位置番号。

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

    • ティーチング後、ロボット軸のティーチング位置が無条件でC00000に書き込まれます。このティーチング位置は編集できません。

    • ティーチペンダントの画面上には、この番号(C00000)は表示されません。

  • VJ=50.00:関節速度を指定します。関節速度は、最大速度に対する比率で表されます。

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

通信初期化

'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
  • CALL:指定されたコマンド(またはプログラム)を呼び出します。

  • JOB:呼び出すコマンド(またはプログラム)を指定します。

  • MM_INIT_SOCKET:通信を初期化するためのコマンド。

  • ARGF:ティーチペンダントの画面上では英字括弧で表示されます。

  • 192.168.170.22:IPCのIPアドレス。

  • 50000:IPCのポート番号。

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

このコマンドは、ロボットが MM_INIT_SOCKET コマンドを使用して、通信対象(IPC)のIPアドレス(192.168.170.22)、ポート番号(50000)、およびタイムアウト待機時間(1分間)を指定することを意味します。

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

撮影位置に移動

'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
  • C00001:ティーチング法で設定されたロボットの位置番号。C00001(撮影位置)を事前に設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。

  • PL=0:位置レベルを0に指定します。位置レベルとは、ロボットがティーチングされた位置にどの程度接近するかを示すもので、値の範囲は0~8です。値が小さいほど、位置により近くなります。

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

通信確立

'open socket connection
CALL JOB:MM_OPEN_SOCKET

ロボットは MM_OPEN_SOCKET コマンドを使用して、ビジョンシステムとの間のTCPプロトコル通信接続を確立します。

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

'trigger NO.1 Mech-Vision project
CALL JOB:MM_START_VIS ARGF"1;0;2;30"
  • MM_START_VIS:Mech-Visionプロジェクトの実行をトリガーするためのコマンド。

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

  • 0:Mech-Visionプロジェクトがすべてのビジョンポイントを返すことを期待します。

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

  • 30:変数Pの番号。この変数は、カスタマイズされた関節角度データを保存します。本サンプルでは、この関節角度データは実際の用途には使用されていません。

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

ビジョン結果を取得

'get vision result from NO.1
'Mech-Vision project
CALL JOB:MM_GET_VISDATA ARGF"1;51;52"
  • MM_GET_VISDATA:ビジョン結果を取得するためのコマンド。

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

  • 51:変数Iの番号。この変数は取得されたビジョンポイントの数を保存します。

  • 52:変数Iの番号。この変数はコマンド実行のステータスコードを保存します。

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

返されたビジョン結果はロボットのメモリに保存されるため、この時点ではユーザーがビジョン結果を直接取得することはできません。その後の「ビジョン結果を保存」コマンドを実行することで、結果を取得することができます。
'check whether vision result has
'been got from Mech-Vision
'successfully
IFTHENEXP I052<>1100
	'add error handling logic here
	'according to different error
	'codes
	'e.g.: I052=1003 means no point
	'cloud in ROI
	'e.g.: I052=1002 means no
	'vision result
	 PAUSE
ENDIF
  • IFTHENEXP A …​ ENDIF:条件Aが成立する場合、プログラムはIFTHENEXPとENDIFの間のコードを実行します。

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

上記のコードは、ステータスコードI052が1100の場合、ロボットがすべてのビジョン結果を正常に取得することを意味し、それ以外の場合はビジョンシステムに異常が発生し、プログラムはIFTHENEXPとENDIFの間のコードを実行することを意味します。ユーザーは、特定のエラーコードに応じて適切な処理を行うことが可能です。本サンプルでは、すべてのエラーコードに対して同一の処理を行い、PAUSEコマンドを使用してプログラムの実行を一時停止しています。

通信接続を切断

'close socket connection
CALL JOB:MM_CLOSE_SOCKET

ロボットは MM_CLOSE_SOCKET コマンドを使用して、ビジョンシステムとの間のTCPプロトコル通信接続を切断します。

ビジョン結果を保存

'save first vision point data to
'local variables
CALL JOB:MM_GET_POSE ARGF"1;71;61;62"
  • MM_GET_POSE:ビジョン結果を保存するためのコマンド。

  • 1:最初のビジョンポイントを保存します。

  • 71:変数Pの番号。この変数は最初のビジョンポイント(把持点)のツール位置姿勢を保存します。

  • 61:変数Iの番号。この変数は最初のビジョンポイントに対応するラベルを保存します。

  • 62:変数Iの番号。この変数は最初のビジョンポイントに対応するロボットハンド番号を保存します。

このコマンドは、最初のビジョンポイントのツール位置姿勢、ラベル、およびロボットハンド番号をそれぞれ指定された変数に保存することを意味します。

中間点に移動

'move to intermediate waypoint of
'picking
MOVJ C00002 VJ=50.00

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

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

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

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

'move to approach waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF
  • SFTON P070:指定されたオフセット(P070、Z軸データが100mm)に基づいて並進移動を開始します。

  • MOVL P071 V=166.6 PL=0:並進移動、つまりロボットがP071に対してオフセット位置(P070)に直線移動する際に、TCPの速度を166.6mm/s、位置レベルを0に指定します。

  • SFTOF: 並進移動を終了します。

このコマンドはロボットが把持点(P071)の上方100mmの位置に直線的に移動することを意味します。

アプローチ点を追加することで、ロボットが移動する際にシーンの物体(コンテナなど)と衝突するのを防ぐことができます。実際の状況に応じてZ軸方向のオフセット値(「SETE P070 (3) 100000」)を変更して、移動中に衝突しないことを確認してください。

把持点に移動

'move to picking waypoint
MOVL P071 V=50.0 PL=0

ロボットは直線移動の方式で、把持のアプローチ点から把持点に移動します。

DO設定による把持

'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE

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

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

把持の離れる点に移動

'move to departure waypoint of
'picking
SFTON P070
MOVL P071 V=166.6 PL=0
SFTOF

ロボットは把持点の上方100mmの位置に移動し、これを把持の離れる点と呼びます。

離れる点を追加することで、ロボットが移動する際にシーン内の物体(コンテナなど)との衝突を防ぐことができます。実際の状況に応じてZ軸方向のオフセット値(SETE P070 (3) 100000)を変更し、離れる際に衝突がないことを確認してください。

中間点に移動

'move to intermediate waypoint of
'placing
MOVJ C00003 VJ=50.00

ロボットは把持の離れる点と配置のアプローチ点の間の中間点に移動します。

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

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

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

'move to approach waypoint of
'placing
MOVL C00004 V=166.6 PL=0

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

  • アプローチ点を追加することで、ロボットが移動する際にシーンの物体(コンテナなど)と衝突するのを防ぐことができます。

  • 事前にC00004(配置のアプローチ点)を設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。

配置点に移動

'move to placing waypoint
MOVL C00005 V=50.0 PL=0

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

  • 配置点は他の作業セルや人員、機器から十分な安全距離を確保し、ロボットの最大可動範囲を超えないようにする必要があります。

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

DO設定による配置

'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE

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

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

配置の離れる点に移動

'move to departure waypoint of
'placing
MOVL C00006 V=166.6 PL=0

ロボットが配置点から配置の離れる点に移動します。

  • 離れる点を追加することで、ロボットが移動する際にシーン内の物体(コンテナなど)との衝突を防ぐことができます。

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

Home位置に移動

'move back to robot home position
MOVJ C00007 VJ=50.00

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

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

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

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