把持と配置を実行
以下では、このソリューションで実現される把持・配置フローを理解し、その後、把持と配置フローの設定方法について説明します。
通信ソリューション
上記のフローでは、「ロボットがカメラをトリガーして撮影し、計画された経路を取得する」には、ロボットとビジョンシステムが標準インターフェース通信方式を使用する必要があります。また、標準インターフェースとビジョンシステムの連携方法は Mech-Vizを使用して計画された経路を取得 となります。
この連携方法を使用する場合、Mech-VisionプロジェクトとMech-Vizプロジェクトの設定、ロボットプログラムの作成を完了させる必要があります。把持と配置フローを設定 を参照して、Mech-Vizプロジェクトの設定とロボットプログラムの作成を完了してください。
把持と配置フローを設定
把持と配置フローを実現するには、以下の設定を順に完了する必要があります。
Mech-Vizプロジェクトの設定とシミュレーション
Mech-Vizプロジェクトはロボットに以下の機能を提供しています。
-
経路計画: ロボットの把持経路を計画します。計画された経路には配置経路は含まれません。そのため、配置経路はロボットプログラムに追加する必要があります。
-
衝突検出:Mech-Vizは経路計画中に衝突検出を行い、ロボットに衝突のない把持経路を提供します。
-
実行のシミュレーション:Mech-Vizはロボットの把持フローを可視化してシミュレーションし、デバッグを容易にします。
Mech-Vizプロジェクトの設定は、下図のような手順で行われます。
Mech-Visionソリューションライブラリの「バラ積みされたワークの供給」ソリューションには、Mech-Vizプロジェクト(Viz_Target_Objects_Picking)が組み込まれています。以下の設定を行う前に、Mech-Vizを起動し、メニューバーで
を選択し、ローカルの 「バラ積みされたワークの供給」ソリューションの 「Viz_Target_Objects_Picking 」フォルダを選択します。シーンの物体を設定
シーンの物体を設定する目的は、実際の作業環境を再現することで、ロボットの動作経路を計画できるようにすることです。具体的な操作方法については、シーン物体を設定 をご参照ください。
追加するコンテナのシーンの物体の名前は、Mech-Visionプロジェクト内の 標準コンテナの位置決め ステップの組合せの 文字列のリスト パラメータ値と一致している必要があります。 |
実行可能な把持動作を確保した上で、実際の作業環境をより厳密に再現する必要があります。このソリューションでは、シーン物体は以下のように設定されます。
ロボットハンドを設定
ロボットハンドを設定する目的は、ロボットハンドのモデルを仮想空間に表示し、衝突検出に利用できるようにするためです。具体的な操作方法については、ロボットハンドを設定 をご参照ください。
ロボットハンドを設定する際には、TCPを実際のハンドのTCPに調整し、ツールTCPとロボット側のツール座標系TCPが一致するようにする必要があります。 |
ワークとロボットハンドを関連付け、把持範囲を設定
ロボットハンドの設定が完了した後、ワークライブラリでワークと把持に使用するロボットハンドを関連付ける必要があります。これにより、設定したロボットハンドがワークの把持に使用できるようになります。
このソリューションでは、把持するワークはボルトで、クランプ式ハンドはネジ部分を把持します。実際の把持時に、クランプ式ハンドは把持位置姿勢のX方向に沿って平行移動することが許容されます。そのため、ワークライブラリで把持範囲を設定して、把持成功率をさらに向上させることができます。
-
プロジェクトリソースツリーの 対象物 で、ワークモデルをダブルクリックしてワークライブラリを開きます。
-
把持位置姿勢を設定 手順では、把持位置姿勢の設定 の下の Mech-Vizまたは「経路計画」ステップのロボットハンドをすべて有効にする にチェックを入れます。
-
可視化エリアで、ワークの把持位置姿勢に対するロボットハンドの位置が正しいことを確認します。正しくない場合は、相対位置関係が正しくなるまで、Mech-VizでロボットハンドのTCPとロボットのツールTCPを再調整してください。
-
パラメータ設定 エリアで、X軸に沿った並進範囲を設定します。
衝突モデルの簡略化
ロボットハンドモデルを作成する際、衝突モデルの作成時間を短縮するため、凸包作成時にモデルを完全に再現する必要はありません。実際の状況に応じて、一部のディテールを省略することが可能です。
ロボットハンドの指先部分は高い精度が求められ、実物に近い形状で再現することが重要です。これにより、衝突検出の精度を確保します。一方で、指先から離れた機械部分に関しては、簡略化した形状にすることで、効率を向上させることができます。この場合、複雑な構造を囲む簡易な直方体などで代替することが有効です。
下図は、簡略化されたモデルの例を示しています。
ワークフローを構築
「バラ積みされたワークの供給」ソリューションに組み込まれたMech-Vizプロジェクト「Viz_Target_Objects_Picking」には、すでにワークフローが構築されています。ワークフロー内の各ステップの説明は以下の通りです。
ステップ | 説明 | 用途 |
---|---|---|
画像撮影位置を設定します。画像撮影位置とは、カメラが画像を撮影したときにロボットがいる位置を指します。この位置では、ロボットアームがカメラ視野を遮らないようにする必要があります。
|
シミュレーションにのみ使用され、ロボットには送信されません。 |
|
Mech-Visionのビジョン結果を呼び出します。必ず正しいMech-Visionプロジェクトを呼び出してください。 |
/ |
|
ビジョン結果があるかどうかを確認します。 |
/ |
|
コンテナに入る点とアプローチ点を計画します。 |
計画された経路の一部としてロボットに送信されます。 |
|
把持位置姿勢を計画します。 |
計画された経路の一部としてロボットに送信されます。 |
|
離れる点とコンテナから出る点を計画します。 |
計画された経路の一部としてロボットに送信されます。 |
|
中間点を設定します。ロボットを手動で中間点に移動させ、その時点でのロボットの位置姿勢をステップに記録します。 |
シミュレーションにのみ使用され、ロボットには送信されません。 |
衝突検出パラメータを設定
Mech-Vizは衝突検出機能を使用して、ロボットが動作中に衝突を避けることができます。このソリューションでは、点群衝突検出 と 対象物衝突検出 を有効にする必要があります。詳細については、衝突検出設定 をご参照ください。
-
点群衝突検出:主にロボットハンドと点群との衝突を検出します。ロボット関節と点群の衝突検出を行うかどうかは、実際のニーズに応じて選択できます。
-
対象物衝突検出:主に把持するワークとシーンの物体との衝突を検出します。把持するワークと他のワークや点群との衝突検出を行うかどうかは、実際のニーズに応じて選択できます。
ロボットパラメータの設定とロボットプログラムの作成
FANUCの標準インターフェースサンプルプログラム MM_S2_Viz_Basic は、このソリューションで必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。MM_S2_Viz_Basicサンプルプログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。
サンプルプログラムに基づき、ロボット側で以下の操作を行います。
-
ツール座標系を設定します。ロボット側のツール座標系TCPがMech-Vizソフトウェア内のTCPデータと一致していることを確認します。現在選択されているツール座標系番号を、実際に使用するロボットハンドの座標系に設定します。
変更前 変更後 10: UTOOL_NUM=1 ;
10: UTOOL_NUM=#;
「#」は実際に使用するロボットハンドの番号に置き換えてください。 -
ティーチング法で初期位置(Home位置)を設定します。
ロボットを設定された初期位置に移動させます。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。完了後、この時点のロボットの位置姿勢を変数 P[1]に記録します。
-
IPCのIPアドレスを指定します。CALL MM_INIT_SKT コマンドのIPアドレスをIPCの実際のIPアドレスに変更します。
変更前 変更後(例) CALL MM_INIT_SKT('8','192.168.1.20',50000,1) ;
16: CALL MM_INIT_SKT('8','192.168.110.207',50000,5) ;
-
ティーチング法を使用して画像撮像位置を設定します。
ロボットを設定された画像撮影位置に移動させます。完了後、この時点のロボットの位置姿勢を変数 P[2]に記録します。
-
返されたすべての経路点をローカル変数に保存するために、計画された経路の保存コマンドを追加します。
Mech-Vizが返された経路には、5つの経路点(コンテナに入る点、アプローチ点、把持点、離れる点、コンテナから出る点)が含まれています。サンプルプログラムでは3つの経路点のみが保存されているため、計画された経路の保存コマンドを追加する必要があります。 変更前 変更後 31: CALL MM_GET_JPS(1,60,70,80) ; 32: CALL MM_GET_JPS(2,61,71,81) ; 33: CALL MM_GET_JPS(3,62,72,82) ;
32: CALL MM_GET_JPS(1,60,70,80) ; 33: CALL MM_GET_JPS(2,61,71,81) ; 34: CALL MM_GET_JPS(3,62,72,82) ; 35: CALL MM_GET_JPS(4,63,73,83) ; 36: CALL MM_GET_JPS(5,64,74,84) ;
-
アプローチ点(コンテナに入る点を含む)および把持点の位置レジスタ番号を調整します。
PR[60]はコンテナに入る点、PR[61]はアプローチ点、PR[62]は把持点です。 変更前 変更後 35: !move to approach waypoint ; 36: !of picking ; 37:J PR[60] 50% FINE ; 38: !move to picking waypoint ; 39:J PR[61] 10% FINE ;
38: !move to approach waypoint ; 39: !of picking ; 40:J PR[60] 50% FINE ; 41:J PR[61] 50% FINE ; 42: !move to picking waypoint ; 43:J PR[62] 10% FINE ;
-
ワークを把持するためにロボットハンドを閉じるDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後(例) 40: !add object grasping logic here, ; 41: !such as "DO[1]=ON" ; 42: PAUSE ;
44: !add object grasping logic here, ; 45: !such as "DO[1]=ON" ; 46: PAUSE ; 47: DO[1:OFF]=ON ;
-
離れる点(コンテナから出る点を含む)の位置レジスタ番号を調整します。
PR[63]は離れる点、PR[64]はコンテナから出る点です。 変更前 変更後 43: !move to departure waypoint ; 44: !of picking ; 45:J PR[62] 50% FINE
48: !move to departure waypoint ; 49: !of picking ; 50:J PR[63] 50% FINE ; 51:J PR[64] 50% FINE ;
-
ティーチング法を使用して配置の中間点と配置点を設定します。
ロボットを設定された中間点および配置点に移動させ、ロボットの位置姿勢をそれぞれP[3]とP[4]に記録します。
-
ワークを配置するためにロボットハンドを開くDOポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。
変更前 変更後 54: !add object releasing logic here, ; 55: !such as "DO[1]=OFF" ; 56: PAUSE ;
60: !add object releasing logic here, ; 61: !such as "DO[1]=OFF" ; 62: PAUSE ; 63: DO[1:OFF]=OFF ;
ロボットの把持・配置動作をテストするためのステップ実行
ロボットの把持と配置の動作を確認するためには、以下の手順に従って実行します。
-
ティーチペンダントのキースイッチをONにし、コントローラのスイッチをT1に回します。
-
ティーチペンダントの背面にあるイネーブルスイッチを押します(どちらでもかまいません)。
-
ティーチペンダントのSHIFTを押しながらFWDを押して、変更したサンプルプログラムを手動で実行します。
-
ロボットは把持・配置アプリケーションを自動的に実行し、ワークの把持と配置を完了します。
ロボットが正常にワークを把持し、配置することができれば、プログラムが正しく設定されていることが確認されます。
繰り返し把持と配置を実現するためのループ文を挿入
ロボットが一回の把持と配置を正常に完了できることを確認した後、プログラムにループ文を挿入して、ロボットが繰り返し把持と配置を実行できるようにします。
以下のループ文を追加してください。
17: LBL[1] ; ... 69: JMP LBL[1] ;
参考:変更後のサンプルプログラム
最終的に変更されたサンプルプログラムは以下の通りです。
1: !-------------------------------- ;
2: !FUNCTION: trigger Mech-Viz ;
3: !project and get planned path ;
4: !Mech-Mind, 2023-12-25 ;
5: !-------------------------------- ;
6: ;
7: !set current uframe NO. to 0 ;
8: UFRAME_NUM=0 ;
9: !set current tool NO. to 1 ;
10: UTOOL_NUM=1 ;
11: !move to robot home position ;
12:J P[1] 100% FINE ;
13: !initialize communication ;
14: !parameters(initialization is ;
15: !required only once) ;
16: CALL MM_INIT_SKT('8','192.168.110.207',50000,5) ;
17: LBL[1] ;
18: !move to image-capturing position ;
19:L P[2] 1000mm/sec FINE ;
20: !trigger Mech-Viz project ;
21: CALL MM_START_VIZ(2,10) ;
22: !get planned path, 1st argument ;
23: !(1) means getting pose in JPs ;
24: CALL MM_GET_VIZ(1,51,52,53) ;
25: !check whether planned path has ;
26: !been got from Mech-viz ;
27: !successfully ;
28: IF R[53]<>2100,JMP LBL[99] ;
29: !save waypoints of the planned ;
30: !path to local variables one ;
31: !by one ;
32: CALL MM_GET_JPS(1,60,70,80) ;
33: CALL MM_GET_JPS(2,61,71,81) ;
34: CALL MM_GET_JPS(3,62,72,82) ;
35: CALL MM_GET_JPS(4,63,73,83) ;
36: CALL MM_GET_JPS(5,64,74,84) ;
37: !follow the planned path to pick ;
38: !move to approach waypoint ;
39: !of picking ;
40:J PR[60] 50% FINE ;
41:J PR[61] 50% FINE ;
42: !move to picking waypoint ;
43:J PR[62] 10% FINE ;
44: !add object grasping logic here, ;
45: !such as "DO[1]=ON" ;
46: PAUSE ;
47: DO[1:OFF]=ON ;
48: !move to departure waypoint ;
49: !of picking ;
50:J PR[63] 50% FINE ;
51:J PR[64] 50% FINE ;
52: !move to intermediate waypoint ;
53: !of placing ;
54:J P[3] 50% CNT100 ;
55: !move to approach waypoint ;
56: !of placing ;
57:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
58: !move to placing waypoint ;
59:L P[4] 300mm/sec FINE ;
60: !add object releasing logic here, ;
61: !such as "DO[1]=OFF" ;
62: PAUSE ;
63: DO[1:OFF]=OFF ;
64: !move to departure waypoint ;
65: !of placing ;
66:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
67: !move back to robot home position ;
68:J P[1] 100% FINE ;
69: JMP LBL[1] ;
70: END ;
71: ;
72: LBL[99:vision error] ;
73: !add error handling logic here ;
74: !according to different ;
75: !error codes ;
76: !e.g.: status=2038 means no ;
77: !point cloud in ROI ;
78: PAUSE ;
これで、3Dビジョンシステムによるバラ積みされたワークの供給アプリケーションの導入が完了しました。