欧拉角与旋转矩阵的互相转化

一个新坐标系由旧的坐标系通过旋转欧拉角得到,一共有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

你可能感兴趣的:(欧拉角与旋转矩阵的互相转化)