三維空間中剛體的旋轉

2021-10-06 13:38:49 字數 2328 閱讀 6040

從零開始一起學習slam | 三維空間剛體的旋轉

剛體:本身不會在運動過程中產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱歐式變換。

1、是重點!!!

2、旋轉矩陣不是一般矩陣,它有比較強的約束條件。旋轉矩陣r具有正交性,r和r的轉置的乘積是單位陣,且行列式值為1

3、旋轉矩陣r的逆矩陣表示了乙個和r相反的旋轉。

4、旋轉矩陣r通常和平移向量t一起組成齊次的變換矩陣t,描述了歐氏座標變換。引入齊次座標是為了可以方便的描述連續的歐氏變換

5、冗餘。用9個元素表示3個自由度的旋轉,比較冗餘。

1、slam程式設計中使用頻繁程度接近旋轉矩陣。稍微有點抽象,不太直觀,但是一定得掌握。

2、四元數由乙個實部和三個虛部組成,是一種非常緊湊、沒有奇異的表達方式。

3、程式設計時候很多坑,必須注意。首先,一定要注意四元素定義中實部虛部和列印係數的順序不同,很容易出錯!

其次,單位四元素才能描述旋轉,所以四元素使用前必須歸一化:q.normalize()。

1、用乙個旋轉軸n和旋轉角θ來描述乙個旋轉,所以也稱軸角。不過很明顯,因為旋轉角度有一定的週期性(360°一圈),所以這種表達方式具有奇異性。

2、從旋轉向量到旋轉矩陣的轉換過程稱為羅德里格斯公式。這個推導比較麻煩,否則也不會有乙個專屬的名字了。opencv和matlab中都有專門的羅德里格斯函式。

3、旋轉向量本身沒什麼出彩的,不過旋轉向量和旋轉矩陣的轉換關係,其實對應於李代數和李群的對映,這對於後面理解李代數很有幫助。

1、把一次旋轉分解成3次繞不同座標軸的旋轉,比如航空領域經常使用的「偏航-俯仰-滾轉」(yaw,pitch,roll)就是一種尤拉角。該表達方式最大的優勢就是直觀。

2、尤拉角在slam中用的很少,原因是它的乙個致命缺點:萬向鎖。也就是在俯仰角為±90°時,第一次和第3次旋轉使用的是同乙個座標軸,會丟失乙個自由度,引起奇異性。事實上,想要表達三維旋轉,至少需要4個變數。

了解了四種旋轉的表達方式,那麼程式設計時如何使用呢?

事實上,上述幾種旋轉的表達方式在乙個第三方庫eigen中已經定義好啦。eigen是乙個c++開源線性代數庫,安裝非常方便

1、eigen庫不同於一般的庫,它只有標頭檔案,沒有.so和 .a那樣的二進位制庫檔案,所以在cmakelists.txt裡只需要新增標頭檔案路徑,並不需要使用 target_link_libraries 將程式鏈結到庫上。

2、eigen以矩陣為基本資料單元,在eigen中,所有的矩陣和向量都是matrix模板類的物件,matrix一般使用3個引數:資料型別、行數、列數

eigen::matrix

而向量只是一種特殊的矩陣(一行或者一列)。同時,eigen通過typedef 預先定義好了很多內建型別,如下,我們可以看到底層仍然是eigen::matrix

typedef eigen::matrixmatrix4f;

typedef eigen::matrixvector3f;

3、為了提高效率,對於已知大小的矩陣,使用時需要指定矩陣的大小和型別。如果不確定矩陣的大小,可以使用動態矩陣eigen::dynamic

eigen::matrixmatrix_dynamic;

4、eigen在資料型別方面「很傻很天真」。什麼意思呢?就是使用eigen時運算元據型別必須完全一致,不能進行自動型別提公升。比如c++中,float型別加上double型別變數不會報錯,編譯器會自動將結果提公升為double。但是在eigen中float型別矩陣和double型別矩陣不能直接相加,必須統一為float或者double,否則會報錯。

5、eigen除了空間幾何變換外,還提供了大量矩陣分解、稀疏線性方程求解等函式,非常方便。學習eigen最好的方式就是官網:

有非常多的示例參考。

上述四種旋轉表達方式是可以相互轉化的。在eigen中它們之間的轉化非常的方便。下圖是我看的別人總結的旋轉矩陣、四元素、旋轉向量之間的相互轉化圖:

三維空間剛體旋轉

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

三維空間中剛體的變換旋轉和平移

這裡旋轉主要可以採用旋轉向量,旋轉矩陣,尤拉角,四元數。我們也能反向從座標軸表現形式得到旋轉矩陣 尤拉角是採用偏航,俯仰,滾轉 yaw,pitch,roll來表示 這裡是先繞z,再繞y,最後繞x旋轉得到的 四元數 q cos a 2 nxsin a 2 nxsin a 2 nzsin a 2 兩個點...

三維空間中的旋轉變換

1 繞座標軸旋轉的公式 1 繞z軸旋轉 2 繞x軸旋轉 3 繞y軸旋轉 以上的矩陣變換公式為 p p mat 2 繞任意軸旋轉的公式 給定具有單位長的 oa軸旋轉變換的矩陣表示可確定如下 3 繞任意軸旋轉在ogre中實現 ogre matrix3 i ogre matrix3 identity og...