Eigen實現尤拉角 四元數和旋轉矩陣之間的變換

2021-09-02 14:10:30 字數 1314 閱讀 5021

include相應的標頭檔案

#include
旋轉矩陣和旋轉向量的表示和宣告及旋轉

// 3d 旋轉矩陣直接使用 matrix3d 或 matrix3f

eigen::matrix3d rotation_matrix = eigen::matrix3d::identity();

// 旋轉向量使用 angleaxis, 它底層不直接是 matrix ,但運算可以當作矩陣(因為過載了運算子)

eigen::angleaxisd rotation_vector ( m_pi/4, eigen::vector3d ( 0,0,1 ) ); // 沿 z 軸旋轉 45 度

cout .precision(3);

cout<<"rotation matrix =\n"《尤拉角:可以將旋轉矩陣直接轉換成尤拉角

eigen::vector3d euler_angles = rotation_matrix.eulerangles ( 2,1,0 ); // zyx 順序,即 yaw pitch roll

順序cout<<"yaw pitch roll = "《歐氏變換矩陣使用 eigen::isometry

eigen::isometry3d t=eigen::isometry3d::identity(); //雖然稱為 3d ,實質上是 4*4 的矩陣

t.rotate ( rotation_vector ); //按照 rotation_vector 進行旋轉

t.pretranslate ( eigen::vector3d ( 1,3,4 ) ); //把平移向量設成 (1,3,4)

cout << "transform matrix = \n" << t.matrix() 《用變換矩陣進行座標變換

eigen::vector3d v_transformed = t*v; //

相當於 r*v+t

cout<<"v tranformed = "《對於仿射和射影變換,使用 eigen::affine3d 和 eigen::projective3d 即可

四元數q=[cos(θ/2),nxsin(θ/2),nysin(θ/2),nzsin(θ/2)]

// 可以直接把 angleaxis 賦值給四元數,反之亦然

eigen::quaterniond q = eigen::quaterniond ( rotation_vector );

cout<<"quaternion = \n"《想進一步了解 eigen 的幾何模組可以參考(http://eigen.

tuxfamily.org/dox/group__tutorialgeometry.html)

使用eigen進行四元數和尤拉角轉換注意事項

在使用eigen進行四元數到尤拉角的轉換過程中,需要注意四元數x,y,z,w的位置關係,轉換過程中容易出錯。需要注意有時候需要變換x和z的位置,因為有時候座標軸的朝向可能不一致。如果一定要使用eigen最好使用tf中的getyaw 函式進行驗證,或者用直接轉換的進行驗證。如果只轉化z軸可以用四元數和...

四元數和尤拉角

1.尤拉角 我們這裡談論尤拉角只討論在笛卡爾座標系下,不考慮飛機座標系 我不確定正規是不是叫這個名字 那種。也就是右手定則確定的笛卡爾座標系。可以把x和y放在水平面,z軸朝上,這樣想象一下。然後,很顯然存在三種旋轉方式,也就是分別繞x,繞y和繞z旋轉。我們分別把三種旋轉稱為roll 繞x軸旋轉 pi...

Eigen 四元數 尤拉角 旋轉矩陣 旋轉向量

一 旋轉向量 1.0 初始化旋轉向量 旋轉角為alpha,旋轉軸為 x,y,z eigen angleaxisd rotation vector alpha,vector3d x,y,z 1.1 旋轉向量轉旋轉矩陣 eigen matrix3d rotation matrix rotation ma...