欧拉旋转定理要求绕3个轴依次旋转,但不能绕同一轴线连续旋转两次。旋转顺序分为两种:欧拉式和卡尔丹式,分别以欧拉和卡尔丹(Cardano)的名字命名。
欧拉式是绕一个特定的轴重复旋转,但不是连续的:、、、、 或 。卡尔丹式的特点是绕 个不同轴旋转:、、、、 或 。一般来说,所有这些序列均被统称为欧拉角,共有 种形式可供选择。
现在通常是将所有三角度表示法都称作欧拉角,但这种称呼不够确切,因为一共有 种不同形式的欧拉角可供选择。在某一特定技术领域中,欧拉角往往指一种特定的旋转角顺序。
序列的欧拉角表示为
它常用在航空和机械动力学中,并在机器人工具箱中使用。欧拉角是一个三维向量 。
例如,要计算 的等价旋转矩阵,我们可以这样写(注意是弧度制):
>> R = rotz(0.1) * roty(0.2) * rotz(0.3)
R =
0.9021 -0.3836 0.1977
0.3875 0.9216 0.0198
-0.1898 0.0587 0.9801
或采用更简便的方式:
>> R = eul2r(0.1, 0.2, 0.3)
R =
0.9021 -0.3836 0.1977
0.3875 0.9216 0.0198
-0.1898 0.0587 0.9801
上述问题的逆命题是要找到给定旋转矩阵的欧拉角,可采用以下函数:
>> tr2eul(R)
ans =
0.1000 0.2000 0.3000
但是,如果 为负时,如
>> R = eul2r(0.1, -0.2, 0.3)
R =
0.9021 -0.3836 -0.1977
0.3875 0.9216 -0.0198
0.1898 -0.0587 0.9801
其反函数结果为
>> tr2eul(R)
ans =
-3.0416 0.2000 -2.8416
它返回了一个正的 值和两个不同的 、值。但这组欧拉角对应的旋转矩阵仍与前一组是相同的:
>> R = eul2r(ans)
R =
0.9021 -0.3836 -0.1977
0.3875 0.9216 -0.0198
0.1898 -0.0587 0.9801
两组不同的欧拉角对应同一个旋转矩阵,说明从旋转矩阵到欧拉角的映射是不唯一的,而机器人工具箱函数返回的角度 始终为正。
对于 的情况:
>> R = eul2r(0.1, 0, 0.3)
R =
0.9211 -0.3894 0
0.3894 0.9211 0
0 0 1.0000
反函数返回的角度值为
>> tr2eul(R)
ans =
0 0 0.4000
它与原值完全不同。其实在这种情况下,旋转矩阵是
由于 ,所以可化简为只是 的一个函数。对于逆运算而言,只能确定这个和的值。要想得到其中每个值,只能按惯例取 。 的情况实际上是一个奇异点,我们之后还会详细讨论。
另一种广泛使用的旋转角顺序是横滚(Roll)——俯仰(pitch)——偏航角(yaw),即
机器人工具箱函数tripleangle
可以直观的展示三角度表示。
它用于描述船舶、飞机和车辆的姿态时非常直观。横滚、俯仰和偏航(也称为侧倾、姿态和航向)是指分别绕 、、 轴的旋转。这个 角序列,即专业上的卡尔丹角,也被称为泰特-布莱恩角(Tait-Bryan)或导航角。对于航空及地面车辆而言,通常定义 轴为前进的方向、 轴垂直向下、 轴指向右手方向
注意,也有一些机器人学教科书[Paul1981;Sicilianoet al.2008;Spong et al.2006]都交换了其中的 轴和 轴,把向前的方向定义为 轴方向而不是 轴方向,也就是说是绕 轴而不是 轴横滚。新版的机器人工具箱中默认的是 顺序,不过也可以用
'zyx'
选项来指定 的顺序。
>> R = rpy2r(0.1, 0.2, 0.3)
R =
0.9363 -0.2896 0.1987
0.3130 0.9447 -0.0978
-0.1593 0.1538 0.9752
其逆运算为
>> tr2rpy(R)
ans =
0.1000 0.2000 0.3000
横滚——俯仰——偏航序列允许每个角度值有任意正负号,不会产生多解的情况。但它也有一个奇异点,即当 时,不过这个点刚好在大多数车辆可能的姿态范围以外。