旋转表达之四元数

旋转表达之四元数

  旋转矩阵用9个元素表示3自由度旋转,表达具有冗余性。而欧拉角(后面会提及)和旋转向量(前文提到罗德里格斯的 t t t)是紧凑的,但具有奇异性。

  旋转向量用一个旋转轴 ω \omega ω和旋转角 t t t来描述一个旋转,所以也称轴角(Axis-Angle)。不过很明显,因为旋转角度有一定的周期性( 2 π 2\pi 2π一圈),所以这种表达方式具有奇异性。

  欧拉角有一个致命缺点:万向锁。也就是在俯仰角为±90°时,第一次和第三次旋转使用的是同一个坐标轴,会丢失一个自由度,引起奇异性【后面会另开博文,说明欧拉角】。

  表达三维旋转的不带奇异性的三维向量描述方式是不存在的,它是一个三维流型,想要无奇异性的表示,仅用3个量是不够的,所以引出了四元数。

  四元数是Hamilton找到的对于复数的扩展,它由一个实部和三个虚部组成,是一种非常紧凑、没有奇异的表达方式。然而四元数不够直观,且运算较为复杂。

  推荐一个四元数的文档。内容极度充实,不过本文不需要太多的复数概念,看完本文还有不懂的,可以去阅读该文档。

  本博文若有缺少的部分没有概述,会找时间不断补充。

四元数

  我们知道复数 C \mathbb{C} C可以简单地定义为 C = R + R i \mathbb{C=R+}\mathbb{R}_i C=R+Ri,其中 i 2 = − 1 i^2=-1 i2=1。 四元数是类似于复进行扩展和推广。 由 H \mathbb H H表示的四元数集定义为

H = C + C j , j 2 = − 1 ; i ⋅ j = − j ⋅ i \mathbb{ H=C+}\mathbb{C}_j,j^2=-1 ;i\cdot j=-j\cdot i H=C+Cjj2=1;ij=ji

  所以 H \mathbb H H中元素的形式如下:

q = q 0 + q 1 i + ( q 2 + i q 3 ) j = q 0 + q i i + q 2 j + q 3 i j ,   q 0 , q 1 , q 2 , q 3 ∈ R q=q_0+q_1i+(q_2+iq_3)j=q_0+q_ii+q_2j+q_3ij,\ q_0,q_1,q_2,q_3\in \mathbb{R} q=q0+q1i+(q2+iq3)j=q0+qii+q2j+q3ij, q0,q1,q2,q3R

  我们后续简化为

q = q 0 + q i i + q 2 j + q 3 k , ,   q 0 , q 1 , q 2 , q 3 ∈ R \mathbb{q}=q_0+q_ii+q_2j+q_3k,,\ q_0,q_1,q_2,q_3\in \mathbb{R} q=q0+qii+q2j+q3k, q0,q1,q2,q3R

  其中 i , j , k i,j,k i,j,k是四元数的三个虚部,而且 k = i j k=ij k=ij

  我们把三个虚部的乘法结果以下标展示:

× \times × 1 1 1 i i i j j j k k k
11 i i i j j j k k k
i i i i i i-1 k k k − j -j j
j j j j j j − k -k k-1 i i i
k k k k k k j j j − i -i i-1

  其实还可以推出 i 2 = j 2 = k 2 = i j k = − 1 i^2=j^2=k^2=ijk=-1 i2=j2=k2=ijk=1

  事实上, i , j , k i,j,k i,j,k正如下图所示,摘自维基百科。

四元数单位乘积在4D空间平面内旋转90°的图形表示,由 1 , i , j , k {1,i,j,k} 1ijk中的两个张成。 左侧因子可以被视为右侧旋转。 例如:蓝色: 1 / i 1 / i 1/i平面: 1 ⋅ i = i 1\cdot i = i 1i=i i / k i / k i/k平面: i ⋅ j = k i\cdot j = k ij=k红色: 1 / j 1 / j 1/j平面: 1 ⋅ j = j 1\cdot j = j 1j=j j / k j / k j/k平面: j ⋅ i = − k j\cdot i= -k ji=k

  有些时候,我们可以用标量和向量表达四元数:

q = [ s , v ] , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] ∈ R 3 \mathbb{q}=[s,v],s=q_0\in \mathbb{R},v=[q_1,q_2,q_3]\in \mathbb{R}^3 q=[s,v],s=q0R,v=[q1,q2,q3]R3

  其中 s s s是四元数的实部,而 v v v是四元数的虚部。如果虚部为0,则称为实四元数。若实部为0则称为虚四元数。

