2014-01-28 91 views

回答

17

看到,因爲我怎麼也找不到一個預置的功能是這樣做,我建一個,就是這樣的情況下,有人認爲這個問題在未來

Eigen::AngleAxisd rollAngle(roll, Eigen::Vector3d::UnitZ()); 
Eigen::AngleAxisd yawAngle(yaw, Eigen::Vector3d::UnitY()); 
Eigen::AngleAxisd pitchAngle(pitch, Eigen::Vector3d::UnitX()); 

Eigen::Quaternion<double> q = rollAngle * yawAngle * pitchAngle; 

Eigen::Matrix3d rotationMatrix = q.matrix(); 
+1

不錯的答案,但正如@narcispr所說,軸將取決於您的應用程序。你能否在你的回答中註明你的目標是飛機應用程序以避免混淆? –

5

所有你需要創建一個旋轉矩陣是音調,偏航,滾動和執行矩陣乘法的能力。首先,創建三個旋轉矩陣,每個旋轉軸一個(即一個用於俯仰,一個用於偏航,一個用於滾動)。這些矩陣將有值:

間距矩陣:

1, 0, 0, 0, 
0, cos(pitch), sin(pitch), 0, 
0, -sin(pitch), cos(pitch), 0, 
0, 0, 0, 1 

偏航矩陣:

cos(yaw), 0, -sin(yaw), 0, 
0, 1, 0, 0, 
sin(yaw), 0, cos(yaw), 0, 
0, 0, 0, 1 

輥母:

cos(roll), sin(roll), 0, 0, 
-sin(roll), cos(roll), 0, 0, 
0, 0, 1, 0, 
0, 0, 0, 1 

下,乘所有的這些結合在一起。這裏的命令很重要。對於正常旋轉,您需要首先將Roll Matrix乘以Yaw Matrix,然後乘以Pitch Matrix。但是,如果您嘗試通過倒退來「撤消」旋轉,則需要以相反的順序執行乘法(除了具有相反值的角度外)。

+0

謝謝你的回答,我已經知道這件事,但我希望圖書館有一個預製功能來做到這一點。 – Caesar

+0

@MohammedMajeed我不相信有內置函數,但請參閱http://stackoverflow.com/a/15043888/1530508瞭解使用四元數的非常簡潔的技巧。 – ApproachingDarknessFish

+0

這是記錄[那裏](http://eigen.tuxfamily.org/dox/group__TutorialGeometry.html#title3) – ggael

7

如何創建一個旋轉矩陣使用音高,偏航,滾動與特徵庫?

有48種方法可以做到這一點。你想要哪一個?以下是這些因素:

  • Extrinsic verus intrinsic。
    是固定系統的軸旋轉(外部)還是旋轉軸(固有)?

  • 旋轉與轉換。
    您想要表示物理旋轉某個對象的矩陣,還是要表示將矢量從一個參考框架轉換爲另一個參考框架的矩陣?

  • 天文序列。
    有六個基本的天文序列。典型的歐拉序列涉及圍繞z軸的旋轉,接着圍繞(旋轉的)x軸旋轉,然後圍繞(再次旋轉)z軸進行第三次旋轉。還有5個這些天文式序列(X-Y-XX-Z-X的y的x-yY-Z-Y,和Z-Y-Z)除了這個規範Z-X-Z序列。

  • 航空航天序列。
    爲了增加混亂,還有六個基本的航空航天序列。例如,俯仰偏航滾動序列相對於滾動俯仰偏航序列。雖然天文學界幾乎已經解決了一系列問題,但對於航空航天界來說卻不能這麼說。一路上你會發現有人使用六種可能的序列中的每一種。此組中的六個序列是X-Y-ZX-Z-YY-Z-XX-Y-ZZ-X-Y,和Z-Y-X
5

凱撒回答是好的,但大衛哈姆說,這取決於您的應用程序。對我來說,(水下或高空作業車領域)的獲獎組合是:

Eigen::Quaterniond 
euler2Quaternion(const double roll, 
        const double pitch, 
        const double yaw) 
{ 
    Eigen::AngleAxisd rollAngle(roll, Eigen::Vector3d::UnitX()); 
    Eigen::AngleAxisd pitchAngle(pitch, Eigen::Vector3d::UnitY()); 
    Eigen::AngleAxisd yawAngle(yaw, Eigen::Vector3d::UnitZ()); 

    Eigen::Quaterniond q = yawAngle * pitchAngle * rollAngle; 
    return q; 
} 
+0

在飛機主軸上,滾動是Z,間距是X,偏航是Y.水下的標準是不同的嗎? http://en.wikipedia.org/wiki/Aircraft_principal_axes – Caesar

+0

@Caesar在我的情況,我有一個瓢蟲全景相機和軸是在這個答案相同。 –

相關問題