基本概念
定义
四元数是由实部和虚部组成的扩展复数。一个四元数可以表示为
q
=
a
+
b
i
+
c
j
+
d
k
q = a + bi + cj + dk
q=a+bi+cj+dk,其中
w
w
w 是实部,
(
x
i
,
y
j
,
z
k
)
(xi, yj, zk)
(xi,yj,zk) 是虚部。他的共轭值定义为:
q
∗
=
a
−
b
i
−
c
j
−
d
k
q^* = a - bi - cj - dk
q∗=a−bi−cj−dk
它的绝对值则是非负实数定义为
∣
h
∣
=
q
q
∗
=
a
2
+
b
2
+
c
2
+
d
2
|h|= \sqrt{qq^*}= \sqrt{a^2+b^2+c^2+d^2}
∣h∣=qq∗=a2+b2+c2+d2
四元数与空间旋转
单位四元数(绝对值为1的四元数)可以用于表示三维空间里的旋转
四元数表示三维空间里的点(纯四元数)
若三维空间里的一个点的笛卡尔坐标为 ( x , y , z ) (x,y,z) (x,y,z),则它用纯四元数(类似于纯虚数,即实部为0的四元数) x i + y j + z k xi+yj+zk xi+yj+zk 表示。
四元数表达旋转
四元数 q q q 可以表示为 q = c o s ( θ / 2 ) + u ∗ s i n ( θ / 2 ) q = cos(θ/2) + u * sin(θ/2) q=cos(θ/2)+u∗sin(θ/2),其中 θ θ θ 是旋转角度, u = ( x , y , z ) u=(x, y, z) u=(x,y,z) 是单位旋转轴向量。
例如,假设我们要绕单位向量 u = ( 0 , 0 , 1 ) u=(0,0,1) u=(0,0,1) 旋转 90 度,构造四元数为 q = c o s ( π / 4 ) + ( 0 i + 0 j + 1 k ) ∗ s i n ( π / 4 ) q = cos(\pi/4) + ( 0i +0j+1k) * sin(\pi/4) q=cos(π/4)+(0i+0j+1k)∗sin(π/4)。
单位四元数表示一个三维空间旋转
设 q q q 为一个单位四元数,而 p p p 是一个纯四元数,定义旋转公式为
p ′ = q p q − 1 p^{\prime}=qpq^{-1} p′=qpq−1
v ′ v^{\prime} v′ 也是一个纯四元数。这个旋转将空间的点 p p p 旋转为空间的另一个点 p ′ p^{\prime} p′。具体计算参考 四元数乘法计算
旋转操作的复合
下式表示将向量/点先旋转
θ
1
\theta _1
θ1再旋转
θ
2
\theta _2
θ2度。
p
21
=
(
q
1
q
2
)
p
(
q
1
q
2
)
−
1
=
q
1
q
2
p
q
2
−
1
q
1
−
1
=
q
1
(
q
2
p
q
2
−
1
)
q
1
−
1
p_{21}=(q_1q_2)p(q_1q_2)^{-1}=q_1q_2pq_2^{-1}q_1^{-1}=q_1(q_2pq_2^{-1})q_1^{-1}
p21=(q1q2)p(q1q2)−1=q1q2pq2−1q1−1=q1(q2pq2−1)q1−1
四元数与旋转矩阵
关于位姿变换的库已经很成熟我们用不着自己写,但是要注意不同的库对四元数的表达形式不同,例如
在这里插入代码片