姿勢の「近さ」は何で測るべきか
5軸加工では、一つの工具姿勢を実現する解が複数現れることがあります。自由度を上げるために加工軸を増やしたのですから、これは当然の帰結です。
しかし実際の加工では、そのうち一つを選ばなければなりません。その基準の一つが、姿勢を滑らかに変化させることです。直前の姿勢に近い解を選べば、動きの急変を避けられます。
では、その「近さ」は何で測っているでしょうか。
工具の向きだけを見るのであれば、向きを1本の単位ベクトルで表せます。
直前の向きと候補の向きの内積をとれば、その値が近さを表します。内積が大きい候補ほど近く、工具軸まわりの回転が自由な加工であれば、これで十分です。
しかし姿勢そのものを比較したい場面では、この内積による評価では足りません。工具軸まわりに回転した姿勢を、内積はすべて「同じ」と判定してしまうからです。
では、どう測るか。
実装は簡潔で、姿勢を3本の単位ベクトルで表し、同じ役割として対応するベクトルの内積を3つ足すだけです。
問題は、この素朴な足し算に何の根拠があるのかという点にあります。
本稿では、この足し算が、2つの姿勢を隔てる回転角による評価と一致することを順に確かめていきます。
姿勢の表現
まずは、姿勢を3本の単位ベクトルで表すとはどういうことかを整理する。
工具の向きは、1本の単位ベクトル $\boldsymbol{V}$ で表せる。しかし図1に示すように、$\boldsymbol{V}$ を軸に回転を加えても $\boldsymbol{V}$ 自身は変化しない。向きが同じでも、その軸まわりにどれだけ回っているかは定まらないということである。
そこで姿勢を表すには、互いに直交する3本の単位ベクトル $\boldsymbol{u}_1, \boldsymbol{u}_2, \boldsymbol{u}_3$ を用いる。
軸まわりの回転は定まらない
軸まわりの回転まで一意に決まる
互いに直交するとは $\boldsymbol{u}_1\cdot\boldsymbol{u}_2 = \boldsymbol{u}_2\cdot\boldsymbol{u}_3 = \boldsymbol{u}_3\cdot\boldsymbol{u}_1 = 0$ であり、単位ベクトルであるとは $\|\boldsymbol{u}_1\| = \|\boldsymbol{u}_2\| = \|\boldsymbol{u}_3\| = 1$ である。この2つは、内積を用いてまとめて書ける。
$$\boldsymbol{u}_i\cdot\boldsymbol{u}_j = \begin{cases} 1 & (i = j) \\ 0 & (i \neq j) \end{cases}$$工具軸を $\boldsymbol{u}_3$ に取れば、$\boldsymbol{V}$ に対応する情報は $\boldsymbol{u}_3$ が担い、残る $\boldsymbol{u}_1, \boldsymbol{u}_2$ が軸まわりの回転を確定させる。
2つの姿勢はそれぞれ3本の単位ベクトルで表されるから、近さを測るとは、3本ずつのベクトルをどう比較するかという問題になる。
内積の和は何を測っているか
2つの姿勢を $\{\boldsymbol{u}_1, \boldsymbol{u}_2, \boldsymbol{u}_3\}$、$\{\boldsymbol{w}_1, \boldsymbol{w}_2, \boldsymbol{w}_3\}$ とする。比較すべきは対応するベクトル、すなわち $\boldsymbol{u}_1$ と $\boldsymbol{w}_1$、$\boldsymbol{u}_2$ と $\boldsymbol{w}_2$、$\boldsymbol{u}_3$ と $\boldsymbol{w}_3$ の3組である。
素朴に考えれば、2つの姿勢のずれは、対応するベクトルがどれだけ離れているかの総和として測れるはずである。
図2は $i$ 番目のベクトルの組を示したものである。
$\boldsymbol{u}_i$ と $\boldsymbol{w}_i$ はいずれも単位ベクトルであるから、$\boldsymbol{u}_i - \boldsymbol{w}_i$の長さは両者のなす角だけで決まる。距離の二乗和を取れば
$$D = \sum_{i=1}^{3}\|\boldsymbol{u}_i - \boldsymbol{w}_i\|^2$$各ベクトルは単位ベクトルであるから、これを展開すると
$$\|\boldsymbol{u}_i - \boldsymbol{w}_i\|^2 = \|\boldsymbol{u}_i\|^2 - 2\,\boldsymbol{u}_i\cdot\boldsymbol{w}_i + \|\boldsymbol{w}_i\|^2 = 2 - 2\,\boldsymbol{u}_i\cdot\boldsymbol{w}_i$$3本分を足し合わせると
$$D = 6 - 2\sum_{i=1}^{3}\boldsymbol{u}_i\cdot\boldsymbol{w}_i$$ここで内積の和を $S$ と置く。
$$S = \boldsymbol{u}_1\cdot\boldsymbol{w}_1 + \boldsymbol{u}_2\cdot\boldsymbol{w}_2 + \boldsymbol{u}_3\cdot\boldsymbol{w}_3$$$D = 6 - 2S$ であるから、$D$ と $S$ は一次の関係にある。$S$ が大きいほど $D$ は小さい、すなわち内積の和が大きいほど2つの姿勢は近い。
内積の和 $S$ が測っているのは、3本のベクトルがどれだけ重なっているかである。2つの姿勢が完全に一致すれば各項の内積は $1$ となって $S = 3$、これが最大値になる。姿勢がずれるにつれて $S$ は減り、そのずれの大きさは $D$ という距離で測られている。
冒頭で述べた「対応するベクトルの内積を3つ足す」という操作は、このように3本のベクトルのずれを測ることに他ならない。
しかし、3本のベクトルのずれの合計が、姿勢の近さを正しく表しているという保証はどこにもない。以降では、この保証がどこから来るのかを見ていく。
姿勢の近さを回転角で測る
姿勢の近さを考えるうえでの基準として、一方の姿勢から他方へ回すときの回転角がある。この回転角が小さければ近く、大きければ遠い。まず、この回転角がどのように定まるのかを見る。
3次元空間における任意の回転は、ある1本の軸まわりの回転として表せる。これは、オイラーの回転定理として知られている。
この軸は機械の回転軸とは無関係で、2つの姿勢の関係から数学的に定まるものである。
姿勢 $\{\boldsymbol{u}_1, \boldsymbol{u}_2, \boldsymbol{u}_3\}$ を姿勢 $\{\boldsymbol{w}_1, \boldsymbol{w}_2, \boldsymbol{w}_3\}$ に移す回転行列を $R$ と書く。3本のベクトルすべてが同じ $R$ によって移るから、$\boldsymbol{w}_i = R\boldsymbol{u}_i$ である。
3本のベクトルを列として並べた行列を
$$U = [\,\boldsymbol{u}_1 \mid \boldsymbol{u}_2 \mid \boldsymbol{u}_3\,], \qquad W = [\,\boldsymbol{w}_1 \mid \boldsymbol{w}_2 \mid \boldsymbol{w}_3\,]$$($U$ の第1列が $\boldsymbol{u}_1$、第2列が $\boldsymbol{u}_2$、第3列が $\boldsymbol{u}_3$)と書けば、3本分の関係は1つの式にまとまる。
$$W = RU$$$U$ と $W$ は姿勢そのものを表す行列であり、行列 $R$ は姿勢 $U$ から姿勢 $W$ への回転を表す。
回転軸の方向をベクトル $\boldsymbol{a}$ とすると、$\boldsymbol{a}$ は回転によって動かないから
が成り立つ。この式が成り立つのは $\boldsymbol{a}$ という特定の1本の方向についてのみであり、回転軸以外のベクトルは動く。この $\boldsymbol{a}$ のまわりに何度回ったかが、求めたい回転角 $\theta$ である。
内積の和 $S$ がこの回転角 $\theta$ と対応していれば、「対応するベクトルの内積を3つ足す」という操作は正当化される。
次節では、その対応を見ていく。
回転角と内積の和の対応
まず、回転軸を基準とする姿勢を考える。
$\boldsymbol{e}_3 = \boldsymbol{a}$ とし、$\boldsymbol{a}$ に垂直な平面から、互いに直交する単位ベクトル $\boldsymbol{e}_1, \boldsymbol{e}_2$ を取る。この2本は、$\boldsymbol{a}$ に垂直な平面内で直交していればどの向きに取ってもよい。$\{\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3\}$ は、互いに直交する3本の単位ベクトル、すなわち1つの姿勢となる。
この姿勢を $R$ で回すとどうなるか。
$\boldsymbol{e}_3$ は回転軸そのものだから動かない。
であるから、
$\boldsymbol{e}_1, \boldsymbol{e}_2$ は $\boldsymbol{a}$ に垂直な平面内で $\theta$ だけ回る。したがって、$\boldsymbol{e}_1$ と $R\boldsymbol{e}_1$ のなす角は $\theta$ である。どちらも単位ベクトルであるから
$$\boldsymbol{e}_1\cdot R\boldsymbol{e}_1 = \|\boldsymbol{e}_1\|\,\|R\boldsymbol{e}_1\|\cos\theta = \cos\theta$$$\boldsymbol{e}_2$ についても同様である。
$$\boldsymbol{e}_2\cdot R\boldsymbol{e}_2 = \cos\theta$$したがって、内積の和は
である。これは、回転軸を基準に取った姿勢 $\{\boldsymbol{e}_i\}$ について計算した値である。
次の節では、この値が $\{\boldsymbol{e}_i\}$ の取り方に依らないこと、そして内積の和 $S$ とどう結びつくのかを見ていく。
内積の和は基準に依存しない
前節で計算したのは、回転軸を含む姿勢 $\{\boldsymbol{e}_i\}$ についての値である。ここで注意したいのは、$\boldsymbol{e}_1, \boldsymbol{e}_2$ の取り方が一通りではないことである。$\boldsymbol{a}$ に垂直な平面内で直交してさえいれば、どの向きに取ってもよい。
しかし前節の計算は、$\boldsymbol{e}_1$ が平面内のどの向きを指しているかを一度も使っていない。使ったのは、垂直平面内にあることと、単位ベクトルであることだけである。したがって $\boldsymbol{e}_1, \boldsymbol{e}_2$ をどう選んでも、和は $1 + 2\cos\theta$ となる。
では、回転軸を含まない姿勢ではどうか。
$\{\boldsymbol{u}_i\}$ は $\boldsymbol{a}$ とは無関係に与えられた姿勢であり、$\boldsymbol{e}_3 = \boldsymbol{a}$ のような特別な関係を持たない。この場合も、内積の和は同じ値になる。
$$S = \boldsymbol{u}_1\cdot\boldsymbol{w}_1 + \boldsymbol{u}_2\cdot\boldsymbol{w}_2 + \boldsymbol{u}_3\cdot\boldsymbol{w}_3 = 1 + 2\cos\theta$$対応するベクトルの内積の和は、どの姿勢を基準に計算しても変わらない。この量は行列のトレースと呼ばれ、基準の取り方によらないことが知られている。本稿ではこの性質を認めて先に進む。なぜ基準を変えても値が変わらないのか。これは基準の取り替え、すなわち基底変換の話題であり、稿を改めて扱いたい。
まとめ
姿勢を3本の直交する単位ベクトルで表すと、2つの姿勢の近さは、対応するベクトルの内積を3つ足すだけで測れます。この和 $S$ は、3本のベクトルのずれの二乗和と一次の関係にあり、同時に、2つの姿勢を隔てる回転角 $\theta$ だけで決まります。
$$S = \boldsymbol{u}_1\cdot\boldsymbol{w}_1 + \boldsymbol{u}_2\cdot\boldsymbol{w}_2 + \boldsymbol{u}_3\cdot\boldsymbol{w}_3 = 1 + 2\cos\theta$$$\theta$ が小さいほど $S$ は大きく、2つの姿勢が一致すれば $S = 3$ となります。比較するだけであれば、角度に変換する必要はありません。
素朴に見える3つの内積の足し算は、回転角による評価と一致していたわけです。