ソリューションの実装

現在ご覧いただいているのは最新版の内容です(V2.1.0)。異なるバージョンを参照する場合は、画面右上のボタンから切り替えが可能です。

■ ご利用中のバージョンが分からない場合はお気軽にサポート窓口までご連絡ください。

本節では、小型板金部品ソリューションの実装手順を説明します。まとめて言えば以下の流れに沿って進めます。

solution configuration overview

ビジョンシステムのハードウェア設置

ビジョンシステムのハードウェア設置は、ハードウェア機器(カメラおよび IPC)を実際の動作環境に統合し、ビジョンシステムの正常な動作をサポートするプロセスです。

この段階では、ビジョンシステムのハードウェアの取り付けと接続を完了させます。詳細については、ビジョンシステムのハードウェア設置 をご参照ください。

ロボット通信設定

ロボット通信設定を行う前に、ソリューションを取得します。クリックしてソリューション取得方法を確認します。
  1. Mech-Vision を起動します。

  2. Mech-Vision のようこそ画面で ソリューションライブラリから新規作成 をクリックし、ソリューションライブラリを開きます。

  3. ソリューションライブラリの代表的な導入事例を選択し、右上の get resource アイコンをクリックしてさらに多くのリソースをダウンロードします。それから表示されたウィンドウで確認をクリックします。

  4. リソースを取得した後、バラ積みされたワークのピッキング小型板金部品を選択して作成ボタンをクリックし、表示されたウィンドウに確認ボタンをクリックします。

    ダウンロードした後、Mech-Vision ではこのソリューションは自動的に開かれます。

Mech-Mind ビジョンシステムとロボット側(ロボット、PLC もしくは上位システム)との通信を構築します。

小型板金部品ソリューションでは、標準インターフェース通信を使用します。詳細な手順説明は、標準インターフェース通信ご参照ください。

ハンド・アイ・キャリブレーション

ハンド・アイ・キャリブレーションとは、カメラ座標系とロボット座標系との対応関係を求めることを指します。ビジョンシステムにより取得した対象物の位置姿勢をロボット座標系に変換し、それによってロボットが正確に把持作業を完了するように制御します。

ハンド・アイ・キャリブレーションの使用ガイドを参考にして実行してください。

カメラを設置し、またはキャリブレーションを実施した後、ロボットとカメラの相対位置が変わったら再度ハンド・アイ・キャリブレーションを行ってください。

ビジョンプロジェクトの設定

通信設定とハンド・アイ・キャリブレーションを完了させたあと、Mech-Vision を使用してビジョンプロジェクトを設定します。

ビジョンプロジェクトの設定手順を下図に示します。

vision overall

カメラを接続して画像を撮影する

  1. 使用するカメラを接続します。

    Mech-Eye Viewer で接続するカメラを見つけて接続をクリックします。

    vision click connect camera
  2. カメラパラメータを調整します。

    高品質で点群が完全な 2D 画像を取得するためにパラメータを調整します。詳細な調整方法は、PRO S パラメータをお読みください。

  3. 画像を取得します。

    カメラを接続してパラメータグループを設定した後、対象物の写真を撮ります。上部の vision click capture icon ボタンをクリックして一回だけ撮影します。すると対象物の 2D 画像と点群が表示されます。画像がはっきり見られて点群が完全でエッジもはっきりしているか確認します。使える 2D 画像と点群の例は以下にようです。

    vision image and cloud
  4. Mech-Vision でカメラを接続します。

    カメラから画像を取得ステップをクリックして選択し、ステップパラメータで仮想モードをオフにして、カメラを選択をクリックします。

    vision select camera

    表示される画面で接続するカメラの右にある vision connect camera before icon アイコンをクリックします。アイコンが vision connect camera after icon に変わったらカメラの接続が完了です。それから、下図に示すように右のパラメータグループを選択します。

    vision connect camera

    これでカメラ実機の接続が完了です。これ以上パラメータを調整する必要はありません。カメラから画像を取得ステップの右の vision run step camera icon アイコンをクリックしてこのステップを実行します。エラーメッセージが表示されなければ、カメラが正常に接続されて画像を撮影できることになります。

ワーク認識

本ソリューションではワーク認識ステップを使用して部品を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。以下のように進めます。

vision 3d target object recognition overall

点群前処理

点群前処理を行い、各パラメータを調整してデータを前処理し、元の点群をより鮮明にします。これにより、認識精度と効率を向上させることができます。

  1. ROI を設定します。

    認識対象領域を適切に設定し、干渉要因を除去することで認識効率を向上させます。

  2. パラメータを調整します。

    エッジ抽出効果ノイズ除去レベル点のフィルタリングを設定してノイズを除去します。

