サンプルプログラム1:MM_S1_Vis_Basic
プログラム概要
機能 |
ロボットがMech-Visionプロジェクトをトリガーして実行し、その後ビジョン結果を取得して、把持および配置を実行します。 |
ファイル場所 |
Mech-VisionとMech-Vizソフトウェアのインストールディレクトリにある |
必要なプロジェクト |
Mech-Visionプロジェクト |
使用前提 |
|
このサンプルプログラムは参考用です。ユーザーは実際の状況に応じて、このプログラムを基に変更を加える必要があります。このプログラムをそのまま使用しないでください。 |
プログラム説明
以下は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
上記のサンプルプログラムの処理流れは、下図の通りです。

下表は上記のプログラムのコードとその説明です。コマンド名のリンクをクリックすることで、その詳細な説明を確認できます。
処理流れ | コートと説明 | ||
---|---|---|---|
座標系設定 |
上記の2つのコマンドは、現在選択されているツール座標系とベース座標系を設定することを意味します。 |
||
Home位置に移動 |
このコマンドは、ロボットがポイントツーポイント方式でティーチングされたHome位置へ移動することを意味します。 |
||
通信初期化 |
ロボットは MM_Init_Socket コマンドを使用して、XML_Kuka_MMIND.xmlファイルの設定情報に基づき、ビジョンシステムとTCPプロトコル通信接続を確立します。
|
||
撮影位置に移動 |
このコマンドは、ロボットが直線移動の方式でティーチングされた撮影位置に移動することを意味します。 |
||
Mech-Visionプロジェクトをトリガー |
このコマンドは、ロボットがビジョンシステムをトリガーして番号1のMech-Visionプロジェクトを実行し、Mech-Visionプロジェクトがすべてのビジョンポイントを返すことを期待することを意味します。 |
||
ビジョン結果を取得 |
このコマンドは、ロボットがMech-Visionプロジェクト1から返されたビジョン結果を取得することを意味します。
上記のコードは、ステータスコードstatusが1100の場合、ロボットがすべてのビジョン結果を正常に取得することを意味し、それ以外の場合はビジョンシステムに異常が発生し、プログラムはIFとENDIFの間のコードを実行することを意味します。ユーザーは、特定のエラーコードに応じて適切な処理を行うことが可能です。本サンプルでは、すべてのエラーコードに対して同一の処理を行い、haltコマンドを使用してプログラムの実行を一時停止しています。 |
||
ビジョン結果を保存 |
このコマンドは、最初のビジョンポイントのツール位置姿勢、ラベル、およびロボットハンド番号をそれぞれ指定された変数に保存することを意味します。
上記の2つのコードは、把持のアプローチ点の位置を計算することを意味します。後続の把持プロセスにおいて、ロボットはこの点を到達する必要があります。 |
||
中間点に移動 |
ロボットはポイントツーポイント方式で、撮影点と把持のアプローチ点の間にある中間点(pick_waypoint)に移動します。
|
||
把持のアプローチ点に移動 |
ロボットは把持点から100㎜上まで直線移動します。この位置を把持のアプローチ点と呼びます。ここでのpick_appは、前述のXpick_appと同じ位置を指します。
|
||
把持点に移動 |
ロボットは直線移動の方式で、把持のアプローチ点から把持点に移動します。ここでのpick_pointは、前述のXpick_pointと同じ位置を指します。 |
||
DO設定による把持 |
ロボットが把持点に到達した後、DOコマンド(例えば「$OUT[1]=TRUE」)を設定して、ロボットハンドを制御し、ワークを把持します。実際の状況に応じてDO設定を調整する必要があります。
|
||
把持の離れる点に移動 |
ロボットは把持点から100㎜上まで移動します。この位置を把持の離れる点と呼びます。ここでのpick_appは、前述のXpick_appと同じ位置を指します。
|
||
中間点に移動 |
ロボットは把持の離れる点と配置のアプローチ点の間の中間点(drop_waypoint)に移動します。
|
||
配置のアプローチ点に移動 |
ロボットが中間点から配置のアプローチ点(drop_app)に移動します。
|
||
配置点に移動 |
ロボットが配置のアプローチ点から配置点(drop)に移動します。
|
||
DO設定による配置 |
ロボットが配置点に到達した後、DOコマンド(例えば「$OUT[1]=FALSE」)を設定して、ロボットハンドを制御し、ワークを配置します。実際の状況に応じてDO設定を調整する必要があります。
|
||
配置の離れる点に移動 |
ロボットが配置点から配置の離れる点(drop_app)に移動します。
|
||
Home位置に移動 |
ロボットが配置の離れる点から初期位置に戻ります。
|