四元数运算

  四元数和复数类似,故而存在有常见四则运算,数乘和求逆以及共轭等。

加减法

  假设有两个四元数,我们设 q = a 1 + b 1 i + c 1 j + d 1 k {\mathbb q}=a_1+b_1i+c_1j+d_1k q=a1+b1i+c1j+d1k, p = a 2 + b 2 i + c 2 j + d 2 k {\mathbb p}=a_2+b_2i+c_2j+d_2k p=a2+b2i+c2j+d2k。当然我们还可以将其记为 q = [ s 1 , v 1 ] , p = [ s 2 , v 2 ] {\rm q}=[s_1,v_1],{\rm p}=[s_2,v_2] q=[s1,v1],p=[s2,v2]。其中 s 1 = a 1 , v 1 = [ b 1 , c 1 , d 1 ] , s 2 = a 2 , v 2 = [ b 2 , c 2 , d 2 ] s_1=a_1,v_1=[b_1,c_1,d_1],s_2=a_2,v_2=[b_2,c_2,d_2] s1=a1,v1=[b1,c1,d1],s2=a2,v2=[b2,c2,d2]

  所以有 q = s 1 + v 1 [ i j k ] , p = s 2 + v 2 [ i j k ] {\rm q}=s_1+v_1\begin{bmatrix}i\\j\\k\end{bmatrix},{\rm p}=s_2+v_2\begin{bmatrix}i\\j\\k\end{bmatrix} q=s1+v1ijk,p=s2+v2ijk

  目前定义加法为:

p ± q = ( a 1 ± a 2 ) + ( b 1 ± b 2 ) i + ( c 1 ± c 2 ) j + ( d 1 ± d 2 ) k {\rm p\pm q}=(a_1\pm a_2)+(b_1\pm b_2)i+(c_1\pm c_2)j+(d_1\pm d_2)k p±q=(a1±a2)+(b1±b2)i+(c1±c2)j+(d1±d2)k

⇔ p ± q = ( s 1 ± s 2 ) + ( v 1 ± v 2 ) [ i j k ] \Leftrightarrow {\rm p\pm q}=(s_1\pm s_2)+(v_1\pm v_2)\begin{bmatrix}i\\j\\k\end{bmatrix} p±q=(s1±s2)+(v1±v2)ijk

  所以我们标记 p + q = [ s 1 ± s 1 , v 1 ± v 2 ] {\rm p+q}=[s_1\pm s_1,v_1\pm v_2] p+q=[s1±s1,v1±v2]

乘法
标量乘法

  我们有一个四元数 q = a 1 + b 1 i + c 1 j + d 1 k {\mathbb q}=a_1+b_1i+c_1j+d_1k q=a1+b1i+c1j+d1k和一个标量 s s s,则他们乘积为:

s q = s ( a + b i + c j + d k ) = s a + s b i + s c j + s d k s{\rm q}=s(a+bi+cj+dk)=sa+sbi+scj+sdk sq=s(a+bi+cj+dk)=sa+sbi+scj+sdk

  而且标量乘法符合交换律,即 s q = q s s{\rm q}={\rm q}s sq=qs

四元数乘法

  四元数乘法并不符合交换律,这点后面会指出。

  假设 q = a 1 + b 1 i + c 1 j + d 1 k {\mathbb q}=a_1+b_1i+c_1j+d_1k q=a1+b1i+c1j+d1k, p = a 2 + b 2 i + c 2 j + d 2 k {\mathbb p}=a_2+b_2i+c_2j+d_2k p=a2+b2i+c2j+d2k

  则两者乘积为

q p = ( a 1 + b 1 i + c 1 j + d 1 k ) ( a 2 + b 2 i + c 2 j + d 2 k ) = a 1 a 2 + a 1 b 2 i + a 1 c 2 j + a 1 d 2 k +   b 1 a 2 i + b 1 b 2 i 2 + b 1 c 2 i j + b 1 d 2 i k +   c 1 a 2 j + c 1 b 2 j i + c 1 c 2 j 2 + c 1 d 2 j k +   d 1 a 2 k + d 1 b 2 k i + d 1 c 2 k j + d 1 d 2 k 2 \begin{aligned}{\rm qp}&=(a_1+b_1i+c_1j+d_1k)(a_2+b_2i+c_2j+d_2k) \\ &= a_1a_2+a_1b_2i+a_1c_2j+a_1d_2k+\\ &\quad\ b_1a_2i+b_1b_2i^2+b_1c_2ij+b_1d_2ik+\\&\quad\ c_1a_2j+c_1b_2ji+c_1c_2j^2+c_1d_2jk+ \\ & \quad\ d_1a_2k+d_1b_2ki+d_1c_2kj+d_1d_2k^2 \\ \end{aligned} qp=(a1+b1i+c1j+d1k)(a2+b2i+c2j+d2k)=a1a2+a1b2i+a1c2j+a1d2k+ b1a2i+b1b2i2+b1c2ij+b1d2ik+ c1a2j+c1b2ji+c1c2j2+c1d2jk+ d1a2k+d1b2ki+d1c2kj+d1d2k2

  又上面给出的表可以知道

