SLAM學(xué)習(xí)筆記3

三維空間剛體運(yùn)動(dòng)瘟栖,筆記內(nèi)容有向量?jī)?nèi)積葵擎,向量外積胎撇,歐氏變換甘桑,旋轉(zhuǎn)向量,歐拉角弄诲,旋轉(zhuǎn)矩陣寓涨,四元數(shù)以及它們的轉(zhuǎn)換關(guān)系盯串,代碼是Eigen庫(kù)的基本使用。
筆記1.jpg
筆記2.jpg

代碼如下:
#include <iostream>
#include <ctime>
#include <cmath>
#include <Eigen/Core>
#include <Eigen/Dense>
#include <Eigen/Geometry> 
using namespace std;
#define MATRIX_SIZE 50

int main(int argc, char** argv)
{
    ///Eigen 基本操作
    Eigen::Matrix<float,2,3> matrix_23 ;
    Eigen::Vector3d v_3d; //實(shí)質(zhì)是Eigen::Matrix<double,3,1>
    matrix_23 << 1,2,3,4,5,6; //賦值操作
    v_3d << 3,2,1;
    Eigen::Matrix<double,2,1> result = matrix_23.cast<double>() * v_3d;
    cout<< result <<endl;
    
    Eigen::Matrix3d matrix_33 = Eigen::Matrix3d::Random();
    cout<< "matrix_33 is :" << matrix_33 <<endl;
    
    cout<< "matrix_33 transpose is :" << matrix_33.transpose() <<endl; //轉(zhuǎn)置
    cout<< "matrix_33 sum is :" << matrix_33.sum() <<endl; //各元素的和
    cout<< "matrix_33 trace is :"<< matrix_33.trace() <<endl; //矩陣的跡
    cout<< "matrix_33 inverse is :"<< matrix_33.inverse() <<endl; //逆
    cout<< "matrix_33 determinant is ::"<< matrix_33.determinant() <<endl; //行列式
    
    //特征值和特征向量
    
    Eigen::SelfAdjointEigenSolver<Eigen::Matrix3d> eigen_solver (matrix_33.transpose() * matrix_33);//實(shí)對(duì)稱矩陣
    cout<< "Eigen values = "<< eigen_solver.eigenvalues() << endl; //特征值
    cout<< "Eigen vectors = "<< eigen_solver.eigenvectors() << endl; //特征向量
    
    //解方程戒良,對(duì)比求逆和矩陣分解的速度
    
    Eigen::Matrix<double,MATRIX_SIZE,MATRIX_SIZE> matrix_NN;
    matrix_NN = Eigen::MatrixXd::Random(MATRIX_SIZE,MATRIX_SIZE);
    Eigen::Matrix < double ,MATRIX_SIZE,1> v_Nd;
    v_Nd = Eigen::MatrixXd::Random(MATRIX_SIZE,1);
    //求逆
    clock_t time_stt = clock();
    Eigen::Matrix<double,MATRIX_SIZE,1> x = matrix_NN.inverse() * v_Nd;
    cout<< " inverse time use is :"<< 1000*(clock()-time_stt)/(double)CLOCKS_PER_SEC << "ms" <<endl;
    
    //QR分解
    time_stt = clock();
    x = matrix_NN.colPivHouseholderQr().solve(v_Nd);
    cout<< "Qr time use is :"<< 1000*(clock()-time_stt)/(double)CLOCKS_PER_SEC << "ms" <<endl;

    ///Eigen 中四元數(shù)体捏,歐拉角,旋轉(zhuǎn)矩陣糯崎,旋轉(zhuǎn)向量的轉(zhuǎn)換
    
    Eigen::Matrix3d rotation_matrix = Eigen::Matrix3d::Identity();
    Eigen::AngleAxisd rotation_vector(M_PI/4,Eigen::Vector3d(0,0,1));
    cout.precision(3);
    rotation_matrix = rotation_vector.toRotationMatrix(); //旋轉(zhuǎn)向量可以轉(zhuǎn)換為旋轉(zhuǎn)矩陣
    cout<<"rotation_matrix is :"<<rotation_matrix<<endl;
    
    ///AngleAxis 旋轉(zhuǎn)向量進(jìn)行坐標(biāo)變換
    Eigen::Vector3d v(1,0,0);
    Eigen::Vector3d v_rotated = rotation_vector * v;
    cout<<"(1,0,0) after rotated:"<<v_rotated.transpose()<<endl;
    
    /// 旋轉(zhuǎn)矩陣進(jìn)行坐標(biāo)變換
    v_rotated = rotation_matrix * v;
    cout<<"(1,0,0) after rotation = "<<v_rotated.transpose();
    
    /// 歐拉角: 可以直接將旋轉(zhuǎn)矩陣轉(zhuǎn)換為歐拉角
    
    Eigen::Vector3d euler_angles = rotation_matrix.eulerAngles(2,1,0); //(2,1,0)表示ZYX 的旋轉(zhuǎn)順序
    cout<<"yaw pitch roll = "<<euler_angles.transpose()<<endl;
    
    ///四元數(shù)  可以將旋轉(zhuǎn)向量轉(zhuǎn)換為四元數(shù)
    Eigen::Quaterniond q = Eigen::Quaterniond (rotation_vector);
    cout<<"Quaterniond = \n"<<q.coeffs()<<endl;//coeffs 表示順序是(x,y,z,w),w為實(shí)部几缭,前三者為虛部。
    
    /// 也可以將旋轉(zhuǎn)矩陣賦予給四元數(shù)
    q = Eigen::Quaterniond(rotation_matrix);
    cout<<"Quaterniond = \n"<<q.coeffs()<<endl;
    ///四元數(shù)旋轉(zhuǎn)一個(gè)矩陣
    v_rotated = q*v; //注意數(shù)學(xué)形式為 qvq^{-1}
    cout<<"(1,0,0) after rotated :"<<v_rotated.transpose()<<endl;
    
    ///使用歐氏變換
    
    Eigen::Isometry3d T_o = Eigen::Isometry3d::Identity();
    T_o.rotate (rotation_vector);
    T_o.pretranslate(Eigen::Vector3d(1,3,4));
    cout<< "Transform matrix = \n"<< T_o.matrix()<<endl;
    Eigen::Vector3d v_transformed = T_o*v;
    cout<<"v transformed :"<<v_transformed.transpose()<<endl;
    
    ///仿射變換
    Eigen::Affine3d T_a = Eigen::Affine3d::Identity();
    T_a.rotate (rotation_vector);
    T_a.prescale(0.5);
    T_a.pretranslate(Eigen::Vector3d(1,3,4));
    cout<< "Transform matrix = \n"<< T_a.matrix()<<endl;
    Eigen::Vector3d v_transformed1 = T_a*v;
    cout<<"v transformed :"<<v_transformed1.transpose()<<endl;
    ///射影變換 
    /*
    Eigen::Projective3d T_p;
    T_p.rotate (rotation_vector);
    T_p.prescale(0.5);
    T_p.pretranslate(Eigen::Vector3d(1,3,4));
    cout<< "Transform matrix = \n"<< T_p.matrix()<<endl;
    Eigen::Vector3d v_transformed2 = T_p*v;
    cout<<"v transformed :"<<v_transformed2.transpose()<<endl;
    */
    return 0;
   
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拇颅,一起剝皮案震驚了整個(gè)濱河市奏司,隨后出現(xiàn)的幾起案子乔询,更是在濱河造成了極大的恐慌樟插,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異黄锤,居然都是意外死亡搪缨,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門鸵熟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來副编,“玉大人,你說我怎么就攤上這事流强”越欤” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵打月,是天一觀的道長(zhǎng)队腐。 經(jīng)常有香客問我,道長(zhǎng)奏篙,這世上最難降的妖魔是什么柴淘? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮秘通,結(jié)果婚禮上为严,老公的妹妹穿的比我還像新娘。我一直安慰自己肺稀,他們只是感情好第股,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著话原,像睡著了一般炸茧。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上稿静,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天梭冠,我揣著相機(jī)與錄音,去河邊找鬼改备。 笑死控漠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的悬钳。 我是一名探鬼主播盐捷,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼默勾!你這毒婦竟也來了碉渡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤母剥,失蹤者是張志新(化名)和其女友劉穎滞诺,沒想到半個(gè)月后形导,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡习霹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年朵耕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淋叶。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阎曹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出煞檩,到底是詐尸還是另有隱情处嫌,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布斟湃,位于F島的核電站锰霜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桐早。R本人自食惡果不足惜癣缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哄酝。 院中可真熱鬧友存,春花似錦、人聲如沸陶衅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)搀军。三九已至膨俐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間罩句,已是汗流浹背焚刺。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留门烂,地道東北人乳愉。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屯远,于是被迫代替她去往敵國(guó)和親蔓姚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容