問題描述
我有俯仰角、滾轉(zhuǎn)角和偏航角.我如何將這些轉(zhuǎn)換為方向向量?
如果你能向我展示這個的四元數(shù)和/或矩陣表示會特別酷!
不幸的是,關(guān)于如何定義這些東西有不同的約定(并且滾轉(zhuǎn)、俯仰、偏航與歐拉角并不完全相同),因此您將有小心點(diǎn).
如果我們將pitch=0定義為水平(z=0),yaw定義為從x軸逆時針,那么方向向量將為
<前>x = cos(yaw)*cos(pitch)y = sin(yaw)*cos(pitch)z = sin(音高)注意我沒有用過roll;這是方向單位向量,它不指定姿態(tài).編寫一個旋轉(zhuǎn)矩陣很容易,它可以將物體帶入飛行物體的框架中(如果你想知道,比如說,左翼尖指向哪里),但首先指定約定確實(shí)是一個好主意.你能告訴我們更多關(guān)于這個問題的信息嗎?
(兩年半來我一直想回到這個問題.)
對于完整的旋轉(zhuǎn)矩陣,如果我們使用上面的約定并且我們希望向量先偏航,然后是俯仰,然后是滾動,為了獲得世界坐標(biāo)系中的最終坐標(biāo),我們必須在世界坐標(biāo)系中應(yīng)用旋轉(zhuǎn)矩陣逆序.
第一卷:
<代碼>|1 0 0 ||0 cos(roll) -sin(roll) ||0 sin(roll) cos(roll) |
然后投球:
<代碼>|cos(pitch) 0 -sin(pitch) ||0 1 0 ||sin(pitch) 0 cos(pitch) |
然后偏航:
<代碼>|cos(yaw) -sin(yaw) 0 ||sin(yaw) cos(yaw) 0 ||0 0 1 |
將它們組合起來,總的旋轉(zhuǎn)矩陣為:
<代碼>|cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(卷)||sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(卷)||sin(pitch) cos(pitch)sin(roll) cos(pitch)sin(roll)|
因此對于從 x 軸開始的單位向量,最終坐標(biāo)將為:
x = cos(yaw)cos(pitch)y = sin(yaw)cos(pitch)z = sin(音高)
對于從 y 軸(左翼尖)開始的單位向量,最終坐標(biāo)將為:
x = -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll)y = -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll)z = cos(pitch)sin(roll)
I have pitch, roll, and yaw angles. How would I convert these to a directional vector?
It'd be especially cool if you can show me a quaternion and/or matrix representation of this!
Unfortunately there are different conventions on how to define these things (and roll, pitch, yaw are not quite the same as Euler angles), so you'll have to be careful.
If we define pitch=0 as horizontal (z=0) and yaw as counter-clockwise from the x axis, then the direction vector will be
x = cos(yaw)*cos(pitch) y = sin(yaw)*cos(pitch) z = sin(pitch)
Note that I haven't used roll; this is direction unit vector, it doesn't specify attitude. It's easy enough to write a rotation matrix that will carry things into the frame of the flying object (if you want to know, say, where the left wing-tip is pointing), but it's really a good idea to specify the conventions first. Can you tell us more about the problem?
EDIT: (I've been meaning to get back to this question for two and a half years.)
For the full rotation matrix, if we use the convention above and we want the vector to yaw first, then pitch, then roll, in order to get the final coordinates in the world coordinate frame we must apply the rotation matrices in the reverse order.
First roll:
| 1 0 0 |
| 0 cos(roll) -sin(roll) |
| 0 sin(roll) cos(roll) |
then pitch:
| cos(pitch) 0 -sin(pitch) |
| 0 1 0 |
| sin(pitch) 0 cos(pitch) |
then yaw:
| cos(yaw) -sin(yaw) 0 |
| sin(yaw) cos(yaw) 0 |
| 0 0 1 |
Combine them, and the total rotation matrix is:
| cos(yaw)cos(pitch) -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll) -cos(yaw)sin(pitch)cos(roll)+sin(yaw)sin(roll)|
| sin(yaw)cos(pitch) -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll) -sin(yaw)sin(pitch)cos(roll)-cos(yaw)sin(roll)|
| sin(pitch) cos(pitch)sin(roll) cos(pitch)sin(roll)|
So for a unit vector that starts at the x axis, the final coordinates will be:
x = cos(yaw)cos(pitch)
y = sin(yaw)cos(pitch)
z = sin(pitch)
And for the unit vector that starts at the y axis (the left wing-tip), the final coordinates will be:
x = -cos(yaw)sin(pitch)sin(roll)-sin(yaw)cos(roll)
y = -sin(yaw)sin(pitch)sin(roll)+cos(yaw)cos(roll)
z = cos(pitch)sin(roll)
這篇關(guān)于如何將歐拉角轉(zhuǎn)換為方向向量?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!