Link to home
Start Free TrialLog in
Avatar of rpotash
rpotash

asked on

Quaternion rotation problem

Hi,

I am trying to determine Eular angles [roll, yaw, pitch] from Quaternions [w, x, y, z] which are being streamed to me from a PS3 Move controller. If I don't rotate the controller and just move it then the eular angles I derive from the quaternions match the controller position. e.g If the quaternions I get back are [w = 0.89, x = 0.37, y = 0.23, z = -0.09] the Eular angles I derive are [roll = 0, yaw = 28, pitch = 46], which is what I expect. Now if I dont move the controller just rotate it around it's own axis then the Eular's I derive from the quaternions suggest that my pitch and yaw have changed. e.g. If I dont move the controller from the earlier mentioned position and just rotate it 35 degress then the quaternions I get back are [w = 0.83, x = 0.29, y = 0.33, z = -0.34] which map out to Eular angles [roll = -20, yaw = 50, pitch = 50]. The answer I am looking for is [roll = 35, yaw = 28, pitch = 46].

The formulas I have tried for conversion from Quaternion to Eular are

yaw = atan2(2*qy*qw-2*qx*qz , 1 - 2*qy2 - 2*qz2)
roll = asin(2*qx*qy + 2*qz*qw)
pitch = atan2(2*qx*qw-2*qy*qz , 1 - 2*qx2 - 2*qz2)

and the one's mentioned on wikipedia
http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles

but I have not had any luck.

Any ideas, suggestions or formula's will be highly appreciated.

Thanks
Avatar of Member_2_5069294
Member_2_5069294

I don't think there's anything wrong with the formula.  My guess is that the values are returned in the order, x-y-z-w rather than w-x-y-z as you have described them.
Notice that what you have as the z-value changes most as you change the angle of the controller.
ASKER CERTIFIED SOLUTION
Avatar of rpotash
rpotash

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
The yaw and pitch might be OK because the middle two of the values in x-y-z-w and w-x-y-z would be used correctly by the algorithm.  They may end up in the wrong axis, but that depends on the coordinate system in use.  Still, you have an answer that works, problem solved.
Avatar of rpotash

ASKER

The link works for me, but might not work for everyone. It was not easy to find the solution to this problem.