見出し画像

壁3点測定によるワーク座標系の求め方

長方形のワークがあり、その2辺から寸法が出ている穴を開ける、みたいなケースで、ワークの心出し、つまりワーク原点を設定する場合は非常に簡単です。1辺にタッチセンサ、タッチプローブ、アキューセンタでも何でもいいですがとにかく位置を拾って、Xのゼロセット、Yも同様にもう一辺を拾ってゼロセット、そして今ゼロセットした位置の機械座標系をチェックして、それをG54などワーク座標系に入れるだけです。これで図面上の原点を、機械にワーク座標系として教えることができたので、図面の言葉(寸法)でプログラムを書いていけば、その通りの位置に穴が開くことになります。
また、すべてをフルに削り出しで作るような場合も、素材形状は残りませんのでこれも非常にざっくりワーク原点を設定できます。極端に言えば、1m×1mの素材から、10mm角の製品を削りだそうとした場合まあよっぽど端っこじゃない限りどこをワーク原点にしても別に加工はできます。

では、素材がもっと複雑な形状をしていて、かつ素材面が残り、加工部と素材部の位置関係が要求されるようなワークの場合、具体的に言えば鋳造、鍛造などで作られた素材を加工していく場合、どのように心出しを行うかを自分の備忘録も兼ねて書いてみます。

穴ー壁によりワーク原点を求める方法

1個の穴と、1個の壁を利用して、ワークの姿勢を求める方法です。あらかじめ素材に基準となる穴と壁をつけておく必要があります。素形材を作る人はこれを基準としてワークの輪郭の出来栄えを評価しますし、加工をする人もこれを基準として素材に対する加工の位置関係を評価します。
まずイメージしやすいように穴1点しか基準がない場合を考えます。そしてマシニングには治具が載っていて、この治具にワークの穴に対応するピンが立っているものとします。そしてワークをこの治具にセットすると、穴により動きが規制されるので、設備に対してワークのXY方向の位置は決まることになります。このときZ方向は別途3点で別のZ基準により受ける必要がありますが、これは難しいことないので今は気にしないことにします。
ただこのままだと穴を中心としてワークは自由に回転する状態なので、あとはワークの回転を止めるピンをワークの壁に当ててやれば、ワークの設備に対する位置を完全に固定することができ、この先同じ基準を持つワークであれば未来永劫同じ位置に固定できるわけです。
治具で位置を決める場合はこれでいいのですが、加工が必要な姿勢の都合上そうもいかない場合もあります。この場合はワークは輪郭など基準でも何でもないラフな面を治具で受けて、本来あるべき位置から±1mmとか、角度1度以内とか、あくまで”だいたいあってる”状態でワークを固定します。そしてタッチプローブで、穴と壁の位置を測定して、計算でワークの姿勢を正確に求める必要があります。

穴-壁方式

図で簡単に説明します。まず治具でピンにより穴を受け、XY方向を規制した例と同じように穴をタッチプローブで測定します。このとき、タッチプローブで得られる値は機械座標系での穴位置Aの座標です。で、本来あってほしいワークの位置にワークを置けていた場合に、Aがいるべき機械座標(これは図面から求める)と比較します。そうすると基準に対してAがXYそれぞれにどれくらいずれているかわかるので、XY位置のずれは把握できます。
次に角度を測ります。壁BのY方向にタッチプローブを当て、Bの機械座標系でのYを測定します。そうすると、AとBを結んだ直線ができます。この直線の角度のずれを、実測値と図面値で比較すれば、ワークがどれくらい回転角をもって固定されているかがわかることになります。これでワーク姿勢は完全に求まったわけです。
そして今は素材基準穴Aを回転中心として、どれくらいワークが傾いているかを計算したわけですが、実際に設定するワーク原点、つまり図面原点は素材基準穴とは一致していません。なので、この値をもとに図面原点を中心とした場合の回転、またXY位置のずれに変換する必要はあります。これを説明しだすとややこしくなるので、今回は省きます。

