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...