MERLICレシピ作成例3 スタッドボルト円筒度測定

画像検査用ノーコードツール MERLICでのスタッドボルトの両端ネジ軸芯をデータムとしたときの円筒部の同軸度を測定する方法を紹介します。


検査実施内容

透過照明でスタッドボルトを照射し撮像された画像において、両端部のネジ部の中心を結んだ軸を基準データムとし、円筒部の軸上の点とデータムの距離からズレ量を算出します。

今回は歪みを想定した検査であるため、円筒部の測定ポイントはスタッドボルト長さの中心部の1点で測定しています。
また実際はワークを180°回転させながら、ズレ量の最大値から円筒度を計算します。

0.全体フロー

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

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

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

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

出力の画像は次ステップの”マッチングによるアライメント””画像をアライメント””画像”に接続します。

2.画像アライメント

ワークの位置ずれ分を補正します。

ツールの”マッチングによるアライメント“をフローに追加しアライメントデータを取得します。
ツール追加後、画面中央上付近にある下向きの<ボタンをクリックすることで、現在の画像がトレーニング画像に設定されます。

画像の位置決めを行う為のエッジを円筒部のストレート及びネジ先端部に設定します。
(easy Touchで領域を選択すれば簡単に設定できます)

出力のアライメントデータを次ステップの”画像をアライメント””アライメントデータ”に接続します。

ツールの”画像をアライメント“をフローに追加し、位置を補正した画像を取得します。
出力の画像は本ステップ以降ツールの“画像”に接続します。

3. エッジ抽出範囲の作成

両端のネジ部、円筒部の中心軸を算出するためのエッジを抽出する範囲を指定します。

ツール”長方形を作成”をフローに配置しネジ部を抽出する範囲を指定します。今回は範囲は不完全ねじ部を含まないように2山程度の範囲としています。

出力の長方形は項目4で説明する”マッチングで位置決め”(ねじ右側の上下)の”ROI検索”と接続します。

再びツール”長方形を作成”を作成しネジ左側もエッジ抽出範囲を設定します。
出力の長方形も同様に”マッチングで位置決め”(ねじ左側の上下)の”ROI検索”と接続します。

再びツール”長方形を作成”を作成し円筒部もエッジ抽出範囲を設定します。
この後で行ツール”エッジを計測”では、1つのROIから1つのエッジしか検出しない為、ROIは上下に分けて2か所設定します。2つ目の範囲はCtrlボタンを押しながら設定します。

出力のROIは”エッジを計測””ROI”に接続します。

4.マッチングで位置決め (ネジ部)

ネジ部右上側、ネジ部右下側、ネジ部左上側、ネジ部左下側の外径部の座標値を取得します。

まずは右側ネジ部の上側の外径位置を取得します。
ツールの”マッチングによる位置決め“をフローに追加します。現在の画像をトレーニング画像を設定した後に、easy Touchにてエッジ抽出範囲を指定します。範囲はエッジが確実に抽出できる範囲にします。入力の”ROI検索”には項目3で設定したツール”長方形を作成”の出力の”長方形”を接続します。
またY方向(高さ方向)の中心はネジ山の上部に合わせるように調整してください。

同様に右側ネジ部の下側、左ネジ部の上側、下側もツールを配置し処理を作成します。

5.エッジを計測 (円筒部)

円筒部の外径座標を取得するためにツール”エッジを計測”を配置します。
入力のROIは項目3で設定した”長方形の作成””長方形”と接続します。

出力の線分は項目6で設定するツール”線分プロパティを取得””線分”と接続します。

6.線分プロパティの取得

円筒部のエッジを示す各線分の中心点を取得します。
ツール”線分のプロパティを取得”を配置し、入力の線分には項目5で設定した”エッジを計測””線分”と接続します。

出力はX中心とY中心を項目8で設定する”式を判定”に新規パラメータとして接続します。
なお出力データは、2つの値を持つ配列として出力されます。

7.式の判定 ネジ部エッジ外径座標から軸中心を算出

ネジ部の外径座標から軸中心座標を演算します。

ツール”式を判定”を配置します。入力パラメーターは項目4で出力した”X””Y”を接続し名称を変更しておきます。
今回はネジ上側のマッチング位置の”X”,”Y”をそれぞれ”X_U””Y_U”
ネジ下側のマッチング位置の”X”、”Y”をそれぞれ”X_L””Y_L”としています。

式には以下の2つの式により中心座標を求めます。出力パラメータ名は”Xout”、”Yout”に変更してあります。
Xout ← (X_U+X_L)*0.5
Yout ← (Y_U+Y_L)*0.5

ネジの右側、左側について同様の設定を行います。

8.式の判定 円筒部外径座標から軸中心を算出条件

円筒部の外径座標から軸中心座標を演算します。
ツールはネジ部の中心座標と同じく”式を判定”を配置します。
入力パラメーターには項目6で設定した”線分プロパティの取得””X中心””Y中心”を接続します。

式にはネジ部の時と同じような平均をとる式になりますが、Xin、Yinは配列データの為以下のようになります。
Xout ← (Xin[0]+Xin[1])*0.5
Yout ← (Yin[0]+Yin[1])*0.5

9.式の判定 ズレ量の演算

項目7,8で演算した両端のネジ部、円筒部の中心座標から両側ネジ部を基準軸とした場合の円筒部のズレ量を算出します。
本来は180°回転させズレ量の最大値から円筒度を計算しますが、今回は一断面のみで判定するものとしています。

入力パラメーターに項目7、8で演算したネジ部、円筒部のX、Y座標のデータを接続し名称をそれぞれ”Right_X””Right_Y””Left_X””Left_Y””Shaft_X””Shaft_Y”と変更します。
また一画素当たりの寸法(mm)を表す変数をpixelSizeとして登録し、現状の環境に合わせた値を入力します。hoseiというパラメーターにはレンズ歪みを考慮した補正値を入力してあります。

計算式を簡略化するために”rate”という変数を以下の式の作成で実施します。
rate ← (Shaft_X-Left_X)/(Right_X-Left_X)

次に円筒部からの基準ズレ量(変数は”out_of_position”)を以下の式により求めます。
out_of_position ← ((1-rate)Left_Y+rateRight_Y-(Shaft_Y+hosei))*pixelSize

ズレ量から円筒度を演算します(絶対値化、直径化)
runout ← abs(out_of_position)*2

”judge”という判定結果を表す変数の値を取得します。今回は閾値は0.1とし、0.1以下の場合は”judge”1という値が出力されます。
judge ← runout<=0.1

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

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

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