壁三点によりワーク原点を求める方法

本題です。3点(Y1・Y2・X1)をプロービングするだけで、
ワークの 回転角 θワーク原点を求める方法を
「図解 → 数式 → マクロ」の順にまとめます。

壁三点の位置関係

Y1とY2はY方向の基準壁、X1はX方向の基準壁です。この三点で、ワークのXY位置と回転角を完全に規制することができます。三点を治具のピンで受けることを想像すれば位置が規制されることは直観的に理解しやすいと思いますが、測定による座標値から計算するとなると、まず第一印象では難しそうです。一つ一つ整理していきます。

● 図面上(ワーク座標系)

  • Y1 と Y2 はワークの Y方向の基準壁

  • この2点を結ぶと「基準線」ができる

  • X1 はワークの X方向の基準点

● 現物(機械座標系)

実際のワークは、理想位置から少しだけXY位置がずれて、かつ回転角θだけずれておかれているものとします。


座標系と記号の定義

● 図面値(ワーク座標系)

それぞれの基準壁のXY座標です。図面値はワーク座標系なので小文字で表します。

$${ Y1 = (y1_x,\ y1_y) }$$
$${ Y2 = (y2_x,\ y2_y) }$$
$${ X1 = (x1_x,\ x1_y) }$$

● プローブ実測値(機械座標系)

それぞれの基準壁の実測したXY座標です。実測値は機械座標系なので大文字で表します。
なおY1,Y2はX方向の位置は存在しないというか、規制をしていないので測定ができません(必要もない)ので、Y座標のみです。X1についても同様にX座標のみ定義しておきます

