關於用歐拉角表示的座標系姿態旋轉變換,大多數教科書和博客上的講解不甚明晰,自己多方研究分析後,根據自己的理解做如下記錄,一方面幫助自己加深鞏固,另一方面歡迎各位方家指正。
1. 概念定義
繞座標系單軸旋轉的矩陣:
2 描述座標系旋轉變換的兩種形式:
內在旋轉與外在旋轉的轉換關係:互換第一次和第三次旋轉的位置則兩者結果相同。例如Z-Y-X旋轉和內部旋轉和X-Y-Z旋轉的外部旋轉的旋轉矩陣相同。詳見文章的 “6. 附錄:兩種旋轉標準對應的24種旋轉矩陣” 部分。
關於內旋和外旋這兩個概念,只不過是對於兩種旋轉方式的歐拉角的簡稱。
多數教科書中少有提及“內旋”和“外旋”這兩個名詞,但是對於相應的兩種情況都會進行詳細介紹,例如本博客中第4點引用的《機器人學導論》(John J. Craig版)中內容所示。這兩種情況都屬於歐拉角的範疇,兩者不同之處是旋轉的參考對象和旋轉順序不同,但是最終變換後的結果是相同的,所謂殊途同歸,可參見本博客第6點【附錄:兩種旋轉標準對應的24種旋轉矩陣】,發現兩種情況下的矩陣乘積結果是相同。
至於以下問題:
默認情況下,即在不指定說明“內旋”或“外旋”情況下,歐拉角的解算屬於其中的一種呢?
答案是:在航空、航海和工業機器人末端姿態描述中,通常默認採用的歐拉角形式是“XYZ固定角座標系”,即“外旋”形式;又稱“RPY角“,分別先後按照X軸偏轉(Yaw)、Y軸俯仰(Pitch)和繞Z軸滾動(Roll),對應的矩陣變換形式爲 Rxyz=R(Z)*R(Y)*R(X)。在實際應用中,選用哪種形式要根據對象的特點(固定工位機器人or 移動機器人or無人機)和計算方便性選擇合適的歐拉角。
內旋和外旋的區分方法是:根據矩陣相乘順序與旋轉順序是否一致,兩者一致的爲內旋,不一致的爲外旋。
3 基於旋轉軸分類的歐拉角:
4 文獻引用說明:
以下內容選自《機器人學導論》(John J. Craig版)的第31~34頁。
5 常見誤區:
下面內容摘自博客:歐拉角轉旋轉矩陣(Matlab內部函數&公式實現)
該博客作者混淆了歐拉角的兩種不同轉換標準,文章中寫的
“S表示旋轉順序,我習慣上將‘XYZ’定義爲“先旋轉X,再旋轉Y,最後旋轉Z”,所以最後的R=RzRyRx(特別注意這裏!不同的地方表示的含義不一樣,有些工具(比如Matlab)裏面’XYZ’,表示的是“先旋轉Z,再旋轉Y,最後旋轉X”,所以最後的R=RxRyRz)”
這一部分,作者的旋轉命名習慣(R=RzRyRx)是按照【歐拉角外旋】標準中的順序,即每次旋轉的軸是固定座標系中的軸(繞固定座標系旋轉),所以R(XYZ)=RzRyRx;而MATLAB中計算歐拉角和旋轉矩陣選用的是【歐拉角內旋】標準,即每次旋轉圍繞的軸是上次旋轉之後座標系的某個軸(繞動座標系中的軸旋轉),所以R(XYZ)=RxRyRz。
具體可通過MATLAB官方help文檔中的案例來證明其錯誤,具體如下:
MATLAB官方help文檔中計算歐拉角與旋轉矩陣的函數說明:
由歐拉角計算旋轉矩陣:eul2rotm
由旋轉矩陣計算歐拉角:rotm2eul
6. 附錄:兩種旋轉標準對應的24種旋轉矩陣