i 2 = j 2 = k 2 = − 1 i^2=j^2=k^2=-1 i2=j2=k2=1, i j = k , j i = − k , i k = − j , k i = j , j k = i , k j = − i ij=k,ji=-k,ik= -j,ki=j,jk=i,kj=-i ij=k,ji=k,ik=j,ki=j,jk=i,kj=i

  所以上面可以换得

q p = ( a 1 a 2 − b 1 b 2 − c 1 c 2 − d 1 d 2 ) + ( a 1 b 2 + b 1 a 2 + c 1 d 2 − d 1 c 2 ) i + ( a 1 c 2 − b 1 d 2 + c 1 a 2 + d 1 b 2 ) j + ( a 1 d 2 + b 1 c 2 − c 1 b 2 + d 1 a 2 ) k \begin{aligned}{\rm qp} &= (a_1a_2-b_1b_2-c_1c_2-d_1d_2)\\ &+ (a_1b_2+b_1a_2+c_1d_2-d_1c_2)i\\&+ (a_1c_2-b_1d_2+c_1a_2+d_1b_2)j \\ & + (a_1d_2+b_1c_2-c_1b_2+d_1a_2)k \\ \end{aligned} qp=(a1a2b1b2c1c2d1d2)+(a1b2+b1a2+c1d2d1c2)i+(a1c2b1d2+c1a2+d1b2)j+(a1d2+b1c2c1b2+d1a2)k

  两个四元数乘积相当于先旋转 a 2 + b 2 i + c 2 j + d 2 k a_2+b_2i+c_2j+d_2k a2+b2i+c2j+d2k再旋转 a 1 + b 1 i + c 1 j + d 1 k a_1+b_1i+c_1j+d_1k a1+b1i+c1j+d1k

  四元数相乘其实也算线性组合。我们可以将其写成下面形式

p q = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 − d 1 c 1 c 1 d 1 a 1 − b 1 d 1 − c 1 b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] [ 1 i j k ] {\rm pq}=\begin{bmatrix}a_1&-b_1&-c_1&-d_1\\b_1&a_1&-d_1&c_1\\c_1&d_1&a_1&-b_1\\d_1&-c_1&b_1&a_1\end{bmatrix}\begin{bmatrix}a_2\\b_2\\c_2\\d_2\end{bmatrix}\begin{bmatrix}1\\i\\j\\k\end{bmatrix} pq=a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1a2b2c2d21ijk

  该变换相当于左乘 p {\rm p} p,矩阵乘法不符合交换律。

  由此可以得到

q p = [ a 1 − b 1 − c 1 − d 1 b 1 a 1 d 1 − c 1 c 1 − d 1 a 1 b 1 d 1 c 1 − b 1 a 1 ] [ a 2 b 2 c 2 d 2 ] [ 1 i j k ] {\rm qp}=\begin{bmatrix}a_1&-b_1&-c_1&-d_1\\b_1&a_1&d_1&-c_1\\c_1&-d_1&a_1&b_1\\d_1&c_1&-b_1&a_1\end{bmatrix}\begin{bmatrix}a_2\\b_2\\c_2\\d_2\end{bmatrix}\begin{bmatrix}1\\i\\j\\k\end{bmatrix} qp=a1b1c1d1b1a1d1c1c1d1a1b1d1c1b1a1a2b2c2d21ijk

  如果换成标识为:

q = [ s 1 , v 1 ] , p = [ s 2 , v 2 ] {\rm q}=[s_1,v_1],{\rm p}=[s_2,v_2] q=[s1,v1],p=[s2,v2]。其中 s 1 = a 1 , v 1 = [ b 1 , c 1 , d 1 ] , s 2 = a 2 , v 2 = [ b 2 , c 2 , d 2 ] s_1=a_1,v_1=[b_1,c_1,d_1],s_2=a_2,v_2=[b_2,c_2,d_2] s1=a1,v1=[b1,c1,d1],s2=a2,v2=[b2,c2,d2]

  很容易推算得到

