ソリューションの実装
本節では、小型板金部品ソリューションの実装手順を説明します。まとめて言えば以下の流れに沿って進めます。
ビジョンシステムのハードウェア設置
ビジョンシステムのハードウェア設置は、ハードウェア機器(カメラおよび IPC)を実際の動作環境に統合し、ビジョンシステムの正常な動作をサポートするプロセスです。
この段階では、ビジョンシステムのハードウェアの取り付けと接続を完了させます。詳細については、ビジョンシステムのハードウェア設置 をご参照ください。
ロボット通信設定
ロボット通信設定を行う前に、ソリューションを取得します。クリックしてソリューション取得方法を確認します。
-
Mech-Vision を起動します。
-
Mech-Vision のようこそ画面で ソリューションライブラリから新規作成 をクリックし、ソリューションライブラリを開きます。
-
ソリューションライブラリの代表的な導入事例を選択し、右上の アイコンをクリックしてさらに多くのリソースをダウンロードします。それから表示されたウィンドウで確認をクリックします。
-
リソースを取得した後、バラ積みされたワークのピッキングの小型板金部品を選択して作成ボタンをクリックし、表示されたウィンドウに確認ボタンをクリックします。
ダウンロードした後、Mech-Vision ではこのソリューションは自動的に開かれます。
Mech-Mind ビジョンシステムとロボット側(ロボット、PLC もしくは上位システム)との通信を構築します。
小型板金部品ソリューションでは、標準インターフェース通信を使用します。詳細な手順説明は、標準インターフェース通信ご参照ください。
ハンド・アイ・キャリブレーション
ハンド・アイ・キャリブレーションとは、カメラ座標系とロボット座標系との対応関係を求めることを指します。ビジョンシステムにより取得した対象物の位置姿勢をロボット座標系に変換し、それによってロボットが正確に把持作業を完了するように制御します。
ハンド・アイ・キャリブレーションの使用ガイドを参考にして実行してください。
カメラを設置し、またはキャリブレーションを実施した後、ロボットとカメラの相対位置が変わったら再度ハンド・アイ・キャリブレーションを行ってください。 |
ビジョンプロジェクトの設定
通信設定とハンド・アイ・キャリブレーションを完了させたあと、Mech-Vision を使用してビジョンプロジェクトを設定します。
ビジョンプロジェクトの設定手順を下図に示します。
カメラを接続して画像を撮影する
-
使用するカメラを接続します。
Mech-Eye Viewer で接続するカメラを見つけて接続をクリックします。
-
カメラパラメータを調整します。
高品質で点群が完全な 2D 画像を取得するためにパラメータを調整します。詳細な調整方法は、PRO S パラメータをお読みください。
-
画像を取得します。
カメラを接続してパラメータグループを設定した後、対象物の写真を撮ります。上部の ボタンをクリックして一回だけ撮影します。すると対象物の 2D 画像と点群が表示されます。画像がはっきり見られて点群が完全でエッジもはっきりしているか確認します。使える 2D 画像と点群の例は以下にようです。
-
Mech-Vision でカメラを接続します。
カメラから画像を取得ステップをクリックして選択し、ステップパラメータで仮想モードをオフにして、カメラを選択をクリックします。
表示される画面で接続するカメラの右にある アイコンをクリックします。アイコンが に変わったらカメラの接続が完了です。それから、下図に示すように右のパラメータグループを選択します。
これでカメラ実機の接続が完了です。これ以上パラメータを調整する必要はありません。カメラから画像を取得ステップの右の アイコンをクリックしてこのステップを実行します。エラーメッセージが表示されなければ、カメラが正常に接続されて画像を撮影できることになります。
ワーク認識
本ソリューションではワーク認識ステップを使用して部品を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。以下のように進めます。
点群前処理
点群前処理を行い、各パラメータを調整してデータを前処理し、元の点群をより鮮明にします。これにより、認識精度と効率を向上させることができます。
点群前処理した後、実行ボタンをクリックします。以下のような結果が出てきます。
ワーク認識
点群前処理が完了した後、ワークライブラリでワークの点群モデルを作成し、ワーク認識ツールでモデルのマッチングに関連するパラメータを設定します。
-
ワークのモデルを作成します。
-
点群モデルを作成して把持位置姿勢を追加します。ワークライブラリを開くをクリックしてワークライブラリを開きます。STL ファイルをインポートして点群モデルを生成します。
-
-
認識パラメータを設定します。
-
ワーク認識 の右にある 上級モード を有効にします。
-
マッチングモード:マッチングモードを自動的に設定をオンにします。すると、このステップは自動的に低精度マッチングの設定と高精度マッチング設定のパラメータを調整します。
-
低精度マッチングの設定:マッチングにかかる時間を短縮するために、低精度マッチングの設定の実行モードをカスタムに、モデル点群の期待点数を 300 に設定します。
-
信頼度設定:間違ったマッチング結果を除去するために、信頼度の設定方式を自動に、信頼度しきい値を 0.5 に設定します。
-
出力-出力結果の最大数:経路計画の要件を満たす前提で、出力数を最小限に抑え、マッチングにかかる時間を短縮します。このプロジェクトでは、出力結果の最大数 を 20 に設定しています。
-
重なっ合っている結果を除去、重ねられている結果を除去:重なっ合っている結果を除去するために、重なっ合っている結果を除去と重ねられている結果を除去をオンにして、しきい値をそれぞれ 30%、20% に設定します。
-
それから、ステップを実行ボタンをクリックします。以下のような結果が出てきます。
コンテナの位置決め
コンテナは長方形なので、位置決めするには、ソリューションライブラリの実践例にある 3D 位置決めグループの標準コンテナの位置決めステップ組合せを使用すればいいです。以下のようにパラメータを設定します。
-
「文字列のリスト」ポート:Mech-Viz にあるコンテナの名前です。コンテナ位置を更新する時に使用します。
-
並進距離:コンテナ位置姿勢をコンテナ上面を中央に移動させます。ここでは、「-57.5mm」に設定します。
並進距離値 = -1 × 1/2 コンテナ高さ -
このステップ組合せを実行して、コンテナを位置決めしてその位置姿勢を Mech-Viz に送信し、かつコンテナ位置を更新します。
位置姿勢を一括調整
ワークの位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)の設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。以下のように進めます。
-
ロボット座標系におけるワーク位置姿勢を出力するために、 位置姿勢をロボット座標系に変換をチェックして変換を行います。
-
位置姿勢ソートを位置姿勢のX/Y/Z値でソートに、位置姿勢の指定値を Z値に、「ソート順序」を降順に設定します。
-
後続の経路計画にかかる時間を短縮するために、位置姿勢の Z 軸と基準方向との角度によって把持できないワーク位置姿勢を除去します。最大角度差を 70°に設定します。
-
現場の状況に応じて 3D ROI を設定し、範囲外のワーク位置姿勢を除去します。
-
共通設定
「共通設定」パネルに進み、新規ポート数を設定を 1 に設定します。このステップに入力ポートと出力ポートは 1つずつ追加されます。ワーク認識の把持位置姿勢の情報出力ポートを出力ステップに接続します。
経路計画
ワーク認識を完了された後、Mech-Viz で経路計画とロボットのプログラムを作成して把持を実行します。
以下のように経路計画を設定します。
シーンの物体の設定
シーンの物体をインポートして設定する目的は、実際の作業現場を再現することで、ロボットの移動経路を計画できるようにすることです。詳細な説明は、シーンの物体の設定をお読みください。
できる限り実際の現場を再現するように設定します。ここでは以下のように設定します。
ロボットハンドの設定
ロボットハンドを仮想空間に表示して衝突検出に使用するためにロボットハンドモデルを設定します。詳細な説明は、ロボットハンドの設定をお読みください。
|
ワークフローを構築
ワークフローとは、Mech-Viz でフローチャートの形式で作成されたロボット動作制御プログラムです。シーンの物体とロボットハンドを設定した後、ワークフローを調整します。ワークを把持するワークフローは以下のようになります。
標準インターフェース通信を使用する場合、以下のワークフローを実行します。
最初と最後の移動ステップはロボットティーチングポイントであり、外部デバイスに送信する必要はありません。他の移動ステップは外部に経路点を送信します。コンテナ内のスマート経路生成ステップは、2つの経路点を使用するので、このワークフローでは合わせて 5つの経路点を送信します。
シミュレーションと試行
ツールバーのシミュレートをクリックすると、Mech-Viz プロジェクトをシミュレートし、ビジョンシステムを確認することができます。
ワークをランダムにコンテナに配置して Mech-Viz ツールバーのシミュレートボタンをクリックして把持をシミュレートします。把持をシミュレートするたびにワークを再度配置する必要があります。繰り返して 10 回の把持をテストします。10 回のテストですべての把持が成功した場合、ビジョンシステムの構築に問題がないと判断できます。
シミュレーションに異常が発生した場合、よくある課題を参考にして解決してください。
ロボットの把持と配置
ロボットプログラムを作成
シミュレーションの効果に問題がなければ、FANUC ロボット把持・配置プログラムを作成することになります。
FANUC の標準インターフェースサンプルプログラム MM_S10_Viz_Subtask は、このソリューションに適用できます。このサンプルプログラムを基にして変更を加えることができます。MM_S10_Viz_Subtask サンプルプログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。
変更時の注意事項
本サンプルは 2つのプログラムで構成されています。サブタスクは Mech-Viz プロジェクトの実行をトリガーし、計画された経路を取得します。一方、メインタスクは取得した経路に基づいてロボットを移動させ、ロボットが把持領域から離れる際にサブタスクを実行して次の経路を事前に計画し、サイクルタイムを短縮します。サンプルプログラムを基にして以下の通り変更を行います。
-
サブタスク
-
返されたすべての経路点をローカル変数に保存するために、計画された経路の保存コマンドを追加します。
Mech-Viz から返された経路には、5つの経路点(コンテナに進入点、接近点、把持点、退出点、コンテナ提出点)が含まれています。サンプルプログラムには 3つの経路点のみが保存されているため、計画された経路の保存コマンドを追加する必要があります。 変更前 変更後(例) 22: CALL MM_GET_JPS(1,60,70,80) ; 23: CALL MM_GET_JPS(2,61,71,81) ; 24: CALL MM_GET_JPS(3,62,72,82) ;
22: CALL MM_GET_JPS(1,60,70,80) ; 23: CALL MM_GET_JPS(2,61,71,81) ; 24: CALL MM_GET_JPS(3,62,72,82) ; 25: CALL MM_GET_JPS(4,63,73,83) ; 26: CALL MM_GET_JPS(5,64,74,84) ;
-
-
メインタスク
-
ロボットハンド座標系を設定します。ティーチペンダント側のロボットハンド座標系 TCP が Mech-Viz 側の TCP と一致していることを確認します。現在選択されているロボットハンド座標系番号を、実際に使用するロボットハンドの座標系に設定します。
変更前 変更後(例) 11: !set current tool NO. to 1 ; 12: UTOOL_NUM=1 ;
11: !set current tool NO. to 3 ; 12: UTOOL_NUM=3 ;
数字を実際に使用するロボットハンドの番号に変更します。ここでは「3」は例です。 -
IPC の IP アドレスとポート番号を指定します。CALL MM_INIT_SKT コマンドの IP アドレスとポート番号を、IPC の実際の IP アドレスとポート番号に変更してビジョンシステムと一致させます。
変更前 変更後(例) 16: CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
16: CALL MM_INIT_SKT('8','127.1.1.2',50000,6) ;
-
コンテナ進入点、接近点、把持点のレジスタ番号を設定します。
変更前 変更後 32: !move to approach waypoint ; 33: !of picking ; 34:J PR[60] 50% FINE ; 35: !move to picking waypoint ; 36:J PR[61] 10% FINE ; ... 40: !move to departure waypoint ; 41: !of picking ; 42:J PR[62] 50% FINE ;
32: !move to approach waypoint ; 33: !of picking ; 34:J PR[60] 50% FINE ; 35:J PR[61] 50% FINE ; 36: !move to picking waypoint ; 37:J PR[62] 10% FINE ; ... 42: !move to departure waypoint ; 43: !of picking ; 44:J PR[63] 50% FINE ; 45:J PR[64] 50% FINE ;
変更されたサンプルプログラムには、PR[60]はコンテナ進入点、PR[61]は接近点、PR[62]は把持点、PR[63]は退出点、PR[64]はコンテナ退出点です。 -
ワークを把持するためにグリッパを閉じる DO ポート信号を設定します。ここでは、DO コマンドは、現場で実際に使用されている DO ポート番号に従って設定する必要があります。
変更前 変更後(例) 37: !add object grasping logic here, ; 38: !such as "DO[1]=ON" ; 39: PAUSE ;
38: !add object grasping logic here, ; 39: !such as "DO[1]=ON" ; 40: PAUSE ; 41: DO[1]=ON ;
-
ワークを配置するためにグリッパを開く DO ポート信号を設定します。ここでは、DO コマンドは、現場で実際に使用されている DO ポート番号に従って設定する必要があります。
変更前 変更後(例) 53: !add object releasing logic here, ; 54: !such as "DO[1]=OFF" ; 55: PAUSE ;
56: !add object releasing logic here, ; 57: !such as "DO[0]=OFF" ; 58: PAUSE ; 59: DO[0]=OFF ;
-
参考:変更後のサンプルプログラム
-
サブタスク
1: !-------------------------------- ;
2: !FUNCTION: run Mech-Viz project ;
3: !and get planned path in subtask ;
4: !(run together with ;
5: !MM_S10_Viz_Subtask) ;
6: !Mech-Mind, 2023-12-25 ;
7: !-------------------------------- ;
8: ;
9: F[11]=(ON) ;
10: !trigger Mech-Viz project ;
11: CALL MM_START_VIZ(2,10) ;
12: !get planned path, 1st argument ;
13: !(1) means getting pose in JPs ;
14: CALL MM_GET_VIZ(1,51,52,53) ;
15: !check whether planned path has ;
16: !been got from Mech-Viz ;
17: !successfully ;
18: IF (R[53]=2100) THEN ;
19: !save waypoints of the planned ;
20: !path to local variables one ;
21: !by one ;
22: CALL MM_GET_JPS(1,60,70,80) ;
23: CALL MM_GET_JPS(2,61,71,81) ;
24: CALL MM_GET_JPS(3,62,72,82) ;
25: CALL MM_GET_JPS(4,63,73,83) ;
26: CALL MM_GET_JPS(5,64,74,84) ;
27: ENDIF ;
28: F[11]=(OFF) ;
-
メインタスク
1: !-------------------------------- ;
2: !FUNCTION: run Mech-Viz project ;
3: !and get planned path in subtask ;
4: !(run together with ;
5: !MM_S10_Sub) ;
6: !Mech-Mind, 2023-12-25 ;
7: !-------------------------------- ;
8: ;
9: !set current uframe NO. to 0 ;
10: UFRAME_NUM=0 ;
11: !set current tool NO. to 3 ;
12: UTOOL_NUM=3 ;
13: !initialize communication ;
14: !parameters(initialization is ;
15: !required only once) ;
16: CALL MM_INIT_SKT('8','127.1.1.2',50000,6) ;
17: !move to robot home position ;
18:J P[1] 100% FINE ;
19: RUN MM_S10_SUB ;
20: LBL[1:LOOP] ;
21: !move to wait position for ;
22: !picking ;
23:L P[2] 1000mm/sec FINE ;
24: !wait until subtask program ;
25: !finished ;
26: WAIT (F[11]=OFF) ;
27: !check whether planned path has ;
28: !been got from Mech-Viz ;
29: !successfully ;
30: IF R[53]<>2100,JMP LBL[99] ;
31: !follow the planned path to pick ;
32: !move to approach waypoint ;
33: !of picking ;
34:J PR[60] 50% FINE ;
35:J PR[61] 50% FINE ;
36: !move to picking waypoint ;
37:J PR[62] 10% FINE ;
38: !add object grasping logic here, ;
39: !such as "DO[1]=ON" ;
40: PAUSE ;
41: DO[1]=ON ;
42: !move to departure waypoint ;
43: !of picking ;
44:J PR[63] 50% FINE ;
45:J PR[64] 50% FINE ;
46: !move to intermediate waypoint ;
47: !of placing, and trigger Mech-Viz ;
48: !project and get planned path in ;
49: !advance ;
50:J P[3] 50% CNT100 DB 10.0mm,CALL MM_S10_SUB ;
51: !move to approach waypoint ;
52: !of placing ;
53:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
54: !move to placing waypoint ;
55:L P[4] 300mm/sec FINE ;
56: !add object releasing logic here, ;
57: !such as "DO[0]=OFF" ;
58: PAUSE ;
59: DO[0]=OFF ;
60: !move to departure waypoint ;
61: !of placing ;
62:L P[4] 1000mm/sec FINE Tool_Offset,PR[2] ;
63: !move back to robot home position ;
64:J P[1] 100% FINE ;
65: JMP LBL[1] ;
66: END ;
67: ;
68: LBL[99:vision error] ;
69: !add error handling logic here ;
70: !according to different ;
71: !error codes ;
72: !e.g.: status=2038 means no ;
73: !point cloud in ROI ;
74: PAUSE ;
把持テスト
実際の生産の安定性を確保ために、変更されたサンプルプログラムを実行してロボットによる把持を試行します。詳細な説明については、標準インターフェース通信をテストをお読みください。
テストの前に、以下の点をティーチングします。
名称 | 変数 | 解析 |
---|---|---|
初期位置 |
P[1] |
ティーチングする初期位置。初期位置が、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする |
撮影位置 |
P[2] |
ティーチングする撮影位置。カメラが画像を撮影するときにロボットがいる位置。この位置では、ロボットハンドがカメラ視野を遮らないようにする |
中間点 |
P[3] |
ロボットの移動をスムーズにし、衝突を回避するために中間点を追加する |
配置位置 |
P[4] |
ワークを配置する位置 |
ティーチング完了後、以下の表に示すようにワークを配置してからロボットを低い速度で動かして把持します。
3つの段階に分けて把持します。