点群前処理した後、実行ボタンをクリックします。以下のような結果が出てきます。

vision point cloud preprocessing effect

ワーク認識

点群前処理が完了した後、ワークライブラリでワークの点群モデルを作成し、ワーク認識ツールでモデルのマッチングに関連するパラメータを設定します。

  1. ワークのモデルを作成します。

  2. 認識パラメータを設定します。

    • ワーク認識 の右にある 上級モード を有効にします。

    • マッチングモード:マッチングモードを自動的に設定をオンにします。すると、このステップは自動的に低精度マッチングの設定高精度マッチング設定のパラメータを調整します。

    • 低精度マッチングの設定:マッチングにかかる時間を短縮するために、低精度マッチングの設定の実行モードカスタムに、モデル点群の期待点数300 に設定します。

    • 信頼度設定:間違ったマッチング結果を除去するために、信頼度の設定方式自動に、信頼度しきい値0.5 に設定します。

    • 出力-出力結果の最大数:経路計画の要件を満たす前提で、出力数を最小限に抑え、マッチングにかかる時間を短縮します。このプロジェクトでは、出力結果の最大数20 に設定しています。

    • 重なっ合っている結果を除去、重ねられている結果を除去:重なっ合っている結果を除去するために、重なっ合っている結果を除去重ねられている結果を除去をオンにして、しきい値をそれぞれ 30%20% に設定します。

それから、ステップを実行ボタンをクリックします。以下のような結果が出てきます。

vision target object recognition effect

ステップのポートタイプを設定

Mech-Viz にビジョン処理の結果と点群を出力して経路を計画して衝突検出を実行するために、ステップのポートを設定する必要があります。

後続のステップでは把持位置姿勢を処理するので、ポートを選択把持位置姿勢に関連するポートをチェックします。コンテナを認識、位置決めするために、前処理後の点群をチェックします。保存 をクリックします。これでワーク認識ステップに対応する出力ポートが追加されます。以下の図に示します。

vision general settings effect

コンテナの位置決め

コンテナは長方形なので、位置決めするには、ソリューションライブラリの実践例にある 3D 位置決めグループの標準コンテナの位置決めステップ組合せを使用すればいいです。以下のようにパラメータを設定します。

  • 「文字列のリスト」ポート:Mech-Viz にあるコンテナの名前です。コンテナ位置を更新する時に使用します。

  • 並進距離:コンテナ位置姿勢をコンテナ上面を中央に移動させます。ここでは、「-57.5mm」に設定します。

    並進距離値 = -1 × 1/2 コンテナ高さ
  • このステップ組合せを実行して、コンテナを位置決めしてその位置姿勢を Mech-Viz に送信し、かつコンテナ位置を更新します。

位置姿勢を一括調整

ワークの位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。以下のように進めます。

vision adjust poses overall
  1. 位置姿勢転換

    ロボット座標系におけるワーク位置姿勢を出力するために、 位置姿勢をロボット座標系に変換をチェックして変換を行います。

  2. 位置姿勢ソート

    位置姿勢ソート位置姿勢のX/Y/Z値でソートに、位置姿勢の指定値Z値に、「ソート順序」を降順に設定します。

  3. 角度によるフィルタリング

    後続の経路計画にかかる時間を短縮するために、位置姿勢の Z 軸と基準方向との角度によって把持できないワーク位置姿勢を除去します。最大角度差70°に設定します。

  4. ROI外の位置姿勢を除去

    現場の状況に応じて 3D ROI を設定し、範囲外のワーク位置姿勢を除去します。

  5. 共通設定

    「共通設定」パネルに進み、新規ポート数を設定1 に設定します。このステップに入力ポートと出力ポートは 1つずつ追加されます。ワーク認識把持位置姿勢の情報出力ポートを出力ステップに接続します。

ワーク情報を出力

出力ステップを実行し、把持位置姿勢と把持位置姿勢の情報、前処理された点群、コンテナ名、コンテナ位置姿勢などの情報を Mech-Viz に出力して経路計画のために使用します。

経路計画

ワーク認識を完了された後、Mech-Viz で経路計画とロボットのプログラムを作成して把持を実行します。

以下のように経路計画を設定します。

viz overall

シーンの物体の設定