q p = [ s 1 s 2 − v 1 T v 2 , s 1 v 1 + s 2 v 2 + v 1 v 2 ] {\rm qp}=[s_1s_2-v_1^Tv_2,s_1v_1+s_2v_2+v_1v_2] qp=[s1s2v1Tv2,s1v1+s2v2+v1v2]

  由此可见,如果要四元数相乘可交换,则除非 v 1 , v 2 v_1,v_2 v1,v2共线,此时外积项为0。

  这个标识的结果也被称为Graßmann积。

共轭

  定义一个四元数为 q = a + b i + c j + d k {\mathbb q}=a+bi+cj+dk q=a+bi+cj+dk,则其共轭为

q ˉ = a − b i − c j − d k \bar{\rm q}=a-bi-cj-dk qˉ=abicjdk

在文献中,共轭 q ^ \hat{q} q^的符号还可以标记为 q ∗ , q t \rm q^*,q^t q,qt等。博文采用 q ˉ \bar{\rm q} qˉ

  共轭是对合函数,也就是说它是它自己的反转,意味着 f ( f ( x ) ) = x f(f(x))=x f(f(x))=x。意味着一个元素共轭两次就会是原始元素。两个四元数乘积的共轭是他们的共轭相反顺序的乘积。也就是说:

∀ p , q ∈ H , p q ‾ = q ˉ p ˉ \rm \forall p,q\in \mathbb{H},\overline{pq}=\bar{q}\bar{p} p,qH,pq=qˉpˉ

  四元数的共轭还可以用四元数的乘法和加法表示:

q ˉ = − 1 2 ( q + i q i + j q j + k q k ) \bar{\rm q}=-\frac{1}{2}({\rm q}+i{\rm q}i+j{\rm q}j+k{\rm q}k) qˉ=21(q+iqi+jqj+kqk)

  我们还可以用共轭去提取出四元数中的实部和虚部。即

a = q + q ˉ 2 a=\frac{\rm q+\bar{q}}{2} a=2q+qˉ

b i + c j + d k = q − q ˉ 2 bi+cj+dk=\frac{\rm q-\bar{q}}{2} bi+cj+dk=2qqˉ

模与范数

  四元数和其共轭的乘积的平方根称为其范数,表示为 ∣ ∣ q ∣ ∣ ||\rm q|| q,表示如下:

∣ ∣ q ∣ ∣ = q q ˉ = q ˉ q = a 2 + b 2 + c 2 + d 2 ||{\rm q}||=\sqrt{\rm q\bar{q}}=\sqrt{\rm \bar{q}q}=\sqrt{a^2+b^2+c^2+d^2} q=qqˉ =qˉq =a2+b2+c2+d2

  该范数也被称为四元数的模,模为非负数,这与 H \mathbb{H} H上的欧氏范数相同,被视为向量空间 R 4 \mathbb{R}^4 R4

  在共轭中,如果我们标记 q = [ s , v ] {\rm q}=[s,v] q=[s,v],则

q ˉ = [ s , − v ] \bar{q}=[s,-v] qˉ=[s,v]

  然后共轭乘积表示为:

q ˉ q = q q ˉ = [ s 2 + v T v , 0 ] \bar{q}q=q\bar{q}=[s^2+v^Tv,0] qˉq=qqˉ=[s2+vTv,0]

  将四元数乘以一个实数后的范数相当于这个四元数的范数乘以这个实数的绝对值。即若 α \alpha α为实数,则

∣ ∣ α q ∣ ∣ = ∣ α ∣   ∣ ∣ q ∣ ∣ ||\alpha \rm q||=|\alpha| \ ||\rm q|| αq=α q

  这是下面范数乘法的特例:

∣ ∣ p q ∣ ∣ = ∣ ∣ p ∣ ∣   ∣ ∣ q ∣ ∣ , ∀ p , q ∈ H ||\rm pq||=||\rm p||\ ||\rm q||,\forall \rm p,q \in \mathbb{H} pq=p q,p,qH

  乘法是乘积共轭公式的一个结果。或者,它从恒等式开始

det ⁡ ( a + i b i d + c i d − c a − i b ) = a 2 + b 2 + c 2 + d 2 \det (\begin{matrix}a+ib&id+c\\id-c&a-ib\end{matrix})=a^2+b^2+c^2+d^2 det(a+ibidcid+caib)=a2+b2+c2+d2

  其中 i i i通常被认为是虚数单位。因此,因此形成了方阵行列式的乘法性质。

  下面这个范数可以用来定义 p \rm p p q \rm q q之间的距离 d ( p , q ) d(\rm p,q) d(p,q),作为它们差异的范数:

