SLAM學習(三) 三維空間剛體運動(實踐)

2021-09-26 13:39:58 字數 1464 閱讀 2224

**庫:

上篇文章主要寫了三維剛體運動的一些理論知識。

這部分實踐主要介紹使用eigen來表示矩陣、向量,隨後引申至旋轉矩陣和變換矩陣的計算。

在實踐之前,您需要安裝eigen庫,網上有很多安裝教程,相信難不倒大家,然後就廢話少說,直接上**:

**檔名:eigenmatrix.cpp

#include using namespace std;

#include // eigen 部分

#include // 稠密矩陣的代數運算(逆,特徵值等)

#include #define matrix_size 50

/****************************

* 本程式演示了 eigen 基本型別的使用

****************************/

int main( int argc, char** ar** )

要編譯它,需要在cmakelists.txt裡指定eigen的頭檔案目錄:

#新增標頭檔案

include_directories("/usr/include/eigen3")

注:因為eigen庫中只有標頭檔案,所以不需要再用target_link_libraries語句將程式鏈結到庫上。在之後的工作中,我們會使用find_package命令去搜尋庫。

然後就可以編譯好這個程式後,執行它(步驟看之前文章)。

現在我們來實踐演練下前面講到的各種旋轉表達方式。我們將在eigen中使用四元數、尤拉角和旋轉矩陣,演練它們之間的變換關係。

檔名:usegeometry.cpp

#include #include using namespace std;

#include // eigen 幾何模組

#include /****************************

* 本程式演示了 eigen 幾何模組的使用方法

****************************/

int main ( int argc, char** ar** )

{ // eigen/geometry 模組提供了各種旋轉和平移的表示

// 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"《編譯執行就好了。

視覺SLAM十四講 三 三維空間剛體運動 下

理論部分請看 三維空間剛體運動 首先安裝 eigen sudo apt get install libeigen3 dev一般都安裝在 usr include eigen3 中 include include using namespace std eigen 部分 include 稠密矩陣的代數運...

視覺SLAM十四講 三 三維空間剛體運動 下

理論部分請看 三維空間剛體運動 首先安裝 eigen sudo apt get install libeigen3 dev一般都安裝在 usr include eigen3 中 include include using namespace std eigen 部分 include 稠密矩陣的代數運...

slam十四講(一)三維空間剛體運動

外積的方向垂直於這兩個向量,大小為 a b sin a,b 是兩個向量張成的四邊形的有向面積。且外積可以表達旋轉矩陣。其中這個為反對稱矩陣,寫作a 我們把中間的陣拿出來,定義成乙個矩陣 r。這個矩陣由兩組基之間的內積組成,刻畫了旋轉前後同乙個向量的座標變換關係。只要旋轉是一樣的,那麼這個矩陣也是一樣...