ソリューションの実装

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

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

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

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 画像と点群の例は以下にようです。

    camera 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 にワークとパレットの点群があり、かつシーンの物体点群を除外します。ワーク姿勢の偏差を許容するように、ROIの横・縦の値をパレットの寸法より100mm増やしたりすることができます。

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

    通常の場合、パラメータの初期値を使用します。シーンの点群に多くのノイズがある場合は、関連するパラメータを調整してノイズを除去してください。

点群前処理した後、実行ボタンをクリックして結果を確認します。

ワーク認識

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

  1. ワークモデルを作成して把持位置姿勢を設定します。

    • 点群モデルを作成します。ワークライブラリを開く をクリックしてワークライブラリを開きます。カメラで取得した点群から点群モデルを生成 します。

    • ワーク向きを識別するためのパラメータを調整します。

      ワークの向きを識別する必要がないプロジェクトでは、この手順をスキップしてください。

      位置姿勢を計算してマッチング結果をフィルタリング。ワークはリング状をしているので、その向きを認識するために位置姿勢を計算してマッチング結果をフィルタリングパラメータを調整します。ワークには対称性があるので対称性を手動で設定を選択し、Z軸を中心にをオンにして対称回数角度範囲をそれぞれ30±180°に設定します。

      重み付けモデルを設定 します。このようなワークの向きを認識するのは難しいので重み付けモデルを設定することが推奨されます。ワークライブラリウィンドウの右上の点群表示設定サーフェス点群のみを表示に設定してから重み付けモデルを設定モデル編集ボタンをクリックしワーク周辺の突出部分(以下の赤色の部分)を重み付けモデルとして設定します。

      set weight template

    • ワーク中心点と把持位置姿勢を設定します。通常、ワーク中心点は、幾何中心点を使用し、現場で使用するグリッパに合わせて把持位置姿勢を設定します。

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

    • ワークの対称性を有効にするために、ワーク認識の右の上級モードをオンにします。

    • マッチングモード:マッチング精度をアップするために、マッチングモードを自動的に設定をオフにし、低精度マッチングモード高精度マッチングモードをいずれもサーフェスマッチングに設定します。

    • 低精度マッチングの位置姿勢を調整またはフィルタリング:戦略を選択誤マッチングの可能性がある結果をフィルタリングに設定します。

    • 出力 - 出力結果の最大数:このパラメータ値をパレット満杯のワーク数に設定します。このプロジェクトでは、出力結果の最大数6 に設定しています。

それから、ステップを実行ボタンをクリックしてマッチングの効果を確認します。

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

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

後続のステップで把持位置姿勢に関連する処理が必要なため、ポートを選択 では 把持位置姿勢に関連するポート を選択し、カメラで取得した元の点群 にチェックを入れます。それから保存をクリックします。これでワーク認識ステップに対応する出力ポートが追加されます。以下の図に示します。

vision general settings effect

位置姿勢を調整

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

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

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

  2. 位置姿勢調整

    方向調整自動合わせを選択し、適用シーンZ軸方向合わせ(部品供給)に設定して、ロボットが指定方向に沿ってワークを把持するようにします。衝突を回避できます。

  3. 位置姿勢ソート

    ソート方法平面上のZ形状でソートに設定し、ワーク供給方向が決まっているのでマニピュレータによる設定方法で基準位置姿勢を設定し、そのX軸をパレットに平行するようにする必要があります。最適な把持順序を確保するために、行方向基準位置姿勢のX軸の正方向 に設定し、列方向基準位置姿勢のY軸の正方向 に設定します。

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

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

  5. 共通設定

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

経路計画

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

経路計画 ステップを選択し、設定ツール ボタンをクリックして、経路計画設定ツール 画面を表示して計画経路の実行方法を確認します。

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

viz overall

シーンの物体を設定

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

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

viz scene objects configuration effect

ロボットハンドを設定

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

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

  • しかしワークに当たる部分を作成する時にできる限り本物を再現するようにしてください。一方で、把持点に遠い部分に対しては大まかにしてもかまいません。複雑な構造を囲む直方体の凸包で表現することができます。このソリューションで使用するロボットハンドを以下で示します。

    viz end tool configuration effect

ワークフローを構築

シーンの物体とロボットハンドを設定した後、現場の必要に応じて経路計画ステップの経路計画設定ツールのワークフローを調整します。ワークをピックアップするワークフローは以下のようです。

viz adjust workflow overall

コンテナの上の固定点1と2は「移動」ステップであり、ロボット実機のティーチングポイントで外部に経路点を送信しません。残りの3つの移動ステップは外部に経路点を送信し、合わせて3つの経路点を送信します。

シミュレーションと試行

ツールバーのシミュレートをクリックすると、編集した経路計画設定ツールのワークフローをシミュレートし、ビジョンシステムを確認することができます。

ワークを整列してパレットに配置して経路計画設定ツールツールバーのシミュレートボタンをクリックして把持をシミュレートします。把持するたびにワークを再配置が必要です。シミュレーションを繰り返し、10回の把持をテストします。10 回のテストですべての把持が成功した場合、ビジョンシステムの構築に問題がないと判断できます。

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

