欧拉角的定义有许多不同的形式,为了方便使用,本文列出了ros中欧拉角的定义。为了增加可信度,本文直接采用源码中的注释对ros tf中的欧拉角的定义进行说明。
在Quaternion.h中,存在以下三种设置方法。
1 setRPY();
这个函数采用固定轴的旋转方式,先绕定轴x旋转(横滚),然后再绕定轴y(俯仰),最后绕定轴z(偏航)。
从数学形式上说,这是绕定轴XYZ矩阵依次左乘,即:R = R(z) R(y)R(x)的顺序。由于是绕着定轴转动,所以很直观,便于人机交互。
/**@brief Set the quaternion using fixed axis RPY
- @param roll Angle around X
- @param pitch Angle around Y
- @param yaw Angle around Z*/
void setRPY(const tfScalar& roll, const tfScalar& pitch, const tfScalar& yaw);
2 setEuler
这种方式是绕着动轴转动,先绕Y轴,在绕变换后的X轴,再绕变换后的Z轴旋转。
从数学形式上说,这是绕定轴YXZ矩阵依次右乘,即:R = R(y)R(x)R(z) 的顺序。
/**@brief Set the quaternion using Euler angles
- @param yaw Angle around Y
- @param pitch Angle around X
- @param roll Angle around Z */
void setEuler(const tfScalar& yaw, const tfScalar& pitch, const tfScalar& roll);
3 setEulerZYX
与2相同,此种旋转变换也是绕动轴旋转,只不过次序为ZYX,矩阵也是右乘,即R = R(z) R