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-deveigen:使用的時候,只需要在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為反對稱矩陣 外積只對三維向量存在定義...