MATLAB: Quat2eul(quat) and dcm2Angle(R) difference for ZYX sequence

quaternion

I've converted a quaternion to Euler angle using quat2eul(q,'ZYX') and a rotation matrix to Euler angle with function dcm2Angle(R,'ZYX'). However, the resulted graph is inverted (upside down). Example , if yaw angle from quaternion is up, yaw angle from dcm2Angle is down. How could that happen ?
Any help would be apperciated.
Thanks

Best Answer

MATLAB uses two different quaternion conventions in their toolboxes. In particular, the quaternion convention used in the Aerospace Toolbox is essentially the conjugate of the quaternion convention used in their Robotics Toolbox. See these links for more details of that difference:
The quat2eul( ) function comes from the Robotics Toolbox.
The dcm2Angle( ) function comes from the Aerospace Toolbox.
So these functions come from toolboxes with different definitions of quaternion conventions, and how to convert between quaternions and direction cosine matrices and Euler angles will be different between them.
Bottom line is you cannot mix & match functions from these toolboxes and expect consistency. Depending on what you are doing, one can give you the opposite answer as the other. You need to determine what quaternion convention you will be using, and then use the appropriate functions from the appropriate toolbox that uses the same convention.
The Robotics Toolbox "rotation matrix" is in fact a direction cosine matrix ... just another term for the same thing. It is the conversions between it and quaternions and Euler Angles that are different from the Aerospace Toolbox.