Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert Euler angles to directional vector?

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!

like image 444
Polaris878 Avatar asked Oct 14 '09 19:10

Polaris878


People also ask

How do you convert Euler angles to rotation matrix?

rotm = eul2rotm( eul , sequence ) converts Euler angles to a rotation matrix, rotm . The Euler angles are specified in the axis rotation sequence, sequence . The default order for Euler angle rotations is "ZYX" .

Are Euler angles a vector?

The axis of rotation is known as an Euler axis, typically represented by a unit vector ê. Its product by the rotation angle is known as an axis-angle vector.

How do you calculate Euler angles?

Given a rotation matrix R, we can compute the Euler angles, ψ, θ, and φ by equating each element in R with the corresponding element in the matrix product Rz(φ)Ry(θ)Rx(ψ). This results in nine equations that can be used to find the Euler angles. Starting with R31, we find R31 = − sin θ.


1 Answers

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) 
like image 107
Beta Avatar answered Sep 24 '22 17:09

Beta