2.1.2 旋转的欧拉角表示
我们可以看出,在使用旋转矩阵R表示三维空间中的旋转和姿态时,共需要9个变量来表示它们,而对应的旋转本身则通常只有3个自由度。这种旋转的表达方式会带来明显的参数冗余,使得我们在利用算法求解旋转矩阵时需要较多的变量,并且由于旋转矩阵是行列式为1的正交阵,因此还需要额外引入相应的约束,这使得求解较为复杂。事实上,我们可以将空间旋转表示为绕坐标系3个轴向的转角表示,即旋转的欧拉角姿态表示。欧拉角的使用十分广泛,根据旋转轴顺序的不同,欧拉角有多种形式。在航空航天、船舶工程等特定领域,欧拉角通常有统一的定义方式,例如RPY角形式。如图2-5所示,假设前向为x轴,左侧为y轴,垂直向上为z轴,其中绕x轴的旋转角称为翻滚角(roll),绕y轴的旋转角称为俯仰角(pitch),绕z轴的旋转角称为偏航角(yaw);则RPY角形式的欧拉角描述了物体首先绕x轴旋转,然后绕y轴旋转,然后绕z轴旋转。
图2-5 RPY角定义示意图
其中需要注意的是,根据物体围绕的转轴是属于固定坐标系还是运动坐标系,我们得到的旋转也会不同。下面我们先以绕固定轴的RPY角为例讲述该过程。如图2-6(a)所示,我们现有一个原始坐标系,而后我们将其绕着原始坐标系的x轴旋转roll角度,得到坐标系1,如图2-6(b)所示;接下来,我们将得到的坐标系1绕着原始坐标系的y轴旋转pitch角度,得到坐标系2,如图2-6(c)所示;最后,我们将得到的坐标系2绕着原始坐标系的z轴旋转yaw角度,得到坐标系3,如图2-6(d)所示。坐标系3的方位可通过相对固定轴的旋转合成得到,即通过依次左乘每一步的旋转矩阵得到总的姿态变换,于是有
(2-19)
图2-6 绕固定轴的旋转过程示意图
上面由于篇幅受限,我们用c()和s()分别代表cos()和sin()函数,并将yaw、pitch、roll分别简写为y、p、r,于是有
,,
进一步地,我们再讨论基于运动坐标系旋转的情况。如图2-7(a)所示,我们仍从原始坐标系出发,将其绕原始坐标系的x轴旋转roll角度,得到坐标系1,如图2-7(b)所示;接下来,我们将得到的坐标系1绕着其y轴旋转pitch角度,得到坐标系2,如图2-7(c)所示;最后,我们将得到的坐标系2绕着其z轴旋转yaw角度,得到坐标系3,如图2-7(d)所示。对比图2-6和图2-7可以看出,在使用固定轴旋转和运动轴旋转两种方式时,我们自第二步旋转开始得到不同的旋转结果。在使用运动轴旋转时,我们可通过依次右乘每一步的旋转矩阵,得到总的姿态变换,于是有
(2-20)
图2-7 绕运动轴的旋转过程示意图
以绕固定轴的旋转为例,将坐标系1旋转到坐标系3的欧拉角可记为下述矢量:
(2-21)
我们可以看出,欧拉角描述的空间旋转与其转动顺序强相关,且欧拉角的三个分量不具有互换性。在求解欧拉角RPY的逆变换时,不能仅对角度取负实现,而应该按照相反的旋转顺序反转相应的角度。此外,连续旋转操作也不能通过简单的欧拉角相加来描述。
此外,当俯仰角pitch=±90°时,欧拉角描述的旋转存在奇异性,此时滚动角和偏航角无法区分,其描述的旋转会出现退化现象,这就是欧拉角的万向锁现象。虽然用欧拉角表示旋转具有较强的直观性,但是由于欧拉角的奇异性,工程人员在优化和滤波等迭代算法中通常不使用欧拉角表示较大的旋转变换。