2.1.4 旋转的单位四元数表示
本节介绍空间旋转的另一种表示形式,即单位四元数。四元数是将二维空间中的复数扩展至三维空间中得到的超复数,具体可表示为
(2-26)
其中为四元数的实部,、和为虚部。若实部为0,则该四元数又称为虚四元数;若虚部各项均为0,则该四元数又称为实四元数。、和则为虚数单位,分别对应坐标系的三个轴,并满足下述Hamilton表达约束[1]:
,,,,,, (2-27)
同时,我们也可以采用矢量形式来表示上述四元数,于是有
,, (2-28)
1.四元数的运算
1)模长
通过对四元数中各元素求平方和并开根号处理,可得到其模长:
(2-29)
当时,我们称为单位四元数。我们知道,在二维空间中,单位复数实际上可以描述极坐标系下的二维旋转,如图2-9所示。
图2-9 单位复数和二维旋转
(2-30)
因此,对于单位四元数,我们可以将其改写成下述形式,以描述三维空间的任意旋转变换:
,=1 (2-31)
2)加减法
四元数的加减法与普通向量的加减法类似,具体如下:
(2-32)
3)乘法(点乘)
四元数的点乘和向量的点乘类似,将两个四元数的每一项相乘再取和,即有
(2-33)
4)共轭
四元数的共轭可用表示,相当于在的基础上对虚部取负数,即
(2-34)
进一步可以计算得知,一个四元数与其共轭四元数的乘积为一个实数,即
(2-35)
5)逆
四元数的逆定义如下:
(2-36)
由式(2-32)可以看出,四元数与其逆的点乘结果为实数1。
进一步地,对于单位四元数,由于其模长为1,因此有
(2-37)
6)数乘
四元数和实数相乘,表示对四元数进行缩放,并有
(2-38)
2.基于单位四元数的连续旋转
假设我们有三维空间中的一个点,基于单位四元数对点进行旋转操作的过程可以通过下式来表示:
(2-39)
若有多个单位四元数可用来表示对点的连续空间旋转,如和,则该过程可表示为
(2-40)
3.单位四元数和其他旋转表示之间的转换
这里我们省去具体的推导过程,直接给出单位四元数和其他旋转表示之间的转换方程。
1)单位四元数和旋转向量的转换
若已知绕单位向量旋转角度的旋转变换,则可通过单位四元数表示该旋转为
(2-41)
有了式(2-41)中单位四元数和旋转向量的转换关系,回头看式(2-39),就可以分析出:基于单位四元数对P点旋转的过程可看作绕轴对P点旋转角度。
2)单位四元数和旋转矩阵的转换
由于在式(2-39)中,我们基于四元数得到了对点的旋转表达,而基于前面所述的旋转矩阵同样可以实现该旋转过程,因此有
(2-42)
由此我们便可以推导出由单位四元数到旋转矩阵的转换公式:
(2-43)
实际上,在得到单位四元数和旋转向量的转换关系后,根据罗德里格斯旋转公式[见式(2-22)],我们可以由旋转向量进一步得到旋转矩阵:
(2-44)
在这里,我们基本了解了多种空间变换的描述方式和基本原理,在具体代码实现方面,许多经典的函数库均已实现了高效的旋转变换和齐次变换操作供读者使用,如C++环境中的Eigen库、Python环境中的tf.transformations和scipy.spatial.transform库等。