シーンの物体をインポートして設定する目的は、実際の作業現場を再現することで、ロボットの移動経路を計画できるようにすることです。詳細な説明は、シーンの物体の設定をお読みください。

できる限り実際の現場を再現するように設定します。ここでは以下のように設定します。

viz scene objects configuration effect

ロボットハンドの設定

ロボットハンドを仮想空間に表示して衝突検出に使用するためにロボットハンドモデルを設定します。詳細な説明は、ロボットハンドの設定をお読みください。

  • ロボットハンドの衝突モデルを作成するときに、細部まで考慮する必要はありません。

  • しかしグリッパ(フィンガー)の部分を作成する時にできる限り本物を再現するようにしてください。フィンガーに遠い部分に対しては大まかにしてもかまいません。複雑な構造を囲む直方体の凸包で表現することができます。以下にように、左のモデルを右のように簡略化することができます。

    viz end tool configuration effect

ワークフローを構築

ワークフローとは、Mech-Viz でフローチャートの形式で作成されたロボット動作制御プログラムです。シーンの物体とロボットハンドを設定した後、ワークフローを調整します。ワークを把持するワークフローは以下のようになります。

viz adjust workflow overall

標準インターフェース通信を使用する場合、以下のワークフローを実行します。

viz adjust workflow non master

最初と最後の移動ステップはロボットティーチングポイントであり、外部デバイスに送信する必要はありません。他の移動ステップは外部に経路点を送信します。コンテナ内のスマート経路生成ステップは、2つの経路点を使用するので、このワークフローでは合わせて 5つの経路点を送信します。

シミュレーションと試行

ツールバーのシミュレートをクリックすると、Mech-Viz プロジェクトをシミュレートし、ビジョンシステムを確認することができます。

ワークをランダムにコンテナに配置して Mech-Viz ツールバーのシミュレートボタンをクリックして把持をシミュレートします。把持をシミュレートするたびにワークを再度配置する必要があります。繰り返して 10 回の把持をテストします。10 回のテストですべての把持が成功した場合、ビジョンシステムの構築に問題がないと判断できます。

シミュレーションに異常が発生した場合、よくある課題を参考にして解決してください。

ロボットの把持と配置

ロボットプログラムを作成

シミュレーションの効果に問題がなければ、FANUC ロボット把持・配置プログラムを作成することになります。

FANUC の標準インターフェースサンプルプログラム MM_S10_Viz_Subtask は、このソリューションに適用できます。このサンプルプログラムを基にして変更を加えることができます。MM_S10_Viz_Subtask サンプルプログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。

変更時の注意事項

本サンプルは 2つのプログラムで構成されています。サブタスクは Mech-Viz プロジェクトの実行をトリガーし、計画された経路を取得します。一方、メインタスクは取得した経路に基づいてロボットを移動させ、ロボットが把持領域から離れる際にサブタスクを実行して次の経路を事前に計画し、サイクルタイムを短縮します。サンプルプログラムを基にして以下の通り変更を行います。

  • サブタスク

    1. 返されたすべての経路点をローカル変数に保存するために、計画された経路の保存コマンドを追加します。

      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) ;
  • メインタスク

    1. ロボットハンド座標系を設定します。ティーチペンダント側のロボットハンド座標系 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」は例です。
    2. 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) ;
    3. コンテナ進入点、接近点、把持点のレジスタ番号を設定します。

      変更前 変更後
        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]はコンテナ退出点です。
    4. ワークを把持するためにグリッパを閉じる 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 ;
    5. ワークを配置するためにグリッパを開く 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つの段階に分けて把持します。

第一段階:干渉なし

ワークの位置

説明図

正面が上向きでコンテナの真ん中にある

picking test 1

裏面が上向きでコンテナの真ん中にある

picking test 2

側面が上向きでコンテナの真ん中にある

picking test 3

コンテナのエッジ・隅にある

picking test 4

picking test 5

第二段階:隣接するワークの干渉あり

ワークの位置

説明図

絡まり

picking test 6

重ねあり

picking test 7

第三段階:実際のシーンを再現

ワークの位置

説明図

実際のシーンを再現したバラ積み

picking test 8

上記のテストで、いずれも正常に把持できれば、実装可能なビジョンシステムが完成したことになります。

Mech-Mindは、お客様のプライバシーを重視しています

このサイトでは最高の体験を提供するために Cookie を使用しています。サイトの閲覧を続ける場合、Cookie の使用に同意したことになります。「拒否する」を選択すると、このサイトを訪れた際に追跡や記憶が行われないように単独の Cookie が使用されます。