Quaternion rotation problem


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

but I have not had any luck.

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

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

satsumoSoftware DeveloperCommented:
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.
satsumoSoftware DeveloperCommented:
Notice that what you have as the z-value changes most as you change the angle of the controller.
rpotashAuthor Commented:
I think the values are fine because the yaw pitch numbers come back correct as long as I dont rotate the controller. I found a solution that works for me at http://noelhughes.net/uploads/quat_2_euler_paper_ver3.pdf. The guy takes the quternion and applies a transformation to a unit vector. The dot product between the transformed vector and the original give me angles I need.

Thanks for your help

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
satsumoSoftware DeveloperCommented:
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.
rpotashAuthor Commented:
The link works for me, but might not work for everyone. It was not easy to find the solution to this problem.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Game Programming

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.