サンプルプログラム7:MM_S7_Viz_SwitchTCP

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

■ 最新版をご利用される場合は、弊社ホームページよりダウンロードが可能です。ダウンロードにはパスワードが必要となりますので、サポート窓口までお問い合わせください。

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

プログラム概要

機能

ロボットはMech-Vizプロジェクトをトリガーして実行し、計画された経路を取得します。その後、把持点のロボットハンド番号に基づいて対応するロボットハンドを切り替え、把持および配置を実行します。

ファイル場所

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

必要なプロジェクト

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

使用前提

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

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

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

プログラム説明

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

このサンプルは、MM_S2_Viz_Basicサンプルに比べて、ロボットハンド番号に基づいてロボットハンドを切り替える機能(太字部分のコード)のみが追加されています。そのため、MM_S2_Viz_Basicサンプルと同じ部分のコードについては、以下で再度説明することはありません(詳細は MM_S2_Viz_Basicサンプルの説明 をご参照ください)。
DEF  MM_S7_Viz_SwitchTCP ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Viz project and get
; planned path, switch TCP according to the label
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   ;set current tool no. to 1
   BAS(#TOOL,1)
   ;set current base no. to 0
   BAS(#BASE,0)
   ;move to robot home position
PTP HOME Vel=100 % DEFAULT
   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
   ;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
   ;trigger Mech-Viz project
   MM_Start_Viz(2,init_jps)
   ;get planned path, 1st argument (1) means getting pose in JPs
   MM_Get_VizData(2,pos_num,vis_pos_num,status)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status<> 2100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=2038 means no point cloud in ROI
      halt
   ENDIF
   ;save waypoints of the planned path to local variables one by one
   MM_Get_Pose(1,Xpick_point1,label[1],toolid[1])
   MM_Get_Pose(2,Xpick_point2,label[2],toolid[2])
   MM_Get_Pose(3,Xpick_point3,label[3],toolid[3])
   ;switch TCP according to the received toolid
   ;reset tool signals according to received toolid
   switch toolid[vis_pos_num]
      CASE 1
         TOOL_DATA[1]=tool_1
         ;reset tool signal
      CASE 2
         TOOL_DATA[1]=tool_2
         ;reset tool signal
      DEFAULT
         ;add handling logic here if the toolid is invalid
         ;reset tool signal
         halt
   endswitch
   ;follow the planned path to pick
   ;move to approach waypoint of picking
LIN pick_point1 Vel=1 m/s CPDAT7 Tool[1] Base[0]
   ;move to picking waypoint
LIN pick_point2 Vel=0.3 m/s CPDAT8 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   switch toolid[vis_pos_num]
      CASE 1
         halt
         ;open tool signal
      CASE 2
         halt
         ;open tool signal
      DEFAULT
         halt
   endswitch
   ;move to departure waypoint of picking
LIN pick_point3 Vel=1 m/s CPDAT9 Tool[1] Base[0]
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[0] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[0] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 Tool[0] Base[0]
   ;add object releasing logic here, such as "$OUT[1]=FALSE"
   switch toolid[vis_pos_num]
      CASE 1
         halt
         ;reset tool signal
      CASE 2
         halt
         ;reset tool signal
      DEFAULT
         halt
   endswitch
   ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[0] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
END

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

sample7

下表は追加されたコードとその説明です。

処理流れ コートと説明

計画された経路を取得

;get planned path, 1st argument (1) means getting pose in JPs
MM_Get_VizData(2,pos_num,vis_pos_num,status)
  • MM_Get_VizData:Mech-Vizで計画された経路を取得するためのコマンド。

  • 2:取得した経路点の位置姿勢をツール位置姿勢の形式として指定します。

  • pose_num:この変数はビジョンシステムから返された経路点の数を保存します。

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

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

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

返された計画経路はロボットのメモリに保存されるため、この時点ではユーザーが計画経路を直接取得することはできません。その後の「計画された経路を保存」コマンドを実行することで、経路を取得することができます。

計画された経路を保存

;save waypoints of the planned path to local variables one by one
MM_Get_Pose(1,Xpick_point1,label[1],toolid[1])
MM_Get_Pose(2,Xpick_point2,label[2],toolid[2])
MM_Get_Pose(3,Xpick_point3,label[3],toolid[3])
  • MM_Get_Pose:計画された経路を保存するためのコマンド。

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

  • Xpick_point1:この変数は最初の経路点のツール位置姿勢を保存します。

  • label[1]:この変数は最初の経路点に対応するラベルを保存します。

  • toolid[1]:この変数は最初の経路点に対応するロボットハンド番号を保存します。

「MM_Get_Pose(1,Xpick_point1,label[1],toolid[1]」コマンドは、最初の経路点のツール位置姿勢、ラベル、およびロボットハンド番号をそれぞれ指定された変数に保存することを意味します。

  • Mech-Vizプロジェクトで作成されたワークフローに応じて、プログラムを適切に変更し、経路を保存する必要があります。このサンプルでは、Mech-Vizで計画された経路に3つの経路点が含まれていると仮定しています。最初の経路点は「把持のアプローチ点(Xpick_point1)」、2番目の経路点は「把持点(Xpick_point2)」、3番目の経路点は「把持の離れる点(Xpick_point3)」です。また、vis_pose_numは把持点が経路計画における位置番号を示すため、toolid[vis_pos_num]はtoolid[2]と同様です。いずれもロボットが把持点(Xpick_point2)まで移動する際に使用するロボットハンド番号を表すことができます。

  • このサンプルでは、後続でtoolid[vis_pos_num]の値に基づいてロボットハンドを切り替えるため、ユーザーが作成したMech-Vizプロジェクトには「ロボットハンドを切り替え」ステップが含まれ、そのステップパラメータが正しく設定されている必要があります。

    • 「ロボットハンドを切り替え」ステップは、「ビジョン処理の結果をチェック」ステップの 結果あり 出口の後に接続する必要があります。

    • 「ロボットハンドを切り替え」ステップの 実行モード パラメータを 適切なロボットハンドに自動的に切り替える に設定する必要があります。

ロボットハンド番号に基づいてロボットハンドを切り替える

;switch TCP according to the received toolid
;reset tool signals according to received toolid
switch toolid[vis_pos_num]
   CASE 1
      TOOL_DATA[1]=tool_1
      ;reset tool signal
   CASE 2
      TOOL_DATA[1]=tool_2
      ;reset tool signal
   DEFAULT
      ;add handling logic here if the toolid is invalid
      ;reset tool signal
      halt
endswitch

toolid[vis_pos_num] は、把持点のロボットハンド番号の値を表します。ユーザーはtoolid[vis_pos_num]の値に基づいて、ロボットが対応する位置姿勢(把持点)に移動する際に使用するロボットハンドを決定できます。つまり、ロボットハンド番号に基づいてロボットハンドを切り替えることができます。上記のコードの処理流れは次の通りです。

  • 把持点のロボットハンド番号が1の場合、ロボットはtool_1のツール座標系を使用します。

  • 把持点のロボットハンド番号が2の場合、ロボットはtool_2のツール座標系を使用します。

  • 把持点のロボットハンド番号がそれ以外の場合、ロボットは動作を停止します。この部分で実際の状況に応じて、追加の処理ロジックを加えることができます。

ロボットが把持点に移動する際、ロボットハンド番号に基づき、対応するロボットハンドのDO信号をオンにすることができます。以下は、サンプルコードの一例です。

;add object grasping logic here, such as "$OUT[1]=TRUE"
switch toolid[vis_pos_num]
   CASE 1
      halt
      ;open tool signal
   CASE 2
      halt
      ;open tool signal
   DEFAULT
      halt
endswitch

ロボットが配置点に移動する際、ロボットハンド番号に基づき、対応するロボットハンド番号のDO信号をオフにし、リセットすることができます。以下は、サンプルコードの一例です。

;add object releasing logic here, such as "$OUT[1]=FALSE"
switch toolid[vis_pos_num]
   CASE 1
      halt
      ;reset tool signal
   CASE 2
      halt
      ;reset tool signal
   DEFAULT
      halt
endswitch

この情報は役に立ちましたか?

ご意見・ご要望がございましたら、以下よりお寄せください:

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

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