視覚SLAM——第三章Eigen幾何学モジュールGeometryは四要素ヨーロッパ式変換行列を使用する
2717 ワード
視覚SLAM——第三章
EigenジオメトリモジュールGeometry四要素ヨーロッパ変換行列を使用
githubリンククリックしてリンクを開く
博文の末尾はQRコードの賞賛を支持します^^;
*このプログラムでは、Eigenジオメトリモジュールの使用方法を説明します.
*回転ベクトルEigen::AngleAxisd角度軸Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) );//Z軸に沿って45度回転
*回転行列Eigen::Matrix 3 d rotation_vector.toRotationMatrix();//回転ベクトルを回転マトリクスに変換
* Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix();//ちょくせつかいてん
*オーラ角Eigen::Vector 3 d rotation_matrix.eulerAngles ( 2,1,0 );//(2,1,0)はZYXシーケンスを表し,すなわちroll pitch yawシーケンス回転行列がEuler角からEuler角に変換される
*4要素Eigen::Quaterniond q=Eigen::Quaterniond(rotation_vector);//回転ベクトル定義四要素
* q = Eigen::Quaterniond ( rotation_matrix );//回転マトリクス定義四要素
*欧式変換行列Eigen::Isometry 3 d T=Eigen::Isometry 3 d::Identity();//3 dと呼ぶが実質的に4*4のマトリクス回転R+平行移動T
* T.rotate ( rotation_vector );//rotation_に従ってvector回転
*Eigen::Isometry 3 d T(q)/一歩四要素で表す回転変換行列
* T.pretranslate ( Eigen::Vector3d ( 1,3,4 ) );//パンベクトルを(1,3,4)に設定
*出力cout<
EigenジオメトリモジュールGeometry四要素ヨーロッパ変換行列を使用
githubリンククリックしてリンクを開く
博文の末尾はQRコードの賞賛を支持します^^;
*このプログラムでは、Eigenジオメトリモジュールの使用方法を説明します.
*回転ベクトルEigen::AngleAxisd角度軸Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) );//Z軸に沿って45度回転
*回転行列Eigen::Matrix 3 d rotation_vector.toRotationMatrix();//回転ベクトルを回転マトリクスに変換
* Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix();//ちょくせつかいてん
*オーラ角Eigen::Vector 3 d rotation_matrix.eulerAngles ( 2,1,0 );//(2,1,0)はZYXシーケンスを表し,すなわちroll pitch yawシーケンス回転行列がEuler角からEuler角に変換される
*4要素Eigen::Quaterniond q=Eigen::Quaterniond(rotation_vector);//回転ベクトル定義四要素
* q = Eigen::Quaterniond ( rotation_matrix );//回転マトリクス定義四要素
*欧式変換行列Eigen::Isometry 3 d T=Eigen::Isometry 3 d::Identity();//3 dと呼ぶが実質的に4*4のマトリクス回転R+平行移動T
* T.rotate ( rotation_vector );//rotation_に従ってvector回転
*Eigen::Isometry 3 d T(q)/一歩四要素で表す回転変換行列
* T.pretranslate ( Eigen::Vector3d ( 1,3,4 ) );//パンベクトルを(1,3,4)に設定
*出力cout<
#include
#include
using namespace std;
#include
// Eigen
#include
/****************************
* Eigen
****************************/
int main ( int argc, char** argv )
{
// d , f , ,
// Eigen/Geometry
// 3D Matrix3d Matrix3f
/**** ****/
// AngleAxis, Matrix, ( )
// ,
// 。
// , , 。
/*********************************/
/* Z 45 */
Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) ); // Z 45
cout .precision(3);
cout< t1;//float
t1 << 0.3,0.1,0.1;
Eigen::Quaterniond q2(-0.5,0.4,-0.1,0.2);
//q2 << -0.5,0.4,-0.1,0.2;
Eigen::Matrix t2;//float
t2 << -0.1,0.5,0.3;
Eigen::Matrix p1;//float
p1 << 0.5,0,0.2;
cout< pw=Tc1w.inverse()*p1; // c1 p1 world
Eigen::Matrix3d q2rotation_matrix = Eigen::Matrix3d::Identity();//
q2rotation_matrix=q2.toRotationMatrix();
Eigen::Isometry3d Tc2w=Eigen::Isometry3d::Identity();// 3d, 4*4
Tc2w.rotate (q2rotation_matrix ); // q1rotation_matrix
Tc2w.pretranslate ( t2); // t1
Eigen::Matrix p2=Tc2w*pw; // world pw c2
cout<