首页 » 学习 » 四元数基础概念

四元数基础概念

为什么需要用四元数

通常在物体旋转时,我们一般用其绕直角坐标系中哪个轴旋转多少度来描述。但是这种描述方式在特定情况下会发生死锁现象,导致两个旋转轴重合,丧失了对一个自由度的描述。这里引用欧拉角与万向节死锁中的动画进行说明。我们要描述中间棕色圆柱的旋转,周围的绿色、红色、蓝色圆环分别代表x、y、z三个旋转轴。在此时,中间棕色圆柱无论如何旋转都可以分解到这三个旋转轴上。。

将蓝色圆环向任意方向旋转90°,如下图所示。此时蓝色圆环旋转轴和绿色圆环旋转轴重合,致使我们丧失了动画中旋转方向的描述。这个现象就是万向节死锁现象

死锁

为了解决这个问题,出现了使用四元数描述物体旋转的方法。

四元数的定义及基本性质

四元数定义为 

q ≡ a + b i + c j + d k(a, b, c, d∈ R )

四元数的定义与复数类似,但是他有三个不同的虚数单位。虚数单位之间相乘不满足交换律,结果如下。

×1ijk
11ijk
ii-1k-j
jj-k-1i
kkj-i-1

此外,我们还经常将四元数中的实部和虚部分开,用一个矢量表示其虚部,写成一个标量和矢量的有序对形式

q ≡ [s, v](v = b i + c j + d k ; a, b, c, d∈ R )

用四元数表示3D旋转

一矢量v绕轴u旋转θ度后变为v’可以表示为四元数相乘的形式

v’ = qvq* = qvq-1 ( 其中v=[0,v], q=[ cos(θ/2), sin(θ/2)u] )

还可以表示为矩阵与矢量相乘的形式

\begin{equation*}
\mathbf{v}’=\begin{bmatrix} 1-2c^2-2d^2 & 2bc-2ad & 2ac+2bd \\
2bc+2ad & 1-2b^2-2d^2 & 2cd – 2ab \\
2bd-2ac & 2ab+2cd & 1-2b^2-2c^2 \end{bmatrix}\mathbf{v}
\end{equation*}

其中 a = cos(θ/2), b = sin(θ/2)ux,  c = sin(θ/2)uy,  d = sin(θ/2)uz

四元数与欧拉角的转换

将欧拉角转换为四元数

\begin{align*}
\mathbf{q}&=
\begin{bmatrix} cos(\psi/2)\\0\\0\\sin(\psi/2)\end{bmatrix}
\begin{bmatrix} cos(\theta/2)\\0\\sin(\theta/2)\\0\end{bmatrix}
\begin{bmatrix} cos(\phi/2)\\sin(\phi/2)\\0\\0\end{bmatrix}\\
&= \begin{bmatrix}
cos(\phi/2)cos(\theta/2)cos(\psi/2)
+sin(\phi/2)sin(\theta/2)sin(\psi/2)\\
sin(\phi/2)cos(\theta/2)cos(\psi/2)
-cos(\phi/2)sin(\theta/2)sin(\psi/2)\\
cos(\phi/2)sin(\theta/2)cos(\psi/2)
+sin(\phi/2)cos(\theta/2)sin(\psi/2)\\
cos(\phi/2)cos(\theta/2)sin(\psi/2)
-sin(\phi/2)sin(\theta/2)cos(\psi/2)
\end{bmatrix}
\end{align*}

将四元数转换为欧拉角

\begin{equation*}
\begin{bmatrix}\phi \\ \theta \\ \psi \end{bmatrix}=
\begin{bmatrix}
atan2(2(q_0q_1+q_2q_3),q-2(q_q^2+q_3^2))\\
asin(2(q_0q_2-q_3q_1))\\
atan2(2(q_0q_3+q_1q_2),1-2(q_2^2+q_3^2))
\end{bmatrix}
\end{equation*}

参考文献

发表评论

电子邮件地址不会被公开。 必填项已用*标注