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

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

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

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

プログラム概要

機能

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

ファイル場所

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

必要なプロジェクト

Mech-Visionプロジェクト

使用前提

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

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

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

プログラム説明

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

DEF MM_S1_Vis_Basic ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project and get
; vision result
; 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 NO.1 Mech-Vision project
   MM_Start_Vis(1,0,2,init_jps)
   ;get vision result from NO.1 Mech-Vision project
   MM_Get_VisData(1,pos_num,status)
   ;check whether vision result has been got from Mech-Vision successfully
   IF status<> 1100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=1003 means no point cloud in ROI
      ;e.g.: status=1002 means no vision result
      halt
   ENDIF
   ;save first vision point data to local variables
   MM_Get_Pose(1,Xpick_point,label,toolid)
   ;calculate pick approach point based on pick point
   tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}
   Xpick_app=Xpick_point:tool_offset
   ;move to intermediate waypoint of picking
PTP pick_waypoint CONT Vel=50 % PDAT1 Tool[1] Base[0]
   ;move to approach waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
   ;move to picking waypoint
LIN pick_point Vel=0.3 m/s CPDAT3 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   halt
   ;move to departure waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT5 Tool[1] Base[0]
   ;add object releasing logic here, such as "$OUT[1]=FALSE"
   halt
   ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
END

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

sample1

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

処理流れ コートと説明

座標系設定

   ;set current tool no. to 1
   BAS(#TOOL,1)
   ;set current base no. to 0
   BAS(#BASE,0)
  • BAS(#TOOL,1):現在選択されているツール座標系の番号を1に設定します。

  • BAS(#BASE,0):現在選択されているベース座標系の番号を0に設定します。

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

Home位置に移動

   ;move to robot home position
PTP HOME Vel=100 % DEFAULT
  • PTP:ポイントツーポイント(Point to Point)の移動方式。ロボットはTCPを最速経路で目標点へ移動させます。

  • HOME:目標点の名称(ここではHome位置を指す)。

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

  • Vel=100 %:速度。

  • DEFAULT:システムが自動で割り当てるモーションデータグループ名。

このコマンドは、ロボットがポイントツーポイント方式でティーチングされたHome位置へ移動することを意味します。

通信初期化

   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)

ロボットは MM_Init_Socket コマンドを使用して、XML_Kuka_MMIND.xmlファイルの設定情報に基づき、ビジョンシステムとTCPプロトコル通信接続を確立します。

XML_Kuka_MMINDファイルの詳細については、MM_Init_Socket コマンドの説明をご参照ください。

撮影位置に移動

   ;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
  • LIN:直線移動の方式。

  • camera_capture:目標点の名称(ここでは撮影位置を指す)。

    撮影位置を事前に設定する必要があります。詳細については、キャリブレーション開始点を設定 をご参照ください。
  • Vel=1 m/s:速度。

  • CPDAT1:システムが自動で割り当てるモーションデータグループ名。

  • Tool[1]:1番のツール座標系。

  • Base[0]:0番のベース座標系。

このコマンドは、ロボットが直線移動の方式でティーチングされた撮影位置に移動することを意味します。

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

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

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

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

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

  • init_jps:ユーザーによりカスタマイズされた関節角度。本プログラムでは、関節角度は使用されませんが、設定する必要があります。

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

ビジョン結果を取得

   ;get vision result from NO.1 Mech-Vision project
   MM_Get_VisData(1,pos_num,status)
  • MM_Get_VisData:ビジョン結果を取得するためのコマンド。

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

  • pos_num:この変数は取得したビジョンポイントの数を保存します。

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

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

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

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

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

ビジョン結果を保存

   ;save first vision point data to local variables
   MM_Get_Pose(1,Xpick_point,label,toolid)
  • MM_Get_Pose:ビジョン結果を保存するためのコマンド。

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

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

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

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

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

   ;calculate pick approach point based on pick point
   tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}
   Xpick_app=Xpick_point:tool_offset
  • tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}:ツール座標系のZ軸負方向100mmの位置。

  • Xpick_app=Xpick_point:tool_offset:Xpick_pointに対してZ軸負方向に100mmの位置。つまり、把持点の100mm上方の位置であり、Xpick_appは把持のアプローチ点となります。

上記の2つのコードは、把持のアプローチ点の位置を計算することを意味します。後続の把持プロセスにおいて、ロボットはこの点を到達する必要があります。

中間点に移動

   ;move to intermediate waypoint of picking
PTP pick_waypoint CONT Vel=50 % PDAT1 Tool[1] Base[0]

ロボットはポイントツーポイント方式で、撮影点と把持のアプローチ点の間にある中間点(pick_waypoint)に移動します。

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

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

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

   ;move to approach waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]

ロボットは把持点から100㎜上まで直線移動します。この位置を把持のアプローチ点と呼びます。ここでのpick_appは、前述のXpick_appと同じ位置を指します。

把持のアプローチ点を追加することで、ロボットが移動する際にシーンの物体(コンテナなど)と衝突するのを防ぐことができます。実際の状況に応じてZ軸方向のオフセット値(「tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}」)を変更して、移動中に衝突しないことを確認してください。

把持点に移動

   ;move to picking waypoint
LIN pick_point Vel=0.3 m/s CPDAT3 Tool[1] Base[0]

ロボットは直線移動の方式で、把持のアプローチ点から把持点に移動します。ここでのpick_pointは、前述のXpick_pointと同じ位置を指します。

DO設定による把持

   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   halt

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

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

把持の離れる点に移動

   ;move to departure waypoint of picking
LIN pick_app Vel=1 m/s CPDAT2 Tool[1] Base[0]

ロボットは把持点から100㎜上まで移動します。この位置を把持の離れる点と呼びます。ここでのpick_appは、前述のXpick_appと同じ位置を指します。

把持の離れる点を追加することで、ロボットが移動する際にシーン内の物体(コンテナなど)との衝突を防ぐことができます。実際の状況に応じてZ軸方向のオフセット値(「tool_offset={X 0,Y 0,Z -100,A 0,B 0,C 0}」)を変更して、離れる際に衝突しないことを確認してください。

中間点に移動

   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]

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

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

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

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

   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]

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

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

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

配置点に移動

   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT5 Tool[1] Base[0]

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

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

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

DO設定による配置

   ;add object releasing logic here, such as "$OUT[1]=FALSE"
   halt

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

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

配置の離れる点に移動

   ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT4 Tool[1] Base[0]

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

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

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

Home位置に移動

   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT

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

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

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

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

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

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