剛體運動中的旋轉通常可以由旋轉矩陣,旋轉向量和四元數等多種方式表示,在eigen庫中也有其對應的實現。本文主要介紹剛體運動時旋轉矩陣,旋轉向量和四元數的初始化以及相互轉換在eigen中的實現方式。
1. eigen庫中各種形式的表示
旋轉矩陣(3x3):eigen::matrix3d
旋轉向量(3x1)
:eigen::angleaxisd
四元數(4x1):eigen::quaterniond
平移向量(3x1):eigen::vector3d
變換矩陣(4x4):eigen::isometry3d
四元數筆記參考
eigen官網-四元數部分
補充學習資料
注意:?程式**與數學表示有細微差別,例如通過運算子過載,四元數和三維向量可以直接計算乘法。
?只有單位四元數才表示旋轉矩陣,所以要先對四元數做單位化
q.
normalized()
;//important
matrix3d r=q.
torotationmatrix()
;
#include
#include
using
namespace std;
#include
#include
using
namespace eigen;
// 本程式演示了eigen幾何模組的使用方法
intmain
(int argc,
char
**ar**)
cout <<
"(1,0,0) after rotation = "
<< v_rotated.
transpose()
<< endl;
// 用常規向量乘法表示,則計算如下
cout <<
"should be equal to "
<<
(q *
quaterniond(0
,1,0
,0)* q.
inverse()
).coeffs()
.transpose()
<< endl;
return0;
}
輸出結果:
rotation matrix =
0.707
-0.707
00.707
0.70700
01(1
,0,0
) after rotation (by angle axis)
=0.707
0.7070(
1,0,
0) after rotation (by matrix)
=0.707
0.707
0 yaw pitch roll =
0.785-0
0transform matrix =
0.707
-0.70701
0.707
0.70703
0014
0001
v transformed =
1.71
3.71
4 quaternion from rotation vector =00
0.383
0.924
quaternion from rotation matrix =00
0.383
0.924
0.707
-0.707
00.707
0.70700
01(1,0,0
) after rotation =
0.707
0.707
0should be equal to 0.707
0.707
00
基礎知識點
1 inline block布局 2 table布局 3 justify的末行不對齊 4 兩個圖示之間有空格 換行 5 背景中的的 路徑的 全部斜槓都為 不是 命令列下的這種 doctype html html head meta charset utf 8 title xx title head ...
erlang基礎知識點
1 變數是不可改變的,必須以首字母大寫開頭 2 字串就是小寫字母,或者單引號引起來的字串 3 賦值可以使用匹配模式 4 資料結構有元組,取值用匹配模式來取值 就能取到x,b的值 5 資料結列表 ss,aa,取值是用 head foot 的形式取值 頭和尾的形式匹配 6 字串只能用雙引號表示 7 函式...
ios基礎知識點
1.記憶體管理 用記憶體引用計數來進行管理 alloc,retain,copy會使記憶體引用計數立即 1 當物件使用結束後要對它進行釋放 release 立即 1 autorelease 未來 1 autorelease的物件會把這個物件放置到離它最近的自動釋放池裡,自動釋放池釋放的時候才會把自動釋...