デュアルクォータニオンの幾何学的な説明


前のページでデュアルクォータニオンを導出するのに使った微小変換の生成子 \(Z\) は
$$ Z = \theta\,(a_x X + a_y Y + a_z Z) + v_x T_x + v_y T_y + v_z T_z $$
と書けました。これを簡潔に
$$ Z = \theta\,\vec{a} \cdot \vec{X} + \vec{v} \cdot \vec{T} $$
と書くことにします。

この \(Z\) の第1項は回転の生成子になっていて、第2項が移動の生成子になっているわけですが、回転軸に平行な方向の移動は回転と可換なので、\(\vec{v}\) を \(\vec{a}\) に平行な成分 \(\vec{v_a}\) と \(\vec{a}\) に直交する成分 \(\vec{v_\perp}\) に分けます。
\begin{eqnarray*}
\vec{v_a} & = & (\vec{a}\cdot\vec{v})\,\vec{a},\\
\vec{v_\perp} & = & \vec{v}\ – \vec{v_a}
\end{eqnarray*}

さらに、
\begin{eqnarray*}
\vec{v_\theta} & = & \frac{\vec{v_\perp}}{\theta}, \\
Z_\theta & = & \vec{a} \cdot \vec{X} + \vec{v_\theta} \cdot \vec{T},\\
Z_a & = & \vec{v_a} \cdot \vec{T}
\end{eqnarray*}
と定義すれば
$$ Z = \theta\,Z_\theta + Z_a $$
と書けます。

ここで \(Z_\theta\) と \(Z_a\) が可換 (\([Z_\theta,\ Z_a] = 0\)) となることに注意してください。そのため、\(Z\) の指数関数で得られる行列 \(A\) は
$$ A = e^Z = e^{Z_a} e^{\theta Z_\theta} $$
の形に分離できます。

\(Z_a\) は移動の生成子しか含まないため、2乗するとゼロになるので、テイラー展開は1次までの項で終わります。
$$ e^{Z_a} = I + Z_a = I + \vec{v_a} \cdot \vec{T} \equiv T(\vec{v_a}) $$
これで得られる行列はベクトルを \(\vec{v_a}\) だけ移動させる行列 (\(T(\vec{v_a})\) と書くことにします) となっています。

\(Z_\theta\) も詳しく見てみましょう。この行列はベクトル \(\vec{a}\) を回転軸とする回転の生成子と \(\vec{a}\) に垂直なベクトル \(\vec{v_\theta}\) 方向に移動する行列の生成子を組み合わせたものなので、\(\vec{a}\) に直交する平面上でベクトルを遷移させます。この生成子で作られる微小変換
$$ I + Z_\theta d\theta + \cdots $$
を繰り返し行なったらどのような軌道を描くでしょうか? \(\vec{v_\theta}\) 方向に移動しながら \(\vec{a}\) 軸まわりに回転するので、\(\vec{v_\theta}\) 方向に移動しながら円軌道を描く、バネを横に延ばしたような (ボールペンの試し書きをしたときのような) 軌道になると予想する人もいるかもしれませんが、そうはなりません。なぜなら、\(\vec{v_\theta}\) 方向の移動はその後に続く微小変換の影響を受けて回転してしまうからです。その結果、上の微小変換は円軌道を描くことになります。ただし、\(\vec{v_\theta}\) の影響によって円の中心は原点ではなくなります。

実際、回転による微小移動と \(\vec{v_\theta}\) による微小移動が釣り合う点 \(\vec{c}\) があるはずで、
$$ \vec{v_\theta} = -\vec{a}\times\vec{c} $$
を満たす \(\vec{c}\) が回転中心となります。

この点 \(\vec{c}\) を使えば、\(Z_\theta\) は次のように書けます。

$$ Z_\theta = T(\vec{c})\, (\vec{a}\cdot\vec{X})\, T(-\vec{c}) $$

