一个新坐标系由旧的坐标系通过旋转欧拉角得到,一共有12种旋转方式:
YXY, ZXZ, XYX, ZYZ, XZX, YZY,
XYZ, XZY, YXZ, YZX, ZXY, ZYX
下面利用Eigen库实现欧拉角与旋转矩阵的互相转化
需要包含的头文件如下
#include
#include
#include
#include
1.已知欧拉角求旋转矩阵
::Eigen::Vector3f EulerAngle;
若EulerAngle是XYZ顺序,则旋转矩阵为
::Eigen::Matrix3d RXYZ = ::Eigen::AngleAxisd(EulerAngle[0], ::Eigen::Vector3d::UnitX())
* ::Eigen::AngleAxisd(EulerAngle[1], ::Eigen::Vector3d::UnitY())
* ::Eigen::AngleAxisd(EulerAngle[2], ::Eigen::Vector3d::UnitZ());
若EulerAngle是ZXZ顺序,则旋转矩阵为
::Eigen::Matrix3d RZXZ = ::Eigen::AngleAxisd(EulerAngle[0], ::Eigen::Vector3d::UnitZ())
* ::Eigen::AngleAxisd(EulerAngle[1], ::Eigen::Vector3d::UnitX())
* ::Eigen::AngleAxisd(EulerAngle[2], ::Eigen::Vector3d::UnitZ());
2.已知旋转矩阵求欧拉角
由于欧拉角有12种旋转方式,因此一个旋转矩阵理论上可以求出12组欧拉角
::Eigen::Matrix3d R;
求ZYX顺序欧拉角
::Eigen::Vector3f EulerAngleZYX= R.eulerAngles(2, 1, 0);
求ZXZ顺规欧拉角
::Eigen::Vector3f EulerAngleZYZ= R.eulerAngles(2, 1, 2);
其中eulerAngles()的三个参数表示旋转顺序。0,1,2分别代表X,Y,Z