歐拉角與旋轉矩陣的相互轉化

                          
               

一個新座標系由舊的座標系通過旋轉歐拉角得到,一共有12種旋轉方式:

YXY,  ZXZ,  XYX,  ZYZ,  XZX,  YZY,   

XYZ,  XZY,  YXZ,  YZX,  ZXY,  ZYX


下面利用Eigen庫實現歐拉角與旋轉矩陣的互相轉化

需要包含的頭文件如下

#include <Eigen/Core>
#include <Eigen/Dense>
#include <Eigen/Geometry>
#include <Eigen/StdVector>

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

           
               
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章