$${ Y1_y' }$$
$${ Y2_y' }$$
$${ X1_x' }$$


座標変換の考え方

今回求めたいのは、今現在のワーク原点として設定したい、図面原点の部位が、設備上でどこにあるかです。つまり図面原点部位の機械座標値がわかればそれがG54に設定する値そのものというわけです。
ワーク対設備の理論上の位置関係はワーク図面及び設備、治具図面から算出できますので、このXY座標は求めることができます。ただし実際のワークはこの理論値よりXY方向にもずれているし、回転角も持って置かれているわけです。つまり今回の問題は、この既知である理論上の座標値が、微小回転と平行移動をしたとき、どのような値に移るかということを解けばよいことになります。
ある点の平行移動と回転をした後の座標値を求めるには線形代数を利用します。平行移動を$${(T_x,\ T_y)}$$ 回転角を $${{\theta}}$$と定義して、具体的に考えてみます。

まず回転ですが、 ある点$${{x, \ y}}$$を角度 $${{\theta}}$$ だけ回転させる行列は以下の通りです。

$$
R(\theta) =\begin{bmatrix} \cos\theta & -\sin\theta \\\sin\theta & \cos\theta\end{bmatrix}
$$

つまり、ある点$${{x,\ y}}$$が$${{x',\ y'}}$$に移動する場合は、以下のようにあらわせます。

$$
\begin{bmatrix} x' \\ y'  \end{bmatrix} =\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \ \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}
$$

ここでワーク原点の機械座標$${(T_x,\ T_y)}$$として、これを回転後に加えると、ある点$${{x, \ y}}$$を角度 $${{\theta}}$$ だけ回転し、かつ機械座標系から見て$${(T_x,\ T_y)}$$だけ移動した点の機械座標は以下のようにあらわせます。

$$
\begin{bmatrix} X \\ Y  \end{bmatrix} =\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \ \cos\theta \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}+\begin{bmatrix} T_x \\ T_y \end{bmatrix}
$$

このとき、図面原点、つまりワーク座標系の原点に設定したい場所は当然$${{x=0, \ y=0}}$$なので、これを代入すると回転の項は消えて、

$$
\begin{bmatrix} X \\ Y  \end{bmatrix} =\begin{bmatrix} T_x \\ T_y \end{bmatrix}
$$

となり、ワーク原点の機械座標値=$${(T_x,\ T_y)}$$となり、これを求めることでG54のオフセットがわかることになります。
展開すると以下の通りです

$$
 X = x\cos\theta - y\sin\theta + T_x       (1)\\
 Y = x\sin\theta + y\cos\theta + T_y        (2) 
$$

これが 壁三点方式の基礎式 です。

Y1・Y2 の Y測定値から θ を求める

Y方向の式は以下の通りでした。

$${ Y = x\sin\theta + y\cos\theta + T_y }$$

この式にY1, Y2 のプローブによるY座標実測値と、図面上のX,Y座標を代入していきます。プローブによる実測値=回転と平行移動を加えた機械座標値そのものなわけですから、この値は左辺に入ります。図面上の座標値はワーク座標系なので、右辺に入ります。そうすると以下のようになります。

$${ Y1_y' = y1_x\sin\theta + y1_y\cos\theta + T_y }$$
$${ Y2_y' = y2_x\sin\theta + y2_y\cos\theta + T_y }$$

差を取ると以下のようにあらわせます。

$${ \Delta Y' = \Delta x\sin\theta + \Delta y\cos\theta }$$

ここで

$${ \Delta Y' = Y2_y' - Y1_y' }$$
$${ \Delta x = y2_x - y1_x }$$
$${ \Delta y = y2_y - y1_y }$$

さらに今回は回転角θがとても小さい(1度以下とか)場合について考えているので以下のように近似しても実用上問題ないです。

$${ \sin\theta \approx \theta,\quad \cos\theta \approx 1 }$$

よって

$${ \theta \approx \frac{\Delta Y' - \Delta y}{\Delta x} }$$

これで、Y1とY2のY方向プローブ実測値、と図面上のXY座標から、図面原点を中心とした、実際のワークの回転角を求めることができました。あとはこの回転角を用いてXY座標を求めることで、完全にワークの姿勢を把握することができます。


ワーク原点のXY機械座標値を求める

座標変換の項で説明した以下の式、

$$
 X = x\cos\theta - y\sin\theta + T_x       (1)\\
 Y = x\sin\theta + y\cos\theta + T_y        (2) 
$$

より、$${(T_x,\ T_y)}$$こそが図面原点の機械座標系(G54に設定したいオフセット)そのものなわけですから、これを求められるように式を変形し、プローブ実測値

$${ Y1_y' }$$
$${ Y2_y' }$$
$${ X1_x' }$$

および図面上のXY座標値

$${ Y1 = (y1_x,\ y1_y) }$$
$${ Y2 = (y2_x,\ y2_y) }$$
$${ X1 = (x1_x,\ x1_y) }$$

を代入していけば以下のようになります。

$$
T_x = X1_x' - x1_x\cos\theta + x1_y\sin\theta \\
T_y = Y1_y' - y1_x\sin\theta - y1_y\cos\theta 
$$

回転角$${ \theta}$$はすでに求まっているので、これで完全に方程式が解けたことになります。

CADで検算

一応CADで回転角とXY位置をずらした位置を拾ってみて、この式で計算してみましたが、ばっちり合ってました。

FANUC マクロ変数への実装例

(--- 差分計算 ---)
#500 = #Y2Yp - #Y1Yp      (ΔY')
#501 = #y2_y - #y1_y      (Δy)
#502 = ABS[#y2_x - #y1_x] (Δx:符号安全のため絶対値)

(--- 回転角 θ(ラジアン) ---)
#510 = (#500 - #501) / #502

(--- 原点 Y座標 T_y ---)
#520 = #Y1Yp - #y1_x*SIN[#510] - #y1_y*COS[#510]

(--- 原点 X座標 T_x ---)
#521 = #X1Xp - #x1_x*COS[#510] + #x1_y*SIN[#510]

差分を計算するところはイメージ。実際にはタッチプローブで測定した値を適当なマクロ変数で受けて、それを使って計算していくことになります。31iとか新しいNCだと#数字じゃなくて、変数名を使えたはずなのでそれで書くとわかりやすいとおもうけど、古のマクロ変数しか使ったことがないので実際どうなのかはわからない。
あとは#5221と#5222がG54のワーク座標系が格納されているシステム変数なので、ここに計算した値を放り込み、また回転角はG68でワーク原点を中心として座標回転すればOK。
また実際のマクロ変数を用いた計算を行う際は、Y1,Y2,X1の実際の位置関係を踏まえて符号処理を行わないと、補正する角度が逆になったりするので注が必要です。

穴-穴、穴-壁方式のデメリットと壁三点を使う意味

こんな難解な方法をとらずに、穴-壁にすればいいじゃんという話なのだけど、壁三点にはそれなりにメリットもあります。
ひとつは穴、という構造物を鋳抜く必要がないということ。素材基準穴、壁は当然加工完了状態で残っている必要があります(加工で取り去ってしまうと、加工後に加工対素材のずれを測る術がなくなるため)。つまり機能的に無意味な穴をワークに開けておく必要があり、レイアウトによっては配置が厳しくなったり、また無駄に肉をつける必要が出たりするわけです。というわけでたいていはノック穴と兼用して、ノック穴の奥に素材基準穴が残る、みたいな配置にしがちですが、これはこれで問題がでてきます。

ノック穴と素材基準穴は当然同軸上にあるため、図面上は全く同じ座標で書かれていますが、鋳造の出来栄えによっては図面原点から素材基準の位置がずれることがよくあります。素材基準自体は特に製品機能的に意味はなく、加工対素材のズレを評価するためにあるので、別にずれたところで出来栄えに合わせて図面の寸法を修正すればいいっちゃいいのですが、ノック穴が同軸上にあると、これは当然機能に必要であるためこれができません。じゃあ一生懸命型を修正して素材基準のずれを修正するかというと、機能的に意味がない部位のために時間とコストをかけることになるのでこれもナンセンス、というジレンマに陥ります。
壁三点だと、これは機能的にまったく意味がない壁を基準とするので、鋳造の出来栄えによって図面寸法を修正することが簡単になり、型を修正する必要がなくなるというメリットがあります。これが一番大きいです、

またさらに穴を作るデメリットとして、タッチプローブで穴の内径を3点拾って中心座標を割り出すことになるのだけど、この際穴の真円度が狂っていたり、焼き付き、かじりなどで凸凹や傷があったりすると、正確な位置を拾うことができなくなります。また鋳造素材が正しくできていたとて、穴にキリコがたまたま付着していた場合も正しく穴中心を拾えません。となるとめちゃくちゃにずれたワーク座標で加工を行うことになるので、そうはならないように内径3点を角度をずらして2回測り、そのズレが基準値内か、また本来あるべき穴中心からのズレが基準値内かをif文で確認してから、もし基準値外ならアラームで止める、などという運用をする必要があります。なのでなんだかおかしな基準穴の素材が来ても不良品を黙って作り上げることは避けられますが、アラームが起きるたびにチョコ停になります。壁3点だとそもそも直接壁位置を測定するだけで、3点から穴中心を割り出すようなことはしないので、このようなアラームはそもそも起きないです。また測定箇所が少ないので測定自体も早く終えることができ、サイクルタイムの短縮にもつながります。

もう1点のデメリットとしては、鋳抜き穴自体の内径をきれいに保てない場合があるということです。これは特に溶湯の温度が高い金型のゲートに穴が設置されている場合に多いですが、焼き付き、かじりなどにより穴の内径は傷がつくリスクが高いのです。ゲートと反対側に穴を設置できればそれが良いのだけど、レイアウト上そうもいかない場合があるので、そもそも穴を作らない壁三点のメリットがここでも出てきます





いいなと思ったら応援しよう!