歐拉旋轉定理要求繞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
橫滾——俯仰——偏航序列允許每個角度值有任意正負號,不會產生多解的情況。但它也有一個奇異點,即當 時,不過這個點剛好在大多數車輛可能的姿態范圍以外。