第三讲第四节-四元数

    科技2026-10-03  8

    一、四元数的定义

    1、引入四元数的意义

    由于旋转矩阵是冗余的,而欧拉角具有奇异性,因此Hamilton找到了一种类似于复数的代数-四元数来表示旋转,它是紧凑的,且没有奇异性。

    2、由复数的引入

    在二维平面上,我们想要将复平面的向量旋转 θ \theta θ角时候,我们可以将复向量乘以单位长度复数 e i θ {e^{i\theta }} eiθ,而 e i θ {e^{i\theta }} eiθ可以写成复数形式: e i θ = cos ⁡ θ + i sin ⁡ θ {e^{i\theta }} = \cos \theta + i\sin \theta eiθ=cosθ+isinθ 这样,我们就可以用一个单位长度的复数表示二维条件下的旋转。

    3、四元数的定义

    与二维条件下类似,我们定义如下式所示的四元数,用来表示三维旋转。(请先接受该定义,具体的性质在后面会讨论),定义四元数 q q q为: q = q 0 + q 1 i + q 2 j + q 3 k q = {q_0} + {q_1}i + {q_2}j + {q_3}k q=q0​+q1​i+q2​j+q3​k其中 i , j , k i,j,k i,j,k为四元数的三个虚部,满足如下关系: i 2 = j 2 = k 2 = − 1 i j = k , l i = − k j k = i , k j = − i k i = j , i k = − j \begin{array}{l} {i^2} = {j^2} = {k^2} = - 1\\ ij = k,li = - k\\ jk = i,kj = - i\\ ki = j,ik = - j \end{array} i2=j2=k2=−1ij=k,li=−kjk=i,kj=−iki=j,ik=−j​四元数也可以用一个标量和一个向量表示: q = [ s , v ] T , s = q 0 ∈ R , v = [ q 1 , q 2 , q 3 ] T ∈ R 3 q = {[s,v]^T},s = {q_0} \in \R ,v = {[{q_1},{q_2},{q_3}]^T} \in \R{^3} q=[s,v]T,s=q0​∈R,v=[q1​,q2​,q3​]T∈R3 其中, s s s称为四元数的实部, v v v称为四元数的虚部。实部为零的四元数为虚四元数,虚部为零的四元数为实四元数。

    二、四元数的运算

    以下面两个四元数为例: q a = s a + x a i + y a j + z a k , q b = s b + x b i + y b j + z b k {q_a} = {s_a} + {x_a}i + {y_a}j + {z_a}k,{q_b} = {s_b} + {x_b}i + {y_b}j + {z_b}k qa​=sa​+xa​i+ya​j+za​k,qb​=sb​+xb​i+yb​j+zb​k

    1、加法和减法

    各项相加即可: q a ± q b = ( s a ± s b ) + ( x a ± x b ) i + ( y a ± y b ) j + ( z a ± z b ) k {q_a} \pm {q_b} = ({s_a} \pm {s_b}) + ({x_a} \pm {x_b})i + ({y_a} \pm {y_b})j + ({z_a} \pm {z_b})k qa​±qb​=(sa​±sb​)+(xa​±xb​)i+(ya​±yb​)j+(za​±zb​)k

    2、数乘

    k q a = k s a + k x a i + k y a j + k z a k k{q_a} = k{s_a} + k{x_a}i + k{y_a}j + k{z_a}k kqa​=ksa​+kxa​i+kya​j+kza​k

    3、乘法

    将 q a q_a qa​和 q b q_b qb​每一项相乘,然后相加,虚部按照定义进行计算: q a q b = ( s a s b − x a x b − y a y b − z a z b ) + ( s a x b + x a s b + y a z b − z a y b ) i {q_a}{q_b} = ({s_a}{s_b} - {x_a}{x_b} - {y_a}{y_b} - {z_a}{z_b}) + ({s_a}{x_b} + {x_a}{s_b} + {y_a}{z_b} - {z_a}{y_b})i qa​qb​=(sa​sb​−xa​xb​−ya​yb​−za​zb​)+(sa​xb​+xa​sb​+ya​zb​−za​yb​)i + ( s a y b − x a z b + y a s b + z a x b ) j + ( s a z b + x a y b − y a x b + z a s b ) k + ({s_a}{y_b} - {x_a}{z_b} + {y_a}{s_b} + {z_a}{x_b})j + ({s_a}{z_b} + {x_a}{y_b} - {y_a}{x_b} + {z_a}{s_b})k +(sa​yb​−xa​zb​+ya​sb​+za​xb​)j+(sa​zb​+xa​yb​−ya​xb​+za​sb​)k 整理得: q a q b = [ s a s b − v a T v b , s a v b + s b v a + v a × v b ] T {q_a}{q_b} = {[{s_a}{s_b} - v_a^T{v_b},{s_a}{v_b} + {s_b}{v_a} + {v_a} \times {v_b}]^T} qa​qb​=[sa​sb​−vaT​vb​,sa​vb​+sb​va​+va​×vb​]T 四元数乘法不可交换,除非 v a v_a va​和 v b v_b vb​在三维空间中共线,此时 v a × v b = 0 {v_a} \times {v_b}=0 va​×vb​=0 注意:本文中 0 0 0代表0向量,如上面的0实际为 [ 0 , 0 , 0 ] T [0,0,0]^T [0,0,0]T.

    4、模长(是实数)

    ∣ ∣ q a ∣ ∣ = s a 2 + x a 2 + y a 2 + z a 2 ||{q_a}|| = \sqrt {s_a^2 + x_a^2 + y_a^2 + z_a^2} ∣∣qa​∣∣=sa2​+xa2​+ya2​+za2​ ​ 且具备以下性质: ∣ ∣ q a q b ∣ ∣ = ∣ ∣ q a ∣ ∣ ⋅ ∣ ∣ q b ∣ ∣ ||{q_a}{q_b}|| = ||{q_a}|| \cdot ||{q_b}|| ∣∣qa​qb​∣∣=∣∣qa​∣∣⋅∣∣qb​∣∣ 当 ∣ q a ∣ ∣ = 1 {|{q_a}|| = 1} ∣qa​∣∣=1时, q a q_a qa​为单位四元数。

    5、共轭(仍是四元数)

    即把虚部取相反数: q a ∗ = s a − x a i − y a j − z a k = [ s a , − v a ] T q_a^* = {s_a} - {x_a}i - {y_a}j - {z_a}k = {[{s_a}, - {v_a}]^T} qa∗​=sa​−xa​i−ya​j−za​k=[sa​,−va​]T 且具备以下性质: q a ∗ q a = q a q a ∗ = [ s a 2 + v T v , 0 ] T = [ s a 2 + x a 2 + y a 2 + z a 2 , 0 ] T q_a^*{q_a} = {q_a}q_a^* = {[s_a^2 + {v^T}v,0]^T} = {[s_a^2 + x_a^2 + y_a^2 + z_a^2,0]^T} qa∗​qa​=qa​qa∗​=[sa2​+vTv,0]T=[sa2​+xa2​+ya2​+za2​,0]T

    6、逆

    q a − 1 = q a ∗ ∣ ∣ q a ∣ ∣ 2 q_a^{ - 1} = \frac{{q_a^*}}{{||{q_a}|{|^2}}} qa−1​=∣∣qa​∣∣2qa∗​​ 且具备以下性质: q a − 1 q a = q a q a − 1 = 1 q_a^{ - 1}{q_a} = {q_a}q_a^{ - 1} = 1 qa−1​qa​=qa​qa−1​=1 当 q a q_a qa​为单位四元数时, q a − 1 = q a ∗ q_a^{ - 1} = q_a^* qa−1​=qa∗​

    三、用四元数表示旋转

    1、空间三维点用四元数描述

    已知空间三维点 P = ( x , y , z ) ∈ R P = (x,y,z) \in \R P=(x,y,z)∈R,则可以用一个虚四元数表示点 P P P: p = [ 0 , x , y , z ] T p = {[0,x,y,z]^T} p=[0,x,y,z]T即三个虚部可以与三维空间中的三个轴对应。

    2、四元数对旋转的描述

    设空间点 P P P经过某一个旋转后变为点 P ′ P' P′,则该旋转一定可以用四元数 q q q表示: p ′ = q p q − 1 p' = qp{q^{ - 1}} p′=qpq−1 可以证明,计算后 p ′ p' p′的实部一定为零。 因此,任意单位四元数描述了一个旋转。

    四、四元数到其他旋转表示的变换

    1、四元数乘法的矩阵形式

    定义

    已知四元数 q = [ s , v ] T q=[s,v]^T q=[s,v]T,则定义符号 + ^+ +和符号 ⊕ ^ \oplus ⊕: q + = [ s − v T v s I + v ∧ ] {q^ + } = \left[ {\begin{matrix} s&{ - {v^T}}\\ v&{sI + v^\wedge} \end{matrix}} \right] q+=[sv​−vTsI+v∧​] q ⊕ = [ s − v T v s I − v ∧ ] {q^ \oplus } = \left[ {\begin{matrix} s&{ - {v^T}}\\ v&{sI - v^\wedge} \end{matrix}} \right] q⊕=[sv​−vTsI−v∧​] 则符号 + ^+ +和符号 ⊕ ^ \oplus ⊕将四元数映射为4X4的矩阵。

    四元数乘法的矩阵表示

    推导: q 1 + q 2 = [ s 1 − v 1 T v 1 s I + v 1 ∧ ] [ s 2 v 2 ] = [ s 1 s 2 − v 1 T v 2 s 1 v 2 + s 2 v 1 + v 1 ∧ v 2 ] = q 1 q 2 q_1^ + {q_2} = \left[ {\begin{matrix} {{s_1}}&{ - {v_1}^T}\\ {{v_1}}&{sI + {v_1}^\wedge} \end{matrix}} \right]\left[ {\begin{matrix} {{s_2}}\\ {{v_2}} \end{matrix}} \right] = \left[ {\begin{matrix} {{s_1}{s_2} - {v_1}^T{v_2}}\\ {{s_1}{v_2} + {s_2}{v_1} + v_1^\wedge{v_2}} \end{matrix}} \right] = {q_1}{q_2} q1+​q2​=[s1​v1​​−v1​TsI+v1​∧​][s2​v2​​]=[s1​s2​−v1​Tv2​s1​v2​+s2​v1​+v1∧​v2​​]=q1​q2​结论: q 1 q 2 = q 1 + q 2 = q 2 ⊕ q 1 {q_1}{q_2} = q_1^ + {q_2} = q_2^ \oplus {q_1} q1​q2​=q1+​q2​=q2⊕​q1​

    2、四元数到旋转矩阵的变换

    推导: p ′ = q p q − 1 = q + ( q − 1 ) ⊕ p = [ 1 0 0 T v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 ] [ 0 x y z ] p' = qp{q^{ - 1}} = {q^ + }{({q^{ - 1}})^ \oplus } p= \left[ {\begin{matrix} 1&0\\ {{0^T}}&{v{v^T} + {s^2}I + 2s{v^\wedge} + {{({v^\wedge})}^2}} \end{matrix}} \right]\left[ {\begin{matrix} 0\\ x\\ y\\ z \end{matrix}} \right] p′=qpq−1=q+(q−1)⊕p=[10T​0vvT+s2I+2sv∧+(v∧)2​]⎣⎢⎢⎡​0xyz​⎦⎥⎥⎤​ 结论: R = v v T + s 2 I + 2 s v ∧ + ( v ∧ ) 2 R = v{v^T} + {s^2}I + 2s{v^\wedge} + {({v^\wedge})^2} R=vvT+s2I+2sv∧+(v∧)2

    3、四元数到旋转向量的转换

    旋转角度: θ = arccos ⁡ s \theta = \arccos s θ=arccoss旋转轴向量(单位向量): [ n x , n y , n z ] T = [ q 1 , q 2 , q 3 ] T / sin ⁡ θ 2 {[{n_x},{n_y},{n_z}]^T} = {[{q_1},{q_2},{q_3}]^T}/\sin \frac{\theta }{2} [nx​,ny​,nz​]T=[q1​,q2​,q3​]T/sin2θ​ 一般程序库会为我们准备好各种形式之间的转换,不用自己写。

    Processed: 0.016, SQL: 10