2021/10/31

本ページではOMRON NX/NJシリーズ向け計算ライブラリのクォータニオン演算関数について解説します。
クォータニオンの基礎理論については姿勢制御(オイラー角・クォータニオン) をご覧ください。

1点の回転
クォータニオンの回転軸

クォータニオンとは

クォータニオン(Quaternion)は3次元空間の回転を表現するための数学モデルです。
ロボット制御、ドローン制御、姿勢制御、3Dグラフィックスなどで広く使用されています。 オイラー角ではジンバルロックが発生する場合がありますが、クォータニオンではその問題を回避できます。

クォータニオンの利用例

  • 携帯の中のジャイロで姿勢をリアルタイムで計算
  • ゲームの中の回転はユニティやアンリアルなどのエンジンが計算
  • スペースXのロケットがの姿勢制御をリアルタイムで計算
  • ロボット制御
  • 自動運転
  • AR(仮想現実)

関連ページ

クォータニオン演算一覧

クォータニオン生成 (Quaternion)

Quaternion

クォータニオン生成
入力
w
スカラー部(実部)
x
ベクトル部x(虚部)
y
ベクトル部y(虚部)
z
ベクトル部z(虚部)
出力
out
クォータニオン

クォータニオン生成例
入力
w
1.0
x
2.0
y
3.0
z
4.0
出力
out
\[ \begin{bmatrix} q_w \\ q_x \\ q_y \\ q_z \\ \end{bmatrix} = \begin{bmatrix} 1 \\ 2 \\ 3 \\ 4 \\ \end{bmatrix} \]

計算式

\begin{align} q=q_w+q_xi+q_yj+q_zk=& \begin{bmatrix} q_w \\ q_x \\ q_y \\ q_z \\ \end{bmatrix} \\ i^2+j^2+k^2=&-1 \\ ij=&k \\ jk=&i \\ ki=&j \end{align}


比較 (qtEQ)

qtEQ

クォータニオン比較
入力
Q1
クォータニオン1
Q2
クォータニオン2

クォータニオン比較例

加算 (qtADD)

qtADD

クォータニオン加算
入力
Q1
クォータニオン1
Q2
クォータニオン2
出力
out
クォータニオン

クォータニオン加算例
入力
Q1
[1.0, 1.0, 1.0, 1.0]
Q2
[0.5, 2.0, 1.0, 0.0]
出力
out
[1.5, 3.0, 2.0, 1.0]

計算式

\[ Q1+Q2 = \begin{bmatrix} a_{w} \\ a_{x} \\ a_{y} \\ a_{z} \\ \end{bmatrix} + \begin{bmatrix} b_{w} \\ b_{x} \\ b_{y} \\ b_{z} \\ \end{bmatrix} = out \]


減算 (qtSUB)

qtSUB

クォータニオン減算
入力
Q1
クォータニオン1
Q2
クォータニオン2
出力
out
クォータニオン

クォータニオン減算例
入力
Q1
[1.0, 1.0, 1.0, 1.0]
Q2
[0.5, 2.0, 1.0, 0.0]
出力
out
[0.5, -1.0, 0.0, 1.0]

計算式

\[ Q1-Q2 = \begin{bmatrix} a_{w} \\ a_{x} \\ a_{y} \\ a_{z} \\ \end{bmatrix} - \begin{bmatrix} b_{w} \\ b_{x} \\ b_{y} \\ b_{z} \\ \end{bmatrix} = out \]


外積 (qtCross)

qtCross

クォータニオン外積
入力
Q1
クォータニオン1
Q2
クォータニオン2
出力
out
クォータニオン

クォータニオン外積例
入力
Q1
[1.0, 1.0, 1.0, 1.0]
Q2
[0.5, 2.0, 1.0, 0.0]
出力
out
[-2.5, 1.5, 3.5, -0.5]

計算式

\[ Q1\times Q2 = \begin{bmatrix} a_{w} \\ a_{x} \\ a_{y} \\ a_{z} \\ \end{bmatrix} \times \begin{bmatrix} b_{w} \\ b_{x} \\ b_{y} \\ b_{z} \\ \end{bmatrix} = out \]


共役 (qtCQ)

qtCQ

クォータニオン共役
入力
qt
クォータニオン
出力
out
クォータニオン

クォータニオン共役例
入力
qt
[0.5, 2.0, 1.0, 0.0]
出力
out
[0.5, -2.0, -1.0, -0.0]

計算式

\[ \bar{qt} = \begin{bmatrix} a_{w} \\ a_{x} \\ a_{y} \\ a_{z} \\ \end{bmatrix} = out \]


実部の設定 (qtSetReal)

qtSetReal

クォータニオン実部の設定
入力
w
スカラー部(実部)
入出力
qt
クォータニオン

クォータニオン実部の設定例
入力
w
0.5
入出力
qt
[0.5, 0.0, 0.0, 0.0]

虚部の設定 (qtSetImag)

qtSetImag

クォータニオン虚部の設定
入力
vec
ベクトル部(虚部)
入出力
qt
クォータニオン

クォータニオン虚部の設定例
入力
vec
[1.0, 2.0, 3.0]
入出力
qt
[0.0, 1.0, 2.0, 3.0]

よくある質問

クォータニオンとは何ですか?

4つの成分で回転を表現する数学モデルです。

オイラー角との違いは?

ジンバルロックが発生せず滑らかな回転補間が可能です。

ロボット制御で使われますか?

産業用ロボットやドローンなどで広く利用されています。

この記事へのコメント