1. 程式人生 > >三維空間旋轉(歐拉角、四元數、旋轉矩陣)

三維空間旋轉(歐拉角、四元數、旋轉矩陣)

轉換 當我 隨著 www href bsp out 組合 相同

  姿態角(歐拉角)  

  姿態角即RPY(roll, pitch,yaw)又叫歐拉角,是由三個角組成的。

  俯仰角(pitch)

  技術分享圖片

  翻滾角(roll)

  技術分享圖片

  偏航角(yaw)

  技術分享圖片

  其中最直觀的就是其繞剛體自身的X、Y、Z三個軸分別旋轉的角度,這就是歐拉角(Euler Angle)表示方法。

  技術分享圖片

  需要註意的是,歐拉角的表示方式裏,yaw、pitch、roll的順序對旋轉的結果是有影響的。

  給定一組歐拉角角度值,比如yaw=45度,pitch=30度,roll=60度,按照yaw-pitch-roll的順序旋轉和按照yaw-roll-pitch的順序旋轉,最終剛體的朝向是不同的

  另外需要註意,在歐拉角中,三個旋轉軸一般是隨著剛體一起運動的。

  技術分享圖片

  歐拉角的表示方式比較直觀,但是有幾個缺點:

  (1) 歐拉角的表示方式不唯一。給定某個起始朝向和目標朝向,即使給定yaw、pitch、roll的順序,也可以通過不同的yaw/pitch/roll的角度組合來表示所需的旋轉。比如,同樣的yaw-pitch-roll順序,(0,90,0)和(90,90,90)會將剛體轉到相同的位置。這其實主要是由於萬向鎖(Gimbal Lock)引起的,關於萬向鎖的解釋,有條件的同學看看Youtube的視頻或許會比較直觀。

  (2) 歐拉角的插值比較難。

  (3) 計算旋轉變換時,一般需要轉換成旋轉矩陣,這時候需要計算很多sin, cos,計算量較大。

  方向余弦矩陣(DCM)和旋轉矩陣(RM)  

  在計算坐標變換時,旋轉更方便的表示形式是旋轉矩陣(Rotation Matrix)

  三維空間的旋轉矩陣可以表示成3x3的矩陣,將歐拉角轉換為旋轉矩陣的計算方式如下,

  假設歐拉角yaw、pitch、roll的角度為alpha, beta, gamma,則旋轉矩陣可以計算如下:

   技術分享圖片

  其中

  技術分享圖片

  這裏也可以看出,如果yaw、pitch、roll的順序有改變,矩陣相乘的順序需要作出相應改變,所得的旋轉矩陣結果也會有所改變。

  而最主要的是萬向節鎖(Gimbal lock)的問題,詳情見youtub上有很多演示視頻(例如Gimbal Lock Explained in 30 Seconds)。

  這裏文字解釋一下,一個旋轉萬向節如下:

    技術分享圖片

  最終間的旋轉軸代表偏航角,第二層的旋轉代表俯仰角,最外面的旋轉軸代表翻滾角。

  萬向節鎖的問題是,當鎖死其中一個自由度的時候,其中兩個自由度會重疊,例如鎖死俯仰和翻滾的軸的時候(即最外面的兩層),翻滾和偏航角的旋轉軸會重疊(即表示的是同一個自由度)。

  也就是說這個Gimble lock(萬向鎖)是由旋轉順序中的第二個旋轉軸產生的,即XYZ旋轉順序,Y軸會產生萬向鎖。當我們知道有一個軸經常會旋轉到90度時,那就不要讓這個軸成為第二個旋轉的軸。

  詳情見(Gimbal Lock Explained in 30 Seconds,為youtub 需FQ),另一個視頻可以詳細講解歐拉角和四元數(https://www.youtube.com/watch?v=Mm8tzzfy1Uw)

(未完待續)

  

三維空間旋轉(歐拉角、四元數、旋轉矩陣)