サンプルプログラム12:MM_S12_Viz_ForLoop
プログラム概要
機能 |
ロボットがMech-Vizプロジェクトをトリガーして実行し、計画された経路を取得します。その後、ループで計画された経路を保存し、把持および配置を実行します。 |
ファイル場所 |
Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある |
必要なプロジェクト |
Mech-VisionとMech-Vizプロジェクト |
使用前提 |
|
このサンプルプログラムは参考用です。ユーザーは実際の状況に応じて、このプログラムを基に変更を加える必要があります。このプログラムをそのまま使用しないでください。 |
プログラム説明
以下はMM_S12_Viz_ForLoopサンプルプログラムのコードと関連する説明です。
MM_S2_Viz_Basicは計画された経路点を一つずつ保存しますが、このサンプル(太字部分のコード)はループを使用して計画された経路点を保存します。そのため、MM_S2_Viz_Basicサンプルと同じ部分のコードについては、以下で再度説明することはありません(詳細は MM_S2_Viz_Basicサンプルの説明 をご参照ください)。 |
NOP
'--------------------------------
'FUNCTION: trigger Mech-Viz
'project and get planned path,get
'poses using for-loop structure
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P071 P071
SUB P072 P072
SUB P073 P073
'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 Mech-Viz project
CALL JOB:MM_START_VIZ ARGF"2;30"
'get planned path, 1st argument
'(1) means getting pose in JPs
CALL JOB:MM_GET_VIZDATA ARGF"1;51;52;53"
'check whether planned path has
'been got from Mech-Viz
'successfully
IFTHENEXP I053<>2100
'add error handling logic here
'according to different error
'codes
'e.g.: I053=2038 means no
'point cloud in ROI
PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save waypoints of planned path
'to local variables using
'for-loop structure
SET I001 1
SET I002 71
SET I003 61
SET I004 81
*CYCLE
VAL2STR S001 I001
VAL2STR S002 I002
VAL2STR S003 I003
VAL2STR S004 I004
CHR$ S005 59
CAT$ S000 S001 S005
CAT$ S000 S000 S002
CAT$ S000 S000 S005
CAT$ S000 S000 S003
CAT$ S000 S000 S005
CAT$ S000 S000 S004
CALL JOB:MM_GET_JPS ARGFS000
INC I001
INC I002
INC I003
INC I004
IFTHENEXP I001⇐I051
JUMP *CYCLE
ENDIF
'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0
'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
MOVJ P073 VJ=50.00 PL=0
'move to intermediate waypoint of
'placing
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00003 V=166.6 PL=0
'move to placing waypoint
MOVL C00004 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00005 V=166.6 PL=0
'move back to robot home position
MOVJ C00006 VJ=50.00
END
上記のサンプルプログラムの処理流れは、下図の通りです。
下表は、ループで計画された経路を保存するコードとその説明です。コマンド名のリンクをクリックすることで、その詳細な説明を確認できます。
処理流れ | コートと説明 |
---|---|
ループで計画された経路を保存 |
SETコマンドは、他のプログラミング言語の代入文と似ています。上記のコードは、変数I001、I002、I003、I004をそれぞれ1、71、61、81に代入することを意味します。
上記のコードは、プログラムが「*CYCLE」と「JUMP *CYCLE」の間のコードを繰り返し実行することを意味します。
VAL2STRコマンドは、他のデータ型の変数を文字列型の変数に変換することを意味します。例えば、I001の変数値が整数型の1である場合、「VAL2STR S001 I001」は、整数型の1を文字列型の"1"に変換しすることを意味します。この時点でS001の変数値は"1"になります。したがって、整数型の変数I001、I002、I003、I004がそれぞれ1、71、61、81である場合、プログラムは上記のコードを実行した後、S001、S002、S003、S004がそれぞれ"1"、"71"、"61"、"81"となります。
上記のコードは、文字コード59の文字「;」(英語セミコロン)をS005に保存することを意味します。
CAT$コマンドは、他のプログラミング言語における文字列結合の操作に似ています。例えば、S001が文字列"1"、S005が文字列";"である場合、「CAT$ S000 S001 S005」は、"1"と";"を結合して"1;"にし、それをS000に代入することを意味します。この時点でS000の変数値は"1;"になります。プログラムが上記のコマンドを実行した後、S000の変数値は"1;71;61;81"になります。
S000の変数値が"1;71;61;81"である場合、上記のコマンドは「CALL JOB:MM_GET_JPS ARGF"1;71;61;81"」に相当します。
INCコマンドは、指定された変数の値を1増加させることを意味します。上記のコマンドは、I001、I002、I003、I004の変数値をそれぞれ1増加させることを意味します。
I001はループ回数を表します。I051は MM_GET_VIZDATA コマンドの2番目のパラメータに対応する変数で、これはビジョンシステムから返された経路点の数を示します。 このサンプルでは、計画された経路に3つの経路点(把持のアプローチ点、把持点、把持の離れる点)があると仮定すると、I051は3となります。上記のループは次の2つのコマンドに相当します。
|