MERLICレシピ作成例1 ベアリング部品表裏判別

画像検査用ノーコードツール MERLICでのロボットピッキングにおける部品表裏判定及びワーク中心座標の取得するためのフロー作成方法を紹介します


検査実施内容

ベアリングレース部品をロボットで整列させるため、ワークを検出し、表裏判定とワークの(画像中心からの)座標を算出します。

今回は溝の無い方を表としています。

0.全体フロー

MERLICで作成したフローは以下のようになります。

簡単にまとめると、前処理した画像を表側、裏側ともにマスター画像で”マッチングで位置決め”処理を行い、スコアの高いマスター画像の表裏と同じ表裏と判定します。
またその”マッチングで位置決め”で得られたX,Y座標(pixel)と、画像素子サイズからカメラ中心からのワーク座標を計算し出力します。

処理フロー
MVapp結果

1.画像ソース – 画像の取得

ツールの”画像ソース“を選択し検査画像を取得します。入力パラメータである”画像ソース名”にはRTEで設定したソースを選択します。

出力の画像は次ステップの”画像ノイズ削減””画像”に接続します。
(今回は画像ファイルを保存するため、画像をファイルに保存へも接続しています)

2.画像ノイズ削減

研削目の影響をなくすため入力パラメーターでフィルタ処理を実施します。

入力パラメータの”手法”「binominal」を選択し、”マスク距離”は3としています。
マスク半径はフィルタをかける範囲ですが、大きすぎると後の処理でエッジが検出しにくくなるため、後の処理の画像を見ながら判断します。
出力パラメータの”強調画像”は次ステップの”明るさを適合””画像”に接続します。

3. 明るさの適合

裏面(溝アリ側)の曲面の反射部の影響をなくすため、オフセット値にマイナスの数値を入力し全体の輝度を下げます。

入力パラメータの”ゲイン”1.0、”オフセット”は-55としています。
出力の適合画像は次ステップの表側、裏側の”マッチングで位置決め””画像”に接続します。

4.マッチングで位置決め 表側

まずはトレーニング画像(マスター画像)を登録します。
ワークを一番状況の良い位置(今回は真ん中)に置き、ツールバーの実行ボタン▷を押して処理を適応させます。

画面中央上付近にある下向きの<ボタンをクリックすることで、現在の画像がトレーニング画像に設定されます。

次にマッチングの為のエッジを表示させます。
トレーニング画像をクリックし、ROI選択で円を選択し、ベアリングの外形が収まるように範囲を決定します。
このときROI円の中心は画像のベアリングの中心となるべく一致するように設定してください。
(一度おいてしまった後でも、円中心の十字をクリックすれば動かせます)

入力パラメータは変形許容範囲を追加すると良いと思います。
また出力はマッチングが成功したかどうかを示す「ツール状態」、マッチングの「スコア」、検出範囲の中心座標「X」、「Y」を後処理である条件分岐や式の判定に接続します。

5.マッチングで位置決め 裏側

裏側のトレーニング画像の設定も基本的には表側と同じです

6.条件分岐 検出有無

どちらか一方でもマッチングで検出したかどうかを分岐するためのツールになります。

入力パラメータには5,6で設定したマッチングツールのツール状態を入力します。
条件式には

ツール状態表[0] == 0 or ツール状態裏[0] == 0

と入力することでどちらか一方のマッチングが成立した場合に、出力の「条件」で接続したツールにトリガが発生します。
また両側ともマッチング不成立の場合は、「デフォルト」で接続したツールへのトリガが発生します。
今回は「条件」は「条件分岐:両側検出の場合」、「デフォルト」は「式を判定:検出できなかった場合」へ接続します。

7.条件分岐 両側で検出したか

どちらか一方でもマッチングで検出したかどうかを分岐するためのツールになります。

入力パラメータには5,6で設定したマッチングツールのツール状態を入力します。
条件式には

ツール状態表[0] == 0 and ツール状態裏[0] == 0

とします。

出力の「条件」は「条件分岐:表のがスコアが高い場合」、「デフォルト」は「条件分岐:表のみ検出の場合」へ接続します。

8.条件分岐 表のがスコアが高い場合

両方マッチングが成立している場合はスコアの高い方を選択します。

入力パラメータには5,6で設定したマッチングツールのスコアを入力します。
条件式には

スコア_表 > スコア_裏

とします。

出力の「条件」は「式を判定:表を採用」、「デフォルト」は「式を判定:裏を採用」へ接続します。

9.条件分岐 表のみ検出の場合

片側のみマッチングが成立している場合はマッチングが成立している方を選択します。

入力パラメータには5で設定したマッチングツールのツール状態を入力します。
条件式には

ツール状態[0] == 0

とします。

出力の「条件」は「式を判定:表を採用」、「デフォルト」は「式を判定:裏を採用」へ接続します。

10.式の判定 表を採用

表を選択した場合の出力する変数を計算します。
入力パラメータには入力パラメータには5で設定したマッチングツールの「X」、「Y」を使用します。

式の追加により「Success1」、「IsFront1」、「XCoord1」、「YCoord1」を追加します。

Success1 = 1
IsFront1 = 1
XCoord1 = X-720
YCoord1 = Y-540

出力の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」は「式を判定:変数まとめ」の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」へそれぞれ接続します。

11.式の判定 裏を採用

裏を選択した場合の出力する変数を計算します。
入力パラメータには入力パラメータには6で設定したマッチングツールの「X」、「Y」を使用します。

式の追加により「Success1」、「IsFront1」、「XCoord1」、「YCoord1」を追加します。

Success1 = 1
IsFront1 = 0
XCoord1 = X-720
YCoord1 = Y-540

出力の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」は「式を判定:変数まとめ」の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」へそれぞれ接続します。

12.式の判定 検出できなかった場合

検出できなかった場合の出力する変数を計算します。

式の追加により「Success1」、「IsFront1」、「XCoord1」、「YCoord1」を追加します。

Success1 = 0
IsFront1 = 0
XCoord1 = 0
YCoord1 = 0

出力の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」は「式を判定:変数まとめ」の「Success1」、「IsFront1」、「XCoord1」、「YCoord1」へそれぞれ接続します。

13. 式の判定 変数統合

判定として出力する変数「Success」、「IsFront」、「XOffset」、「YOffset」を計算します。

入力パラメータを「Success1」、「IsFront1」、「XCoord1」、「YCoord1」とし、10,11,12で作成したツールのそれぞれの同名のパラメータと接続しています。
また出力する変数の座標はピクセル値からmmへ変換するため、ピクセルサイズ=0.104を定数として入力してあります。

式の判定から「Success」、「IsFront」、「XOffset」、「YOffset」を追加し、出力パラメータからMVApp結果に追加します。

Success = Success1
IsFront = IsFront1
XOffset = round((Xcoord1 * ピクセルサイズ)*100)/100.0
YOffset = round((Ycoord1 * ピクセルサイズ)*100)/100.0

これで判定を行うまでの記述は終了です。
以降は、Frontendへ表示するための文字列の処理等ですので省いております。

MVAppファイルを見てみたいという方はご気軽にお問い合わせから連絡ください。

またMERLICの使い方についてはリンクス社のオンデマンド配信がありますので、こちらも参考になると思います。