サンプルプログラム
以下では、標準インターフェースを用いた把持と配置のサンプルプログラムとその操作手順について説明します。
事前準備
-
標準インターフェースの通信設定 を参照して標準インターフェースの通信設定が行われます。
-
キャリブレーションの操作手順 を参照して外部パラメータのキャリブレーションが行われます。
-
必要なMech-Vision、Mech-Vizのプロジェクトを作成し、 プロジェクトの自動読み込み が設定されます。
-
TCP座標を正しく設定します。
-
ロボットが予期しない動作する可能性があるので、初めは速度を低く設定してください。
サンプルプログラムの紹介
簡単な把持・配置のサンプルプログラムは、Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある Communication Component/Robot_Interface/KUKA/sample
フォルダに格納されています。
Mech-Visionからビジョン結果を取得
&ACCESS RVO
&REL 1
DEF MM_SAMPLE01 ( )
;FUNCTION:Eye to Hand simple pick and place with Mech-Vision
;2022-5-31
BAS(#TOOL,1)
BAS(#BASE,0)
BAS(#VEL_CP,200)
BAS(#ACC_CP,80)
PTP HOME Vel=100 % DEFAULT
HALT
;Please touch-up MM_camera_capture then go on;
;Move to MM_camera_capture position
LIN MM_Camera_Capture CONT Vel=1 m/s CPDAT1 Tool[1] Base[0] ColDetect[1]
;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,0,2,init_jps)
wait sec 1
MM_Get_VisData(1,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
;MOVE to MM_waypoint
LIN MM_waypoint CONT Vel=1 m/s CPDAT2 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z+100
;MOVE to Approach Point
LIN MM_drop CONT Vel=1 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z-100
;MOVE to MM_drop
LIN MM_drop Vel=0.5 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
;Add object releasing logic here.
;MOVE to Retreat Point
LIN_REL {z -100}#TOOL
PTP HOME Vel=100 % DEFAULT
END
プログラムロジック
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_Init_Socketでソケット通信を初期化します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。
-
MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。
-
1秒待機します。Eye-To-Handでは、MM_START_VISとMM_Get_VisDataの間に移動ステップがある場合、このWAIT SEC命令は必要ありません。Eye-In-Handでは、撮像が完了するまでロボットが完全に停止している必要があるためWAIT SEC命令が必要です。
-
Mech-Visionから処理結果を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
ロボットを把持位置に移動させ、把持を行います。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。
カスタマイズ
-
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 1
DEF MM_SAMPLE02 ( )
;FUNCTION:Eye to Hand simple pick and place with Mech-Viz
;2022-5-31
BAS(#TOOL,1)
BAS(#BASE,0)
BAS(#VEL_CP,200)
BAS(#ACC_CP,80)
PTP HOME Vel=100 % DEFAULT
HALT
;Please touch-up MM_camera_capture then go on;
;Move to MM_camera_capture position
LIN MM_Camera_Capture CONT Vel=1 m/s CPDAT1 Tool[1] Base[0] ColDetect[1]
;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,init_jps)
wait sec 0.1
;set branch exitport
;MM_Set_Branch(1,1)
;get planned path
MM_Get_VizData(2,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
;MOVE to MM_waypoint
LIN MM_waypoint CONT Vel=1 m/s CPDAT2 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z+100
;MOVE to Approach Point
LIN MM_drop CONT Vel=1 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z-100
;MOVE to MM_drop
LIN MM_drop Vel=0.5 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
;Add object releasing logic here.
;MOVE to Retreat Point
LIN_REL {z -100}#TOOL
PTP HOME Vel=100 % DEFAULT
END
プログラムロジック
Mech-Vizが出力した位置姿勢に従い、設定した配置位置にロボットを移動し、ワークを配置します。
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_Init_Socketでソケット通信を初期化します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、使用するレシピはMM_Switch_Modelで設定することができます。
-
Mech-Vizプロジェクトの実行をトリガーします。
-
Mech-Vizから動作計画を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
ループ文を利用して、取得した移動位置を変数に格納します。
-
Mech-Vizによって計画された経路に沿ってロボットを動かし、把持を実行します。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。
カスタマイズ
-
TCP座標を定義
BAS(#TOOL,1)、ロボットTCPを設定し、ツール座標系1を使用します。呼び出し座標系を、実際のTCP値が格納されている座標系に変更する必要があります。
-
画像撮像位置を定義
LIN MM_Camera_Captureで画像撮影位置を定義しています。
-
動作経路を定義
把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。LIN MM_waypointに一個または複数個設定することが可能です。
-
配置位置を定義
LIN MM_dropで配置位置を定義しています。
-
ロボットハンドの制御ロジックを追加
ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。
-
初期位置を定義
ロボットの初期位置姿勢は、事前に設定する必要があります。
Mech-Visionの「経路計画」ステップを使用して経路を取得
&ACCESS RVO
&REL 1
&PARAM DISKPATH = KRC:\R1\mechmind
DEF MM_SAMPLE03 ( )
;FUNCTION:Eye to Hand simple pick and place with Mech-Vision Path Planning Step
;2023-1-10
BAS(#TOOL,1)
BAS(#BASE,0)
BAS(#VEL_CP,200)
BAS(#ACC_CP,80)
PTP HOME Vel=100 % DEFAULT
HALT
;Please touch-up MM_camera_capture then go on;
;Move to MM_camera_capture position
LIN MM_Camera_Capture CONT Vel=1 m/s CPDAT1 Tool[1] Base[0] ColDetect[1]
;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,0,2,init_jps)
wait sec 1
;get planned path
MM_Get_VisPath(1,2,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
;MOVE to MM_waypoint
LIN MM_waypoint CONT Vel=1 m/s CPDAT2 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z+100
;MOVE to Approach Point
LIN MM_drop CONT Vel=1 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
MM_drop.z=MM_drop.z-100
;MOVE to MM_drop
LIN MM_drop Vel=0.5 m/s CPDAT3 Tool[1] Base[0] ColDetect[1]
;Add object releasing logic here.
;MOVE to Retreat Point
LIN_REL {z -100}#TOOL
PTP HOME Vel=100 % DEFAULT
END
プログラムロジック
このサンプルは、Mech-Visionの「経路計画」ステップで計画した経路を取得して把持を行い、固定配置点に配置します。
-
ロボットを初期位置に移動させます。
-
ロボットを画像撮影位置に移動させます。
-
MM_Init_Socketでソケット通信を初期化します。
-
Mech-Visionのプロジェクトでパラメータレシピを使用する場合、MM_Switch_Modelで設定することができます。
-
MM_Start_VisでMech-Visionプロジェクトに実行をトリガーします。
-
MM_Get_VisPathでMech-Visionの「経路計画」ステップから出力された動作経路を取得します。
-
返されたステータスコードを確認します。エラーコードが返された場合、プログラムは一時停止します。
-
計画さ経路点の数に応じて、ループ文で取得した経路点を変数に保存します。
-
ループ文で計画された経路に沿ってロボットを動作し、把持を完了させ、ビジョン領域から離れさせます。
-
ロボットを把持位置と配置位置間の経路に移動させます。
-
設定した配置位置にロボットを移動し、ワークを配置します。ロボットを初期位置に戻します。
カスタマイズ
-
TCP座標を定義
BAS(#TOOL,1)、ロボットTCPを設定し、ツール座標系1を使用します。呼び出し座標系を、実際のTCP値が格納されている座標系に変更する必要があります。
-
画像撮像位置を定義
LIN MM_Camera_Captureで画像撮影位置を定義しています。
-
動作経路を定義
把持位置から配置位置までの経路を設定します。この経路はロボットが周辺環境と衝突しないように設定する必要があります。LIN MM_waypointに一個または複数個設定することが可能です。
-
配置位置を定義
LIN MM_dropで配置位置を定義しています。
-
ロボットハンドの制御ロジックを追加
ワークを把持、配置する際、ロボットハンドの制御ロジックを追加します。
-
初期位置を定義
ロボットの初期位置姿勢は、事前に設定する必要があります。