サンプルプログラム

過去バージョンのマニュアルを表示しています。最新版のマニュアルを表示するには、ページの右上隅にあるバージョン番号をクリックして切り替えてください。

本節では標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について説明します。

事前準備

  1. 標準インターフェースの通信設定 を参照して標準インターフェースの通信設定が行われます。

  2. キャリブレーションの操作手順 を参照して外部パラメータのキャリブレーションが行われます。

  3. 必要なMech-Vision、Mech-Vizのプロジェクトを作成し、 プロジェクトの自動読み込み が設定されます。

  4. TCP座標を正しく設定します。

  5. ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。

サンプルプログラムの紹介

簡単な把持・配置のサンプルプログラムは、Mech-Mindソフトウェアシステムのインストールディレクトリ Mech-Center/Robot_Interface/KUKA/sample フォルダに格納されています。

Mech-Visionからビジョン結果を取得

&ACCESS RVO
&REL 5
DEF MM_SAMPLE01 ( )
  ;FUNCTION:Eye to Hand simple pick and place with {product-vis}
  ;2022-5-31
  INT Job
  INT Pos_Num
  INT Last_Data
  INT MM_Status
  E6POS MM_pick
  E6POS MM_waypoint
  E6POS MM_camera_capture
  E6POS MM_drop
  INT MM_Label
  INT MM_Speed
  ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD

  BAS(#TOOL,1)
  LIN MM_camera_capture
  ;Set ip address of IPC
  MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
  wait sec 0.1
  ;Set vision recipe
  MM_Switch_Model(1,1)
  ;Run vision project
  MM_Start_Vis(1,1,2,snap_jps)
  wait sec 1
  MM_Get_VisData(1,Last_Data,Pos_Num,MM_Status)
  IF MM_Status<> 1100 THEN
    halt
  ENDIF
  MM_Get_Pose(1,MM_pick,MM_Label,MM_Speed )
MM_pick.z=MM_pick.z+100
LIN MM_pick
MM_pick.z=MM_pick.z-100
  LIN MM_pick
  ;Add object grasping logic here.
  LIN_REL {z -100}#TOOL
 LIN MM_waypoint
MM_drop.z=MM_drop.z+100
LIN MM_drop
MM_drop.z=MM_drop.z-100
  LIN MM_drop
  ;Add object releasing logic here.
  LIN_REL {z -100}#TOOL
    ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD
END

プログラムロジック

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影位置に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。

  5. MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。

  6. 1秒待機します。Eye-To-Handでは、MM_START_VISとMM_Get_VisDataの間に移動ステップがある場合、このWAIT SEC命令は必要ありません。Eye-In-Handでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT SEC命令が必要です。

  7. Mech-Visionから処理結果を取得します。

  8. 返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  9. ロボットを把持位置に移動させ、把持を行います。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。

カスタマイズ

  • TCP座標を定義

    BAS(#TOOL,1)、ロボットTCPを設定し、ツール座標系1を使用します。呼び出し座標系を、実際のTCP値が格納されている座標系に変更する必要があります。

  • 画像撮像位置を定義

    LIN MM_camera_captureで画像撮影位置を定義しています。

  • 動作経路を定義

    把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。LIN MM_waypointに一個または複数個設定することが可能です。

  • 配置位置を定義

    LIN MM_dropで配置位置を定義しています。

  • 把持、配置位置からのZ方向オフセットを定義

    • 把持位置に近づけます

      MM_pick.z=MM_pick.z+100

      把持位置に接近する際に100mmだけZ方向にオフセットされます。

    • 把持位置から離れます

      LIN_REL {z -100}#TOOL

      把持位置から離れる際に100mmだけZ方向にオフセットされます。

    • 配置位置に近づけます

      MM_drop.z=MM_drop.z+100

      配置位置に接近する際に100mmだけZ方向にオフセットされます。

    • 配置位置から離れます

      LIN_REL {z -100}#TOOL

      配置位置から離れる際に100mmだけZ方向にオフセットされます。

    • ロボットハンドの制御ロジックを追加

      ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。

  • 初期位置を定義

    ロボットの初期位置姿勢は、事前に設定する必要があります。

Mech-Vizから動作計画を取得

&ACCESS RVO
&REL 2
DEF MM_SAMPLE02 ( )
INT Job
  INT Pos_Num
  INT VisPos_Num
  INT Last_Data
  INT MM_Status
  DECL E6POS MM_movepoint[20]
  E6POS MM_waypoint
  E6POS MM_camera_capture
  E6POS MM_drop
  DECL INT MM_Label[20]
  INT MM_Speed[20]
  INT count
  ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD

  BAS(#TOOL,1)
  LIN MM_camera_capture
  ;Set ip address of IPC
  MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
  wait sec 0.1
  ;Set vision recipe
  ;MM_Switch_Model(1,1)
  ;Run Viz project
  MM_Start_Viz(1,snap_jps)
  wait sec 0.1
  ;set branch exitport
  ;MM_Set_Branch(1,1)
  ;get planned path
  MM_Get_VizData(2,Last_Data,Pos_Num,VisPos_Num,MM_Status)
  IF MM_Status<> 2100 THEN
    halt
  ENDIF
  FOR count=1 TO Pos_Num
  MM_Get_Pose(count,MM_movepoint[count],MM_Label[count],MM_Speed[count])
  ENDFOR
  ;follow the planned path to pick
  FOR count=1 TO Pos_Num
  LIN MM_movepoint[count]
  IF count==VisPos_Num THEN
   ;add object grasping logic here
  ENDIF
  ENDFOR
  ;go to drop location
  LIN MM_waypoint
MM_drop.z=MM_drop.z+100
  LIN MM_drop
MM_drop.z=MM_drop.z-100
  LIN MM_drop
  ;Add object releasing logic here.
  LIN_REL  {z -100}#TOOL
    ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD
END

プログラムロジック

Mech-Vizが出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影位置に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。

  5. Mech-Vizプロジェクトの実行をトリガーします。

  6. Mech-Vizから動作計画を取得します。

  7. 返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  8. ループ文を利用して、取得した移動位置を変数に格納します。

  9. Mech-Vizによって計画された経路に沿ってロボットを動かし、把持を実行します。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。

カスタマイズ

  • TCP座標を定義

    BAS(#TOOL,1)、ロボットTCPを設定し、ツール座標系1を使用します。呼び出し座標系を、実際のTCP値が格納されている座標系に変更する必要があります。

  • 画像撮像位置を定義

    LIN MM_camera_captureで画像撮影位置を定義しています。

  • 動作経路を定義

    把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。LIN MM_waypointに一個または複数個設定することが可能です。

  • 配置位置を定義

    LIN MM_dropで配置位置を定義しています。

  • ロボットハンドの制御ロジックを追加

    ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。

  • 初期位置を定義

    ロボットの初期位置姿勢は、事前に設定する必要があります。

Mech-Visionの「経路計画」ステップを使用して経路を取得

&A&ACCESS RVO
&REL 2
DEF MM_SAMPLE03 ( )
  ;FUNCTION:Eye to Hand simple pick and place with {product-vis} Path Planning Step
  ;2023-1-10
  INT Pos_Num
  INT VisPos_Num
  INT Last_Data
  INT MM_Status
  DECL E6POS MM_movepoint[20]
  E6POS MM_waypoint
  E6POS MM_camera_capture
  E6POS MM_drop
  INT MM_Label[20]
  INT MM_Speed[20]
  INT count
  ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD

  BAS(#TOOL,1)
  LIN MM_camera_capture
  ;Set ip address of IPC
  MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
  wait sec 0.1
  ;Set vision recipe
  MM_Switch_Model(1,1)
  ;Run vision project
  MM_Start_Vis(1,1,2,snap_jps)
  wait sec 1
  ;get planned path
  MM_Get_VisPath(1,2,Last_Data,Pos_Num,VisPos_Num,MM_Status)
  IF MM_Status<> 1103 THEN
    halt
  ENDIF
  FOR count=1 TO Pos_Num
  MM_Get_Pose(count,MM_movepoint[count],MM_Label[count],MM_Speed[count])
  ENDFOR
  ;follow the planned path to pick
  FOR count=1 TO Pos_Num
  LIN MM_movepoint[count]
  IF count==VisPos_Num THEN
   ;add object grasping logic here
  ENDIF
  ENDFOR
  ;go to drop location
  LIN MM_waypoint
MM_drop.z=MM_drop.z+100
  LIN MM_drop
MM_drop.z=MM_drop.z-100
  LIN MM_drop
  ;Add object releasing logic here.
  LIN_REL  {z -100}#TOOL
    ;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.44,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT
$BWDSTART=FALSE
PDAT_ACT=PDEFAULT
FDAT_ACT=FHOME
BAS(#PTP_PARAMS,100)
$H_POS=XHOME
PTP XHOME
  ;ENDFOLD
END

プログラムロジック

このサンプルは、Mech-Visionの「経路計画」ステップで計画した経路を取得して把持を行い、固定配置点に配置します。

  1. ロボットを初期位置に移動させます。

  2. ロボットを画像撮影位置に移動させます。

  3. MM_Init_Socketでソケット通信を初期化します。

  4. Mech-Visionのプロジェクトでパラメータレシピを使用する場合、MM_Switch_Modelで設定することができます。

  5. MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。

  6. MM_Get_VisPathでMech-Visionの「経路計画」ステップから出力された動作経路を取得します。

  7. 返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。

  8. 計画さ経路点の数に応じて、ループ文で取得した経路点を変数に保存します。

  9. ループ文で計画された経路に沿ってロボットを動作し、把持を完了させ、ビジョン領域から離れさせます。

  10. ロボットを把持位置と配置位置間の経路に移動させます。

  11. 設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。

カスタマイズ

  • TCP座標を定義

    BAS(#TOOL,1)、ロボットTCPを設定し、ツール座標系1を使用します。呼び出し座標系を、実際のTCP値が格納されている座標系に変更する必要があります。

  • 画像撮像位置を定義

    LIN MM_camera_captureで画像撮影位置を定義しています。

  • 動作経路を定義

    把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。LIN MM_waypointに一個または複数個設定することが可能です。

  • 配置位置を定義

    LIN MM_dropで配置位置を定義しています。

  • ロボットハンドの制御ロジックを追加

    ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。

  • 初期位置を定義

    ロボットの初期位置姿勢は、事前に設定する必要があります。

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

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