把持と配置を実行
本ガイドでは、まずこのソリューションで実現される把持・配置フローを理解し、その後、把持と配置フローの設定方法について説明します。
通信ソリューション
上記の流れにおいて、「ロボットがカメラをトリガーして撮影し、計画された経路を取得する」には、ロボットとビジョンシステムが標準インターフェース通信方式を使用する必要があります。また、標準インターフェースとビジョンシステムの連携方法は Mech-Visionを使用して計画された経路を取得 となります。
この連携方法を使用する場合、Mech-Visionプロジェクト(「経路計画」ステップを含む)を適切に設定し、ロボットプログラムを作成する必要があります。把持と配置フローを設定 を参照して、Mech-Visionプロジェクトの設定とロボットプログラムの作成を完了してください。
把持と配置フローを設定
把持と配置フローを実現するには、以下の設定を順に完了する必要があります。
Mech-Visionプロジェクトの「経路計画」ステップの設定とシミュレーション
「経路計画」ステップはロボットに以下の機能を提供します。
-
経路計画: ロボットの把持経路を計画します。計画された経路には配置経路は含まれません。そのため、配置経路はロボットプログラムに追加する必要があります。
-
衝突検出:「経路計画」ステップでは経路計画中に衝突検出を行い、ロボットに衝突のない把持経路を提供します。
-
実行のシミュレーション:「経路計画」ステップでは、ロボットの把持フローを可視化してシミュレーションし、デバッグを容易にします。
「経路計画」ステップでは、ロボット、シーンの物体、およびロボットハンド間の衝突検出がデフォルトで有効になっています。このステップでは、追加の衝突検出パラメータを設定する必要はありません。 |
Mech-Visionプロジェクトの「経路計画」ステップの設定手順を下図に示します。
プロジェクト編集エリアでステップ上の 設定ツール ボタンをクリックして、経路計画設定ツールを開きます。
シーンの物体の設定
シーンの物体を設定する目的は、実際の作業現場を再現することで、ロボットの移動経路を計画できるようにすることです。具体的な操作方法については、シーン物体を設定 をご参照ください。
実行可能な把持動作を確保した上で、実際の作業環境をより厳密に再現する必要があります。このソリューションでは、シーン物体は以下のように設定されます。
ロボットハンドモデルの設定
ロボットハンドを設定する目的は、ロボットハンドのモデルを仮想空間に表示し、衝突検出に利用できるようにするためです。具体的な操作方法については、ロボットハンドを設定 をご参照ください。
ワークとロボットハンドの関連付け
ロボットハンドの設定が完了した後、ワークライブラリでワークと把持に使用するロボットハンドを関連付ける必要があります。これにより、設定したロボットハンドがワークの把持に使用できるようになります。
ティーチング方法を使用して把持位置姿勢を設定する場合、デフォルトでは設定されたすべてのロボットハンドが把持に使用可能です。そのため、このソリューションでは特に追加の操作は不要です。
衝突モデルの簡略化
ロボットハンドモデルを作成する際、衝突モデルの作成時間を短縮するため、凸包作成時にモデルを完全に再現する必要はありません。実際の状況に応じて、一部のディテールを省略することが可能です。
ロボットハンドの指先部分は高い精度が求められ、実物に近い形状で再現することが重要です。これにより、衝突検出の精度を確保します。一方で、指先から離れた機械部分に関しては、簡略化した形状にすることで、効率を向上させることができます。この場合、複雑な構造を囲む簡易な直方体などで代替することが有効です。
モデル簡略化の例は下図の通りです。
ロボットパラメータの設定とロボットプログラムの作成
KUKAの標準インターフェースサンプルプログラム MM_S3_Vis_Path は、このソリューションで必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。
サンプルプログラムに基づき、ロボット側で以下の操作を行います。
-
ツール座標系を設定します。ロボット側のツール座標系TCPがMech-Visionソフトウェアの「経路計画」ステップ内のTCPデータと一致していることを確認します。現在選択されているツール座標系番号を、実際に使用するロボットハンドの座標系に設定します。
変更前 変更後 BAS(#TOOL,1)
BAS(#TOOL,#)
「#」は実際に使用するロボットハンドの番号に置き換えてください。 -
初期位置(ホーム位置)のティーチングを行います。
ロボットをティーチング設定された初期位置に移動します。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 HOME に記録します。
-
ロボットハンドの開閉コマンドを追加します。
$OUT[131] = True $OUT[132] = False
-
IPCのIPアドレスを指定します。KUKAロボットに標準インターフェースプログラムを読み込む際に、XML_Kuka_MMIND.xmlの設定ファイルも同時に読み込まれます。読み込む前に、設定ファイル内のIPアドレスとポートをIPCのIPアドレスとポートに変更することもできます。まだ変更していない場合は、MM_Init_Socket コマンドに対応するXML_Kuka_MMIND.xmlファイルを開き、その中のIPアドレスとポートをIPCのIPアドレスとポートに更新してください。
-
画像撮影時のロボットの位置姿勢をティーチング設定します。
ロボットをティーチング設定された画像撮影位置に移動させます。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットハンドがカメラ視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 camera_capture に記録します。
-
ワークを把持するためにロボットハンドを閉じるDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) ;add object grasping logic here, such as "$OUT[1]=TRUE" halt
;add object grasping logic here, such as "$OUT[1]=TRUE" halt $OUT[131] = False $OUT[132] = True
-
配置の中間点および配置点をティーチング設定します。
ロボットをティーチング設定された中間点および配置点に移動させ、ロボットの位置姿勢をそれぞれ pick_point3 と drop_app に記録します。
-
ワークを配置するためにロボットハンドを開くDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後 ;add object releasing logic here, such as "$OUT[1]=FALSE" halt
;add object releasing logic here, such as "$OUT[1]=FALSE" halt $OUT[131] = True $OUT[132] = False
ロボットの把持・配置動作をテストするためのシングルステップ実行
ロボットの把持と配置の動作を確認するためには、以下の手順に従って実行します。
-
ティーチペンダントの接続マネージャースイッチを横向きに回し、ポップアップするモード選択ダイアログで「T1 実行モード」に切り替えます。その後、接続マネージャースイッチを元の位置に戻してロボットの実行モードを切り替えます。
-
O をクリックし、ポップアップウィンドウで I をクリックして 駆動系 の状態を I に切り替えます。既に状態が「I」になっている場合は、この操作は不要です。
-
ティーチペンダントの背面にある白色の イネーブルキー を押したままにし、ティーチペンダントの正面にある緑色の 実行キー を1回押すと、プログラムが実行されます(Rが緑色に変わると、プログラムが実行中であることを示します)。
-
ロボットが自動的にプログラムに従って、ワークを把持し、指定の位置に配置します。
ロボットが正常にワークを把持し、配置することができれば、プログラムが正しく設定されていることが確認されます。
ロボットが繰り返し把持と配置を実行するためのループ文を挿入
ロボットが単回の把持と配置を正常に完了できることを確認した後、プログラムの12行目と61行目にループ文を挿入して、ロボットが繰り返し把持と配置を実行できるようにします。
以下のループ文を追加してください。
Init: ... GOTO Init
参考:変更後のサンプルプログラム
最終的に変更されたサンプルプログラムは以下の通りです。
&ACCESS RVO
DEF MM_S3_Vis_Path ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Vision project and get
; planned path
; Mech-Mind, 2023-12-25
;---------------------------------------------------
;set current tool no. to 1
BAS(#TOOL,1)
;set current base no. to 0
BAS(#BASE,0)
Init:
;move to robot home position
PTP HOME Vel=100 % DEFAULT
$OUT[131] = True
$OUT[132] = False
;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-Vision project
MM_Start_Vis(1,0,2,init_jps)
;get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
MM_Get_Vispath(1,1,pos_num,vis_pos_num,status)
;check whether planned path has been got from Mech-Vision successfully
IF status<> 1103 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 results
halt
ENDIF
;save waypoints of the planned path to local variables one by one
MM_Get_Jps(1,Xpick_point1,label[1],toolid[1])
MM_Get_Jps(2,Xpick_point2,label[2],toolid[2])
MM_Get_Jps(3,Xpick_point3,label[3],toolid[3])
;follow the planned path to pick
;move to approach waypoint of picking
PTP pick_point1 Vel=50 % PDAT1 Tool[1] Base[0] ;
;move to picking waypoint
PTP pick_point2 Vel=10 % PDAT2 Tool[1] Base[0] ;
;add object grasping logic here, such as "$OUT[1]=TRUE"
halt
$OUT[131] = False
$OUT[132] = True
;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0];
;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT4 Tool[1] Base[0];
;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0] ;
;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT3 Tool[1] Base[0] ;
;add object releasing logic here, such as "$OUT[1]=FALSE"
halt
$OUT[131] = True
$OUT[132] = False
;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT2 Tool[1] Base[0] ;
;move back to robot home position
PTP HOME Vel=100 % DEFAULT;
GOTO Init
END
これで、3Dビジョンシステムによる整列して並べられたワークの供給アプリケーションの導入が完了しました。