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.