d ( p , q ) = ∣ ∣ p − q ∣ ∣ d(\rm p,q)=||\rm p-q|| d(p,q)=pq

  这使 H \mathbb H H成为度量空间。 度量拓扑中的加法和乘法是连续的。 实际上,对于任何标量,正数 a a a使得

( p + a p 1 + q + a q 1 ) − ( p + q ) = a ∣ ∣ p 1 + q 1 ∣ ∣ {\rm (p+}a{\rm p_1+q+}a{\rm q_1)-(p+q)}=a||\rm p_1+q_1|| (p+ap1+q+aq1)(p+q)=ap1+q1

  连续性从极限值变为零。 乘法的连续性同样如此。

四元数的逆

  我们定义 q − 1 {\rm q}^{-1} q1 q \rm q q的逆。而且满足

q q − 1 = q − 1 q = 1 ( q ≠ 0 ) {\rm qq}^{-1}={\rm q}^{-1}\rm q=1({\rm q\ne 0}) qq1=q1q=1(q̸=0)

  也就是说:

( p q ) q − 1 = p ( q q − 1 ) = p ⋅ 1 = p \rm (pq)q^{-1}=p(qq^{-1})=p\cdot 1=p (pq)q1=p(qq1)=p1=p

q − 1 ( q p ) = ( q − 1 q ) p = 1 ⋅ p = p \rm q^{-1}(qp)=(q^{-1}q)p=1\cdot p=p q1(qp)=(q1q)p=1p=p

  这分别是右乘 q − 1 \rm q^{-1} q1和左乘 p − 1 \rm p^{-1} p1,与矩阵性质相似。

  那么如何求四元数的逆?

  这里我们引入单位四元数,这是范数的四元数。它是通过非零四元数 q \rm q q除以其范数而得到的单位四元数 U q \rm U_{q} Uq,称为 q {\rm q} q规范化四元数(Versor)。

U q = q ∣ ∣ q ∣ ∣ \rm U_q=\frac{q}{||q||} Uq=qq

  每个范数都有一个极分解 q = ∣ ∣ q ∣ ∣ ⋅ U q \rm q=||q||\cdot U_q q=qUq

  使用共轭和范数可以定义非零四元数的倒数。四元数和其倒数的乘积应该等于1。这里我们把倒数认为是四元数的逆。

  其实这就意味着 q \rm q q q ˉ / ∣ ∣ q ∣ ∣ \rm \bar{q}/||q|| qˉ/q的乘积结果是1(不论顺序)。

回想我们定义四元数的模的时候的范数定义

  所以四元数的逆定义为:

q − 1 = q ˉ ∣ ∣ q ∣ ∣ \rm q^{-1}=\frac{\bar{q}}{||q||} q1=qqˉ

  如果 q \rm q q是单位四元数,那么 q − 1 = q ˉ \rm q^{-1}=\bar{q} q1=qˉ

  值得注意的是四元数乘积的逆和矩阵的逆相似性质,即:

( p q ) − 1 = q − 1 p − 1 \rm (pq)^{-1}=q^{-1}p^{-1} (pq)1=q1p1

四元数的数乘

  与向量类似,可以定义四元数的数乘。

  我们标记四元数 q = [ s , v ] {\rm q}=[s,v] q=[s,v],则数乘:

k q = k [ s , v ] k{\rm q}=k[s,v] kq=k[s,v]

四元数的点乘(点积)

  点乘指的是四元数的每个位置上的数值对应相乘。

  假设 q = a 1 + b 1 i + c 1 j + d 1 k {\mathbb q}=a_1+b_1i+c_1j+d_1k q=a1+b1i+c1j+d1k, p = a 2 + b 2 i + c 2 j + d 2 k {\mathbb p}=a_2+b_2i+c_2j+d_2k p=a2+b2i+c2j+d2k

  则二者点乘的结果为:

p ⋅ q = a 1 a 2 + b 1 b 2 + c 1 c 2 + d 1 d 2 {\rm p\cdot q}=a_1a_2+b_1b_2+c_1c_2+d_1d_2 pq=a1a2+b1b2+c1c2+d1d2

  还可以不用分量的形式表示为:

p ⋅ q = 1 2 ( p ˉ q + q ˉ p ) = 1 2 ( p q ˉ + q p ˉ ) \rm p\cdot q=\frac{1}{2}(\bar{p}q+\bar{q}p)=\frac{1}{2}(p\bar{q}+q\bar{p}) pq=21(pˉq+qˉp)=21(pqˉ+qpˉ)

