SLAM學習 三維空間剛體變換(1)

2021-09-25 04:34:41 字數 1916 閱讀 3405

1. 歐式變換

相機運動是乙個剛體運動,它保證了同乙個向量在各個座標系下的長度和夾角都不會發生變化。這種變換稱為歐氏變換

乙個歐式變換由乙個旋轉和乙個平移兩部分組成;其中,旋轉矩陣表徵繞各個座標軸所旋轉的角度,平移矩陣表徵沿各個座標軸移動的大小;

如:考慮世界座標系中的向量a

,經過一次

旋轉(用

r

描述)和一次平移

t

後,得到了

a

′,那麼把旋轉和平移合到一起,有:

a

′ =

ra

+t

. (1)

其中,t稱為平移向量。相比於旋轉,平移部分只需把這個平移量加到旋轉之後的座標上。通過上式,我們用乙個旋轉矩陣

r

和乙個平移向量

t完整地描述了乙個歐氏空間的座標變換關係。

2. 變換矩陣與齊次座標

引入齊次座標和變換矩陣重寫式a

′ =

ra

+t,得到:

把乙個三維向量的末尾新增

1,變成了四維向量,稱為

齊次座標。對於這個四維向量,我們可以把旋轉和平移寫在乙個矩陣裡面,使得整個關係變成 了線性關係。該式中,矩陣t

稱為變換矩陣

transform matrix);

測試:使用

eigen 來表示矩陣、向量。

eigen是乙個 c++ 開源線性代數庫。它提供了快速的有關矩陣的線性代數運算,還 包括解方程等功能。許多上層的軟體庫也使用 eigen

進行矩陣運算,包括

g2o、

sophus 等。

eigen的安裝:

sudo apat-get install libeigen3-dev

eigen:使用的時候,只需要在cmakelists.txt指定eigen的頭檔案目錄即可:

# 新增eigen標頭檔案

include_directories( "/usr/include/eigen3" )

#include using namespace std;

#include // eigen 部分

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

#include #define matrix_size 50

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

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

三維空間剛體旋轉

剛體 運動過程中不會產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱為歐式變換。旋轉矩陣 四元數旋轉向量 尤拉角安裝方式 eigen庫只有標頭檔案,沒有.so和.a二進位制檔案,所以在cmakelists.txt中只需要新增標頭檔案路徑,並不需要使用target link...

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

庫 上篇文章主要寫了三維剛體運動的一些理論知識。這部分實踐主要介紹使用eigen來表示矩陣 向量,隨後引申至旋轉矩陣和變換矩陣的計算。在實踐之前,您需要安裝eigen庫,網上有很多安裝教程,相信難不倒大家,然後就廢話少說,直接上 檔名 eigenmatrix.cpp include using na...

三維空間剛體運動學習

三維空間剛體運動的描述方式 旋轉矩陣 變換矩陣 四元數和尤拉角 在slam 中相機可以看成三維空間的剛體,相機的位置是指相機在空間中的哪乙個地方,二姿態則是指相機的朝向。結合起來可以說 相機正處於 0,0,0 點出,朝向正前方 axb a b 外積 該符號表示a為反對稱矩陣 外積只對三維向量存在定義...