この行列は、まず \(\vec{c}\) を引いてから原点を中心とした \(\vec{a}\) 軸まわりの回転を適用して、その後で \(\vec{c}\) を足し戻す操作になっています。実際にこれを \(n\) 乗すると、
$$ {Z_\theta}^n = T(\vec{c})\, (\vec{a}\cdot\vec{X})^n T(-\vec{c}) $$
となるので、
$$ e^{\theta Z_\theta} = T(\vec{c})\, e^{\theta\, \vec{a}\cdot\vec{X}} T(-\vec{c}) $$
となり、\(\vec{c}\) を中心とした回転行列になっていることがわかります。

\(\vec{a}\) が単位ベクトルであり、\(\vec{c}\) を \(\vec{a}\) に直交するベクトルとすれば、\(\vec{a}\times\vec{c}\) は \(\vec{c}\) を \(\vec{a}\) 軸まわりに90度回転させたベクトルです。さらに \(\vec{a}\) との外積を取れば \(-\vec{c}\) となるので、上の式の両辺と \(\vec{a}\) との外積を取って
$$ \vec{c} = \vec{a}\times\vec{v_\theta} $$
が得られます。

以上をまとめると、生成子 \(Z\) は \(\vec{c}\) を中心とした回転軸 \(\vec{a}\) まわりの回転をしながら、回転軸方向に移動するらせん軌道を描く運動の生成子であることがわかります。回転軸方向の移動量 \(l\) は
$$ l = \vec{a}\cdot\vec{v} $$
です。

ここでのポイントは回転の中心が原点という特別な点ではなく、ベクトルとして記述できる一般の点として行列の中に組込まれているということです。すなわち、回転の中心が原点の場合、座標系の取り方によって回転の中心位置が変わってしまうのに対して、回転の中心がベクトルとして記述されている場合は、座標系の取り方によらず回転の中心位置が決まるのです(※)。

さて、前のページで導出したデュアルクォータニオンを \(\vec{c}\) や \(l\) を使って書き直してみましょう。デュアルクォータニオンを定義するのに必要なパラメータは \(\vec{a},\ \theta,\ \vec{c},\ l\) となるので、これらの関数として記述すると、次のようになります。
$$ d(\vec{a},\ \theta,\ \vec{c},\ l) = \left(\cos\frac{\theta + \epsilon l}{2},\ \sin\frac{\theta + \epsilon l}{2}\,( \vec{a}\ – \epsilon\,\vec{a}\times\vec{c})\right) $$

この形式のデュアルクォータニオンを使えば、回転と移動を対等に扱いながら(回転の中心を原点に固定せずに)補間ができるため、きれいな補間になりそうです。

ここで補足しておくと、説明上 \(\vec{c}\) は \(\vec{a}\) に直交するベクトルとしていましたが、上の形式では回転軸、すなわち
$$ \vec{c} + t\,\vec{a} ~~~ (t\ は任意の実数) $$
であらわされる直線上のどこの点を \(\vec{c}\) に選んでもかまいません。なぜなら
$$ \vec{a} \times (\vec{c} + t\,\vec{a}) = \vec{a} \times \vec{c} $$
となるからです。

ところで、これまでの説明だと、2ページ目で導出したデュアルクォータニオンと3ページ目で導出したデュアルクォータニオンとの関係が明らかではありません。そこで、補間について説明する前に、次のページでこれらの2つの形式のデュアルクォータニオンの対応関係をはっきりさせておきたいと思います。

(※) 回転の中心が原点になっていた方が座標系に依存しないのではないかと思う人もいるかもしれませんが、ここで「座標系に依存しない」と言っているのは座標の値ではなく、空間上のどこに回転の中心があるか、ということです。回転の中心が原点であれば、座標系の選び方(原点の選び方)によって、回転の中心は空間上のどの位置にでもなりうることになりますが、ベクトル \(\vec{c}\) であらわせる場合、その点は空間上の \(\vec{c}\) という点であり、それはどのような座標系を選んだとしてもかわりません(\(\vec{c}\)の座標値は変化します)。

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 *