可以验证计算成立

四元数的叉积

  假设 q = a 1 + b 1 i + c 1 j + d 1 k {\mathbb q}=a_1+b_1i+c_1j+d_1k q=a1+b1i+c1j+d1k, p = a 2 + b 2 i + c 2 j + d 2 k {\mathbb p}=a_2+b_2i+c_2j+d_2k p=a2+b2i+c2j+d2k

  则

p × q = 1 2 ( p ˉ q − q ˉ p ) = 1 2 ( p q ˉ − q p ˉ ) \rm p\times q = \frac{1}{2}(\bar{p}q-\bar{q}p)=\frac{1}{2}(p\bar{q}-q\bar{p}) p×q=21(pˉqqˉp)=21(pqˉqpˉ)

  如果我们标记 q = [ s 1 , v 1 ] , p = [ s 2 , v 2 ] {\rm q}=[s_1,v_1],{\rm p}=[s_2,v_2] q=[s1,v1],p=[s2,v2],则

p × q = [ 0 , v 1 × v 2 ] p\times q=[0,v_1\times v_2] p×q=[0,v1×v2]

  具体来说,叉积后实部为0。

p × q = ( c 1 d 2 − d 1 c 2 ) i + ( d 1 b 2 − b 1 d 2 ) j + ( b 1 c 2 − c 1 b 2 ) k \begin{aligned}p\times q&=(c_1d_2-d_1c_2)i \\&+(d_1b_2-b_1d_2)j\\&+(b_1c_2-c_1b_2)k\end{aligned} p×q=(c1d2d1c2)i+(d1b2b1d2)j+(b1c2c1b2)k

四元数指数,对数和幂函数

  给定四元数 q = a + b i + c j + d k = a + v ⃗ {\rm q}=a+bi+cj+dk=a+\vec{v} q=a+bi+cj+dk=a+v

  则

exp ⁡ ( q ) = ∑ n = 0 ∞ q n n ! = e a ( cos ⁡ ∣ ∣ v ⃗ ∣ ∣ + v ⃗ ∣ ∣ v ⃗ ∣ ∣ sin ⁡ ∣ ∣ v ⃗ ∣ ∣ ) \exp(\rm q) = \sum\limits_{n=0}^{\infty}\frac{{\rm q}^n}{n!}=e^a\left(\cos ||\vec{v}||+\frac{\vec{v}}{||\vec{v}||}\sin ||\vec{v}||\right) exp(q)=n=0n!qn=ea(cosv +v v sinv )

ln ⁡ ( q ) = ln ⁡ ∣ ∣ q ∣ ∣ + v ⃗ ∣ ∣ v ⃗ ∣ ∣ arccos ⁡ a ∣ ∣ q ∣ ∣ \ln({\rm q})=\ln ||{\rm q}||+\frac{\vec{v}}{||\vec{v}||}\arccos \frac{a}{||{\rm q}||} ln(q)=lnq+v v arccosqa

  由此可以写成四元数的极分解

q = ∣ ∣ q ∣ ∣ e n ^ θ = ∣ ∣ q ∣ ∣ ( cos ⁡ θ + n ^ sin ⁡ θ ) {\rm q}=||{\rm q}||e^{\hat{n}\theta}=||{\rm q}||(\cos \theta+\hat{n}\sin \theta) q=qen^θ=q(cosθ+n^sinθ)

  其中角度为 θ \theta θ,单位矢量 n ^ \hat{n} n^定义为

a = ∣ ∣ q ∣ ∣ cos ⁡ θ a=||{\rm q}||\cos \theta a=qcosθ

  和

v ⃗ = n ^ ∣ ∣ v ⃗ ∣ ∣ = n ^ ∣ ∣ q ∣ ∣ sin ⁡ θ \vec{v}=\hat{n}||\vec{v}||=\hat{n}||{\rm q}||\sin \theta v =n^v =n^qsinθ

  任何四元数都可以由极形式表示为 e n ^ θ e^{\hat{n}\theta} en^θ

  四元数的幂提到任意(实)指数由下式给出:

q α = ∣ ∣ q ∣ ∣ α ( cos ⁡ ( α θ ) + n ^ sin ⁡ ( α θ ) ) {\rm q}^\alpha=||{\rm q}||^\alpha(\cos(\alpha \theta)+\hat{n}\sin(\alpha \theta)) qα=qα(cos(αθ)+n^sin(αθ))

  四元数的其他函数则不描述(有需要则评论中人提出再添加)。


