微小変換からデュアルクォータニオンを導出する


このページでは、微小変換からデュアルクォータニオンを導出してみます。前のページとはまったく別の方法になるので、ここで頭をリセットしてください。また、ここの説明は「クォータニオン徹底解説」を理解していることを前提としています。

回転と移動を扱うので、4次元(3+1次元)の同次座標系を使います。ここでは同次座標系については解説しないので、まだ知らない人はググるなどして調べてください。

\(x,\ y,\ z\)の各軸まわりの回転の生成子 \(X,\ Y,\ Z\) は次のようになります(クォータニオン徹底解説参照)。
$$
X = \left(\begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right),\
Y = \left(\begin{array}{cccc} 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 \\ -1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right),\
Z = \left(\begin{array}{cccc} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right)
$$

そして各軸方向の移動に対応した生成子 \(T_x,\ T_y,\ T_z\) は
$$
T_x = \left(\begin{array}{cccc} 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right),\
T_y = \left(\begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \end{array} \right),\
T_z = \left(\begin{array}{cccc} 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 \end{array} \right),\
$$
です。

これらの生成子の交換関係は
$$
[X,\ Y] = Z,\ [Y,\ Z] = X,\ [Z,\ X] = Y,\\
[X,\ T_y] = T_z,\ [Y,\ T_z] = T_x,\ [Z,\ T_x] = T_y,\\
[T_x,\ Y] = T_z,\ [T_y,\ Z] = T_x,\ [T_z,\ X] = T_y
$$
となり、上記の組み合せ以外の交換関係は0になります。特に \(T_x,\ T_y,\ T_z\) 同士はどの組み合わせでも掛けただけで0になってしまいます。

\(X,\ Y,\ Z\) 同士の交換関係はクォータニオンのときに出てきたのでお馴染みと思いますが、\(X,\ Y,\ Z\) と \(T_x,\ T_y,\ T_z\) との交換関係も \(X,\ Y,\ Z\) 同士の交換関係と大変良く似ています。クォータニオンの構成要素の \(i,\ j,\ k\) を
$$ X \leftrightarrow \frac{i}{2},\ Y \leftrightarrow \frac{j}{2},\ Z \leftrightarrow \frac{k}{2} $$
と対応させることで、\(X,\ Y,\ Z\) 同士の交換関係を再現することができたわけですが、ここに \(i,\ j,\ k\) と可換な新しい数 \(\epsilon\) を導入して
$$ T_x \leftrightarrow \epsilon i,\ T_y \leftrightarrow \epsilon j,\ T_z \leftrightarrow \epsilon k $$
と対応させると、\(X,\ Y,\ Z\) と \(T_x,\ T_y,\ T_z\) との交換関係も再現することができます。

そして、
$$ \epsilon^2 = 0 $$
と定義すれば、\(T_x,\ T_y,\ T_z\) 同士を掛けただけで0になることも再現できます。

さて、前のページと同じように、ここでも
$$ \epsilon \rightarrow \lambda \epsilon $$
と再定義する自由度が残っています。\(X,\ Y,\ Z\) と \(i,\ j,\ k\) との対応関係のように \(\lambda = \frac{1}{2}\) として
$$ T_x \leftrightarrow \frac{\epsilon i}{2},\ T_y \leftrightarrow \frac{\epsilon j}{2},\ T_z \leftrightarrow \frac{\epsilon k}{2} $$
と定義しておくのが素直でシンプルな結果を得ることができます。前のページで \(\lambda = \frac{1}{2}\) と選んだ理由はここにあります。

これでデュアルクォータニオンを作ることができます。回転と移動の生成子の任意の組み合せで作られる行列 \(Z\) は回転軸をあらわす単位ベクトル \(\vec{a} = (a_x,\ a_y,\ a_z)\) と回転角 \(\theta\) および任意のベクトル \(\vec{v} = (v_x,\ v_y,\ v_z)\) を使って
$$ Z = \theta\,(a_x X + a_y Y + a_z Z) + v_x T_x + v_y T_y + v_z T_z $$
と書け、回転と移動をあらわした行列 \(A\) は \(Z\) の指数関数で表現できます。
$$ A = e^Z $$
そして、この行列 \(A\) に対応したデュアルクォータニオン \(d\) は
$$ d =e^{\frac{\theta}{2}(a_x i + a_y j + a_z k) + \frac{\epsilon}{2}(v_x i + v_y j + v_z k)} $$
で計算できます。

