正如在二維情況下一樣,我們可以用相對於參考坐標系的坐標軸單位向量表示它們所在坐標系的方向。每一個單位向量有
個元素,它們組成了
階正交矩陣
:
上式將一個相對於坐標系
的向量旋轉為相對於坐標系
的向量。矩陣
屬於特殊三維正交群,或
。它具有前文提到的標准正交矩陣的特性,如
以及
。
分別繞
,
,
軸旋轉
角后的標准正交旋轉矩陣可表示為
機器人工具箱中也提供了一些函數來計算這些基本的旋轉矩陣,例如
是
>> R = rotx(pi/2)
R =
1.0000 0 0
0 0.0000 -1.0000
0 1.0000 0.0000
函數roty
和rotz
則分別用於計算
和
。
要繪制出相應的坐標系,可以用
>> trplot(R)
如圖所示
如果要想使一個旋轉更加生動有力,可以使用工具箱函數tranimate
制作一個旋轉動畫:
>> tranimate(R)
它將展示世界坐標系旋轉到指定坐標系的過程。
在正交旋轉矩陣中,從左至右的列向量可以告訴我們旋轉后新坐標系各個軸相對於當前坐標系的方向。例如,如果
R = 1.0000 0 0 0 0.0000 -1.0000 0 1.0000 0.0000
則新坐標系的 軸仍在以前 軸方向 ,但其 軸卻在以前的 軸方向 ,而新的 軸在以前 軸的反方向 。這里,之所以 軸沒變,是因為這個旋轉是圍繞 軸發生的。行向量則相反,它們表示了原來坐標系的各個軸在新坐標系中的方向。
為了說明旋轉的復合,我們繼續旋轉上一張圖所示的坐標系,這一次繞它的y軸旋轉:
>> R = rotx(pi/2) * roty(pi/2)
R =
0.0000 0 1.0000
1.0000 0.0000 -0.0000
-0.0000 1.0000 0.0000
>> trplot(R)
繪制出如圖所示的坐標系。在這個坐標系中,
軸現在指向世界坐標系
軸的方向。
如果顛倒以上旋轉的順序,可以看出旋轉的不可交換性:
>> R = roty(pi/2) * rotx(pi/2)
R =
0.0000 1.0000 0.0000
0 0.0000 -1.0000
-1.0000 0.0000 0.0000
>> trplot(R)
得到的結果是完全不同的。
回憶一下歐拉旋轉定理,它指出任何旋轉都可以用不超過
次繞坐標軸的旋轉表示。這意味着,一般情況下兩個坐標系之間的任意旋轉均可分解為一組繞三個旋轉軸轉動的角度——這個問題之后討論。
正交矩陣有
個元素,但它們不是獨立的。每一列都是單位長度,這提供了
個約束。列與列之間相互正交,又提供了另外
個約束。
個元素加上
個約束,實際上只有
個獨立的值。