四元数表示旋转

  四元数用于旋转时被称为旋转四元数,当用于方向(相对于参考坐标系的旋转)时,被称为方向四元数位姿四元数

  在三维空间中,根据欧拉旋转定理,刚体或坐标系围绕固定点的任何旋转或旋转顺序相当于围绕固定轴(称为欧拉轴)的给定角度 θ \theta θ的单一旋转。 贯穿固定点。 欧拉轴通常由单位矢量 u ⃗ \vec{u} u 表示。 因此,三维中的任何旋转都可以表示为矢量 u ⃗ \vec{u} u 和标量 θ \theta θ的组合。

图来源于维基百科。对于欧拉轴和角度的可视化旋转表示。

  四元数提供了一种简单的方法来将此轴角表示为四个数字,并且可用于将相应的旋转应用于位置向量,表示相对于 R 3 \mathbb{R}^3 R3中的原点的点。

  四元数要表示旋转,则需要用到虚四元数,即实部为0的四元数。

  用 i , j , k i,j,k i,j,k分别为笛卡尔坐标系的三个轴的单位向量。把旋转定义为绕着以某个单位向量 u ⃗ \vec{u} u 为轴旋转 θ \theta θ角。

u ⃗ = ( u x , u y , u z ) = u x i + u y j + u z k \vec{u}=(u_x,u_y,u_z)=u_xi+u_yj+u_zk u =(ux,uy,uz)=uxi+uyj+uzk

  可以被四元数描述。这就可以用于欧拉公式的扩展:

q = e θ 2 ( u x i + u y j + u z k ) = cos ⁡ θ 2 + ( u x i + u y j + u z k ) sin ⁡ θ 2 {\rm q}=e^{\frac{\theta}{2}(u_xi+u_yj+u_zk)}=\cos \frac{\theta}{2}+(u_xi+u_yj+u_zk)\sin \frac{\theta}{2} q=e2θ(uxi+uyj+uzk)=cos2θ+(uxi+uyj+uzk)sin2θ

  所以得到:

q = [ q 0 , q 1 , q 2 , q 3 ] = [ cos ⁡ θ 2 , u x sin ⁡ θ 2 , u y sin ⁡ θ 2 , u z sin ⁡ θ 2 ] {\rm q}=[q_0,q_1,q_2,q_3]=[\cos \frac{\theta}{2},u_x\sin \frac{\theta}{2},u_y\sin \frac{\theta}{2},u_z\sin \frac{\theta}{2}] q=[q0,q1,q2,q3]=[cos2θ,uxsin2θ,uysin2θ,uzsin2θ]

  在这里我们给出由此公式得到了旋转向量和四元数的转换关系式:

{ θ = 2 arccos ⁡ ( q 0 ) [ u x , u y , u z ] T = [ q 1 , q 2 , q 3 ] T / sin ⁡ θ 2 \begin{cases}\theta=2 \arccos(q_0)\\ [u_x,u_y,u_z]^T=[q_1,q_2,q_3]^T/ \sin \frac{\theta}{2}\end{cases} {θ=2arccos(q0)[ux,uy,uz]T=[q1,q2,q3]T/sin2θ

  我们知道,一个点,比如点 p p p,如果用旋转矩阵来表示旋转,则为

p ′ = R p p^\prime=Rp p=Rp

  现在这个点被用虚四元数描述。即 p = [ 0 , x , y , z ] = [ 0 , v ] p=[0,x,y,z]=[0,v] p=[0,x,y,z]=[0,v]

  然后我们用四元数 q = [ cos ⁡ θ 2 , v sin ⁡ θ 2 ] {\rm q}=[\cos \frac{\theta}{2},v\sin \frac{\theta}{2}] q=[cos2θ,vsin2θ]表示这个旋转。

  采用Hamilton积来表示:

p ′ = q p q − 1 p^\prime={\rm q}p{\rm q}^{-1} p=qpq1

  可以验证得出,计算结果的实部为0,是纯虚四元数。

四元数与旋转矩阵的转换

  由四元数旋转 p ′ = q p q − 1 p^\prime={\rm q}p{\rm q}^{-1} p=qpq1,我们假设 q = q r + q i i q j j + q k k {\rm q}=q_r+q_iiq_jj+q_kk q=qr+qiiqjj+qkk,可以得到旋转矩阵 R R R

R = [ 1 − 2 s ( q j 2 + q k 2 ) 2 s ( q i q j − q k q r ) 2 s ( q i q k + q j q r ) 2 s ( q i q j + q k q r ) 1 − 2 s ( q i 2 + q k 2 ) 2 s ( q j q k − q i q r ) 2 s ( q i q k − q j q r ) 2 s ( q j q k + q i q r ) 1 − 2 s ( q i 2 + q j 2 ) ] \mathbf{R}=\begin{bmatrix}1-2s(q_j^2+q_k^2)&2s(q_iq_j-q_kq_r)&2s(q_iq_k+q_jq_r)\\2s(q_iq_j+q_kq_r)&1-2s(q_i^2+q_k^2)&2s(q_jq_k-q_iq_r)\\2s(q_iq_k-q_jq_r)&2s(q_jq_k+q_iq_r)&1-2s(q_i^2+q_j^2)\end{bmatrix} R=12s(qj2+qk2)2s(qiqj+qkqr)2s(qiqkqjqr)2s(qiqjqkqr)12s(qi2+qk2)2s(qjqk+qiqr)2s(qiqk+qjqr)2s(qjqkqiqr)12s(qi2+qj2)

  这里 s = ∣ ∣ q ∣ ∣ − 2 s=||q||^{-2} s=q2,如果 q \rm q q是单位四元数,则 s = 1 s=1 s=1

  如果从旋转矩阵到四元数,则是:

  假设矩阵 R = m i j , i , j ∈ [ 1 , 2 , 3 ] R={m_{ij}},i,j\in [1,2,3] R=miji,j[1,2,3], q \rm q q是单位四元数,则对应四元数的各个分量为:

q r = t r a c e ( R ) + 1 2 q_r=\frac{\sqrt{{\rm trace}(R)+1}}{2} qr=2trace(R)+1 q i = m 23 − m 32 4 q r q_i=\frac{m_{23}-m_{32}}{4q_r} qi=4qrm23m32, q j = m 31 − m 13 4 q r q_j=\frac{m_{31}-m_{13}}{4q_r} qj=4qrm31m13, q k = m 12 − m 21 4 q r q_k=\frac{m_{12}-m_{21}}{4q_r} qk=4qrm12m21

   值得注意的是 q , − q \rm q,-q q,q是同一旋转,即 R R R对应的四元数并不唯一。

  当 q r q_r qr接近于0, q i , q j , q k q_i,q_j,q_k qi,qj,qk会变得十分大,导致解不稳定。

四元数恢复轴角表示

  若已知旋转四元数为 q = q r + q i i q j j + q k k {\rm q}=q_r+q_iiq_jj+q_kk q=qr+qiiqjj+qkk,则旋转轴 u u u和旋转角 θ \theta θ为:

( u x , u y , u z ) = ( q i , q j , q k ) q i 2 + q j 2 + q k 2 (u_x,u_y,u_z)=\frac{(q_i,q_j,q_k)}{\sqrt{q_i^2+q_j^2+q_k^2}} (ux,uy,uz)=qi2+qj2+qk2 (qi,qj,qk)

θ = 2 a t a n 2 ( q i 2 + q j 2 + q k 2 , q r ) \theta= 2{\rm atan}2(\sqrt{q_i^2+q_j^2+q_k^2},q_r) θ=2atan2(qi2+qj2+qk2 ,qr)

  其中 a t a n 2 \rm atan2 atan2双参数反正切函数


四元数的特殊子群

  特殊的 H \mathbb{H} H子群,即所谓的单位四元数(前文已经描述)

S 3 = { q ∈ H ∣ ∣ ∣ q ∣ ∣ 2 = q 0 2 + q 1 2 + q 2 2 + q 3 2 = 1 } \mathbb{S}^3=\{q\in \mathbb{H}| ||q||^2=q_0^2+q_1^2+q_2^2+q_3^2=1\} S3={qHq2=q02+q12+q22+q32=1}

  很明显,所有单位四元数的集合只是 R 4 \mathbb{R}^4 R4中的单位球。很容易证明该单位四元数符合群的性质。

  刚刚我们说过,对于 q , − q \rm q,-q q,q是同一旋转,即 R R R对应的四元数并不唯一。

由于欧拉公式展开可以知道,当四元数取复数时, θ \theta θ v ⃗ \vec{v} v 对应反向,而乘积不变。

  可以由下图可以看出。

单位球面 S 3 ⊂ R 4 \mathbb{S}^3\sub \mathbb{R}^4 S3R4上的对应单位四元数 q \rm q q − q \rm -q q对应于相同的旋转矩阵。

  因此,在拓扑学中, S 3 \mathbb{S}^3 S3 S O ( 3 ) SO(3) SO(3)的双覆盖(double-covering)。因此 S O ( 3 ) SO(3) SO(3)在拓扑上与三维投影平面 R P 3 \mathbb{RP}^3 RP3相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuYunTan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值