ここで、二重数 (dual numbers) を導入します。二重数 \(z\) を複素数のように \(\epsilon\) を使って
$$ z = x + \epsilon y ~~~ (x, y は実数) $$
と表現することにすれば、上のデュアルクォータニオン \(d\) は
\begin{eqnarray*}
d & = & e^{\frac{\theta}{2}(z_x i + z_y j + z_z k)}, \\
\vec{z} & = & \left(\begin{array}{c}z_x \\ z_y \\ z_z\end{array}\right) = \vec{a} + \epsilon \frac{\vec{v}}{\theta}
\end{eqnarray*}
と書くことができます。

さて、この指数関数をテイラー展開してみましょう。
$$ x = z_x i + z_y j + z_z k $$
と置くと、
$$ d = 1 + \frac{\theta}{2}x + \frac{\theta^2}{2^22!} x^2 + \cdots + \frac{\theta^n}{2^nn!} x^n + \cdots $$
と書けます。\(\epsilon^2 = 0\) であることに注意して \(x^2\) を計算すると
\begin{eqnarray*}
x^2 & = & -\vec{z} \cdot \vec{z} \\
& = & -\left(1 + 2 \epsilon \frac{\vec{a}\cdot\vec{v}}{\theta}\right) \\
& = & -\left(1 + \epsilon \frac{\vec{a}\cdot\vec{v}}{\theta}\right) ^ 2
\end{eqnarray*}
となり、\(x\) 自身も
$$ x = \left(1 + \epsilon \frac{\vec{a}\cdot\vec{v}}{\theta}\right)\left\{\vec{a} + \epsilon \frac{\vec{v}\ – (\vec{a}\cdot\vec{v})\,\vec{a}}{\theta}\right\} $$
と式変形できるので、
\begin{eqnarray*}
\vec{\alpha} & = & \vec{a} + \epsilon \frac{\vec{v}\ – (\vec{a}\cdot\vec{v})\,\vec{a}}{\theta} \\
\psi & = & \theta + \epsilon\, \vec{a}\cdot\vec{v}
\end{eqnarray*}
と置くことで、デュアルクォータニオンを \(\vec{\alpha}\) と \(\psi\) の関数として、クォータニオンとまったく同じようにテイラー展開できて、
\begin{eqnarray*}
d(\vec{\alpha},\ \psi) & = & 1\ – \frac{\psi^2}{2^22!} + \cdots + (-1)^n\frac{\psi^{2n}}{2^{2n}(2n)!} + \cdots \\
& & + \left(\frac{\psi}{2} – \frac{\psi^3}{2^33!} + \cdots + (-1)^n\frac{\psi^{2n+1}}{2^{2n+1}(2n + 1)!} + \cdots\right)(\alpha_x i + \alpha_y j + \alpha_z k) \\
& = & \left(\cos\frac{\psi}{2},\ \sin\frac{\psi}{2}\,\vec{\alpha}\right)
\end{eqnarray*}
となることがわかります。普通のクォータニオンとの違いは \(\psi\) や \(\vec{\alpha}\) が二重数で構成されていることです。また、\(\vec{\alpha}\) の実成分とデュアル成分(\(\epsilon\)がかかった項)は直交していることに注意してください。

さて、前のページとは違った形式でデュアルクォータニオンを導出することができました。もちろんどちらもデュアルクォータニオンとして正しいものです。前のページの方がやや天下り的だったものの導出も簡単で、各パラメータの意味もわかりやすかったと思います。一方、このページのデュアルクォータニオンは、回転と移動を同時に行なう微小変換を積み重ねて(指数関数の計算をして)導出しました。前のページでは回転 \(r\) の後に移動 \(t\) を行なっていたのに対し、ここでは回転と移動を同時に行なっているのがポイントです。

次のページではこのページの微小変換が幾何学的にどのような意味を持つのかについて調べます。

4 thoughts on “デュアルクォータニオン徹底解説

  • 2018/09/13 at 2:03 PM
    Permalink

    大変すばらしい解説、ありがとうございました。
    ロボット工学で良く出てくるので、すごい参考になりました。

    Reply
    • 2018/09/17 at 10:43 AM
      Permalink

      ロボット工学では良く使われるのですね。知りませんでした! コメントありがとうございます。

      Reply
  • 2018/11/12 at 5:39 AM
    Permalink

    いつも大変お世話になっております。
    3ページ目の
    回転と移動をあらわした行列 A は Z の指数関数で表現できます。
    A=eZ

    そして、この行列 A に対応したデュアルクォータニオン d は
    d=e^θ(axi+ayj+azk)+ϵ(vxi+vyj+vzk)

    で計算できます。
    の部分の質問なんですがこの文が書かれていたところの前に書かれていた文書のi,j,kとX,Y,Zの対応関係で出てきた1/2はどこに消えたのですか?

    Reply
    • 2018/11/12 at 11:48 AM
      Permalink

      ご指摘の通り、1/2が抜けていましたので修正いたしました。
      ありがとうございます!

      Reply

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *