ソリューションの実装

現在ご覧いただいているのは最新版の内容です(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 画像を取得するためにパラメータを調整します。詳細な調整方法は、LSR L パラメータをお読みください。

  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. ワークのモデルを作成します。

    ワークライブラリを開くをクリックしてワークライブラリを開きます。STL ファイルをインポートして点群モデルを生成します。

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

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

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

    • 追加の高精度マッチング:追加の高精度マッチングを有効化にして 2 回目のサーフェス高精度マッチングを行い、Z 方向の把持精度をアップします。

    • 信頼度設定:信頼度の設定方式手動に、共同スコアリング戦略サーフェスとエッジの両方を考慮に、サーフェスマッチングの信頼度しきい値を高く(例えば 0.8)に設定し、誤ったマッチング結果を除去します。

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

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

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

vision target object recognition effect

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

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

ロボットがワークを正常に把持するように、ワークの中心点を調整し、そのZ軸がワーク中心を指すようにします。ポートを選択対象物の中心点に関連するポート前処理後の点群をチェックします。それから保存ボタンをクリックします。これでワーク認識ステップに対応する出力ポートが追加されます。

ワーク認識(箱認識)

本ソリューションではワーク認識ステップを使用してコンテナ箱を認識します。ワーク認識ステップの設定ツールをクリックしてワーク認識設定ウィンドウで設定を進めます。主な設流れは下図に示します。

vision 3d target object recognition overall

点群前処理

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

  1. ROI を設定します。

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

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

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

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

vision bin point cloud preprocessing effect

ワーク認識

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

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

    点群モデルを作成して把持位置姿勢を追加します。ワークライブラリを開く をクリックしてワークライブラリを開きます。カメラで取得した点群から点群モデルを生成し、把持位置姿勢を手動で設定します。

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

    • マッチングモード:マッチングモードを自動的に設定をオンにします。

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

    • 出力-出力結果の最大数:コンテナを認識するので出力結果の最大数1 に設定します。

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

vision bin recognition effect

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

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

実際のコンテナ位置の情報を取得するために、ポートを選択対象物の中心点に関連するポートを選択して保存ボタンをクリックします。これでワーク認識ステップに対応する出力ポートが追加されます。以下の図に示します。

vision bin general settings effect

位置姿勢を調整(ワーク位置姿勢)

ワークの位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。主な設流れは下図に示します。

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

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

  2. 位置姿勢調整

    方向調整基準点を指すを選択し、指す軸Z軸に設定して、ロボットが指定方向に沿ってワークを把持するようにします。衝突を回避できます。

  3. 位置姿勢ソート

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

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

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

  5. 共通設定

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

位置姿勢を調整(コンテナ箱位置姿勢)

コンテナ箱の位置姿勢を取得した後、位置姿勢を一括調整(V2)ステップを実行して調整します。位置姿勢を一括調整(V2)設定ツールをクリックして位置姿勢調整ツールを開いて設定を行います。主な設流れは下図に示します。

vision adjust bin poses overall
  1. 位置姿勢処理戦略を選択します。

    ワークが入った深いかごなので Bin を選択します。

  2. 位置姿勢転換を行います。

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

  3. 位置姿勢調整指定方向に沿って位置姿勢を移動します。

    ロボット座標系Z軸の正方向を選択し、コンテナの位置姿勢を変えます。手動で移動距離-285mm に設定し、コンテナ位置姿勢を上表面から中心点に移動します。後で Mech-Viz のコンテナ衝突モデル更新に使用できます。

    移動距離値 = -1 × 1/2 コンテナ高さ
  4. 角度によるフィルタリング

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

  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 normal picking

以下は、異常なロボット把持(端で把持する)です。

viz anormal picking

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

viz adjust workflow non master

シミュレーションと試行

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

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

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

ロボットの把持と配置

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

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

Kawasaki ロボットのサンプルプログラムKawasaki ロボットの把持サンプルプログラムを使用すればいいです。対応できない機能については、このサンプルプログラムを基にして変更を加えることができます。Kawasaki ロボットの把持サンプルプログラムに関する詳細な説明は、サンプルプログラム説明をお読みください。

変更時の注意事項

サンプルプログラムを基にして以下の通り変更を行います。

  1. TCP を定義します。

    変更前 変更後(例)
      TOOL gripper ;set TCP
      point tcp1 = trans(0,37.517,390.13,-15,0,0)
      TOOL tcp1 ;set TCP
  2. DO ポートのグリッパ制御ロジックを設定してグリッパを初期状態にします。

    変更前 変更後(例)
      /
      signal 10,-9;set do off
  3. IPC の IP アドレスとポート番号を指定します。MM_Init_Socket コマンドの IP アドレスとポート番号を、IPC の実際の IP アドレスとポート番号に変更してビジョンシステムと一致させます。

    変更前 変更後(例)
      ;Set ip address of IPC
      call mm_init_skt(127,0,0,1,50000)
      ;Set ip address of IPC
      call mm_init_skt(128,1,1,2,60000)
  4. Mech-Viz プロジェクトをトリガーし、分岐 3 に切り替えてパレタイズの記録をリセットしてから分岐 1 に切り替えてビジョン処理による認識を行います。Mech-Viz から受信した把持経路のステータスコードによって分岐 2 に切り替えてビジョン処理による認識を行うかどうか決定します。

    変更前 変更後
      ;Run Viz project
      call mm_start_viz(1,#start_viz) ;(2,#start_viz) used for ETH viz initial position
      twait 0.1
      ;set branch exitport
      ;call mm_set_branch(1,1)
      ;get planned path
      call mm_get_vizdata(2,pos_num,vispos_num,ret1)
      ;Init Palletizing
      CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
      TWAIT 0.1
      call mm_set_branch(7,3);init Palletizing
      TWAIT 0.1
      CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
      TWAIT 0.1
      call mm_set_branch(7,1)
    10 flag =1
      CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
      IF ret1<>2100 THEN
        CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
        TWAIT 0.1
        call mm_set_branch(7,2)
        flag =2
        CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
  5. ステータスコード「2100」(正常に Mech-Viz から経路を受信時)を取得した後、ロボットをティーチングする撮影位置に移動します。

    変更前 変更後(例)
      /
      JMOVE #camera_capture;move to camera_capture position
  6. ロボットを計画した経路に沿って把持点に移動させます。DO ポートを設定して把持を実行する信号を追加し、グリッパを閉じてワークを把持します。

    変更前 変更後(例)
      ;follow the planned path to pick
      for count =1 to pos_num
        speed speed[count]
        LMOVE movepoint[count]
        if count == vispos_num then
            ;add object grasping logic here
      ;follow the planned path to pick
      JMOVE #movepoint[1]
      JMOVE #movepoint[2]
      JMOVE #movepoint[3]
      JMOVE #movepoint[4]
      LMOVE #movepoint[5]
      BREAK
      signal 9,-10;set do on
      TWAIT 0.2
      LMOVE #movepoint[6]
      LMOVE #movepoint[7]
  7. flag 結果に基づいて次の操作を決定します。flag=2 の場合、グリッパを開いてワークを放棄します。それ以外の場合には配置を実行します。

    変更前 変更後
      /
      IF flag ==2 then
        break
        signal 10,-9;set do off
        twait 0.2
        JMOVE #movepoint[8]
        JMOVE #movepoint[9]
        TWAIT 2
      ELSE
        JMOVE #movepoint[8]
        end
      CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
      TWAIT 0.1
      call mm_set_branch(7,1)
    
    ;go to drop location
        if flag ==1 then
          JMOVE #movepoint[9]
          JMOVE #movepoint[10]
          break
          signal 10,-9
          twait 0.2
          JMOVE #movepoint[11]
        end
  8. ワークを配置するためにグリッパを開く DO ポート信号を設定します。DO コマンドは、現場で実際に使用されている DO ポート番号に従って設定する必要があります。

    変更前 変更後(例)
      ;add object releasing logic here
      signal 10,-9;set do on
  9. ロボットが繰り返し把持と配置を実行するためのループ文を挿入します。

    変更前 変更後(例)
      /
      JMOVE #camera_capture;move to camera_capture position
      GOTO 10

参考:変更後のサンプルプログラム

.PROGRAM vision_sample_2()
;----------------------------------------------------------
;* FUNCTION:simple pick and place with Mech-Viz
;* mechmind
;----------------------------------------------------------
  accuracy 1 always
  speed 30 always
  point tcp1 = trans(0,37.517,390.13,-15,0,0)
  TOOL tcp1 ;set TCP
  signal 10,-9;set do off
  Home ;move robot home position
  JMOVE camera_capture ;move to camera_capture position
  break
  pos_num = 0
  ;Set ip address of IPC
  call mm_init_skt(128,1,1,2,60000)
  twait 0.1
  ;Set vision recipe
  ;call mm_switch_model(1,1)
  ;Init Palletizing
  CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
  TWAIT 0.1
  call mm_set_branch(7,3);init Palletizing
  TWAIT 0.1
  CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
  TWAIT 0.1
  call mm_set_branch(7,1)
10 flag =1
  CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
  IF ret1<>2100 THEN
    CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
    TWAIT 0.1
    call mm_set_branch(7,2)
    flag =2
    CALL mm_get_vizdata(1,pos_num,vispos_num,ret1)
  if ret1 <> 2100
    JMOVE #camera_capture;move to camera_capture position
  end
  for count=1 to pos_num
    call mm_get_pose(count,&movepoint[count],label[count],speed[count])
  end
  ;follow the planned path to pick
  JMOVE #movepoint[1]
  JMOVE #movepoint[2]
  JMOVE #movepoint[3]
  JMOVE #movepoint[4]
  LMOVE #movepoint[5]
  BREAK
  signal 9,-10;set do on
  TWAIT 0.2
  LMOVE #movepoint[6]
  LMOVE #movepoint[7]
  IF flag ==2 then
    break
    signal 10,-9;set do off
    twait 0.2
    JMOVE #movepoint[8]
    JMOVE #movepoint[9]
    TWAIT 2
  ELSE
    JMOVE #movepoint[8]
    end
  CALL mm_start_viz(2,#start_viz);(2,#start_viz) used for ETH viz initial position
  TWAIT 0.1
  call mm_set_branch(7,1)

;go to drop location
    if flag ==1 then
      JMOVE #movepoint[9]
      JMOVE #movepoint[10]
      break
      twait 0.2
      JMOVE #movepoint[11]
    end
  signal 10,-9;set do on
  JMOVE #camera_capture;move to camera_capture position
  GOTO 10
END

把持テスト

実際の生産の安定性を確保ために、変更されたサンプルプログラムを実行してロボットによる把持を試行します。詳細な説明については、標準インターフェース通信をテストをお読みください。

テストの前に、以下の点をティーチングします。

名称 変数 解析

(TCP)ツールセンターポイント

TCP

変数 gripper によって定義され、ティーチペンダントでティーチングしてください

初期位置

home

ティーチングする初期位置。初期位置は、把持するワークや周辺機器から離れ、カメラの視野を遮らないようにする必要があります。

撮影位置

camera_capture

ティーチングする撮影位置。カメラが画像を撮影するときにロボットがいる位置。この位置では、ロボットハンドがカメラ視野を遮らないようにする必要があります。

中間点

movepoint[8]

ロボットの移動をスムーズにし、衝突を回避するために中間点を追加する

配置位置

movepoint[11]

ワークを配置する位置

ティーチング完了後、以下の表に示すようにワークを配置してからロボットを低い速度で動かして把持します。

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 が使用されます。