ビジョン結果を出力

現在のプロジェクトのビジョン結果を通信コンポーネントに送信し、後続の把持タスクに使用します。

ロボットの把持と配置

ロボットプログラム作成

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

ABB サンプルプログラム MM_S3_Vis_Path は、必要な機能を基本的に満たします。このサンプルプログラムを基にして変更を加えることができます。MM_S3_Vis_Path プログラムの詳細な説明については、サンプルプログラム解説 をご参照ください。

変更時の注意事項

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

  1. IPCのIPアドレスとポート番号を指定します。MM_Init_Socket コマンドの IP アドレスとポート番号を、IPC の実際の IP アドレスとポート番号に変更してビジョンシステムと一致させます。

    変更前 変更後(例)
      MM_Init_Socket "127.0.0.1",50000,300;
      MM_Init_Socket "192.168.1.5",50000,400;
  2. ワークを把持するためにグリッパを閉じる DO ポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。

    変更前 変更後(例)
      !add object grasping logic here, such as "setdo DO_1, 1;"
      Stop;
      !add object grasping logic here, such as "setdo DO_2, 0;"
      setdo DO_2, 0;
  3. ワークを配置するためにグリッパを開く DO ポート信号を設定します。DOコマンドは、現場で実際に使用されているDOポート番号に従って設定する必要があります。

    変更前 変更後(例)
      !add object releasing logic here, such as "setdo DO_1, 0;"
      Stop;
      !add object releasing logic here, such as "setdo DO_2, 1;"
      setdo DO_2, 1;

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

MODULE MM_S3_Vis_Path
!----------------------------------------------------------
! FUNCTION: trigger Mech-Vision project and get planned path
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num toolid{5}:=[0,0,0,0,0];
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num label{5}:=[0,0,0,0,0];
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop_waypoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget drop:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS jointtarget jps{5}:=
[
    [[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.653,95.4782,-4.3661,-23.6568,-2.6275,-165.996],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
    [[-9.7932,85.483,6.0459,-20.5518,-3.0126,-169.245],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define local tooldata variables*LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];

PROC Sample_3()
    !set the acceleration parameters
    AccSet 50, 50;
    !set the velocity parameters
    VelSet 50, 1000;
    !move to robot home position
    MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
    !initialize communication parameters (initialization is required only once)
    MM_Init_Socket "192.168.1.5",50000,400;
    !move to image-capturing position
    MoveL camera_capture,v1000,fine,gripper1;
    !open socket connection
    MM_Open_Socket;
    !trigger NO.1 Mech-Vision project
    MM_Start_Vis 1,0,2,snap_jps;
    !get planned path from NO.1 Mech-Vision project; 2nd argument (1) means getting pose in JPs
    MM_Get_VisPath 1,1,pose_num,vis_pose_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
        Stop;
    ENDIF
    !close socket connection
    MM_Close_Socket;
    !save waypoints of the planned path to local variables one by one
    MM_Get_Jps 1,jps{1},label{1},toolid{1};
    MM_Get_JPS 2,jps{2},label{2},toolid{2};
    MM_Get_JPS 3,jps{3},label{3},toolid{3};
    !follow the planned path to pick
    !move to approach waypoint of picking
    MoveAbsJ jps{1},v1000,fine,gripper1;
    !move to picking waypoint
    MoveAbsJ jps{2},v1000,fine,gripper1;
    !add object grasping logic here, such as "setdo DO_2, 0;"
    setdo DO_2, 0;
    !move to departure waypoint of picking
    MoveAbsJ jps{3},v1000,fine,gripper1;
    !move to intermediate waypoint of placing
    MoveJ drop_waypoint,v1000,z50,gripper1;
    !move to approach waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move to placing waypoint
    MoveL drop,v300,fine,gripper1;
    !add object releasing logic here, such as "setdo DO_2, 1;"
    setdo DO_2, 1;
    !move to departure waypoint of placing
    MoveL RelTool(drop,0,0,-100),v1000,fine,gripper1;
    !move back to robot home position
    MoveAbsJ Home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE

把持テスト

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

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

名称 変数 解析

初期位置

home

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

Mech-Visionプロジェクトの位置姿勢を入力

snap_jps

ユーザーによりカスタマイズされた関節角度です。

撮影位置

camera_capture

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

中間点

drop_waypoint

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

配置位置

drop

ワークを配置する位置。

グリッパデータ

gripper1

ロボット移動時に使用するグリッパ。

ティーチング完了後、以下の表に示すようにワークを配置してからロボットを低い速度で動かして把持します。このソリューションでは、ワークが整列して並べられ、かつ供給時に異常がなければ把持のテストを行えば十分です。

把持のテスト

ワークの位置

説明図

整列して並べられた部品

picking test 1

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

この情報は役に立ちましたか?

ご意見・ご要望がございましたら、以下よりお寄せください:

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

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