Dlib姿態估計 旋轉矩陣與尤拉角互轉

2021-08-14 01:06:42 字數 2789 閱讀 7048

在這篇文章中,我將分享將乙個3×3旋轉矩陣轉換成尤拉角的**,反之亦然。3d旋轉矩陣可以讓你的頭旋轉。 我知道這是乙個壞的雙關語,但真相有時可能是非常小的!

乙個旋轉矩陣有三個自由度,數學家已經行使了他們的創造自由,以每個想象的方式來表示3d旋轉——或使用三個數字、或使用四個數字、或使用乙個3×3矩陣。 還有很多不同的方式用三個數字表示乙個旋轉或用四個數字的一些方法來表示旋轉。

例如,3d中的旋轉可以表示為三個角度,可以將其表示在x、y、z三個軸上。但是,這三個角度也可以表示到z,y和x軸上(表示方法不同)。這些角度被稱為尤拉角或tait–bryan角。在原始尤拉角公式中,通過圍繞z,x軸和再對z軸(或者對於y-x-y或z-y-z)的連續旋轉來描述旋轉。當旋轉被指定為圍繞三個不同的軸(例如x-y-z)的旋轉時,它們應該被稱為泰特—布賴恩(tait-bryan)角,但是流行的術語仍然是尤拉角,所以我們也將它們稱為尤拉角。有六種可以用tait-bryan角度描述旋轉的方法——x-y-z,x-z-y,y-z-x,y-x-z,z-x-y,z-y-x。現在你在想,選擇很簡單。 讓我們選擇x-y-z。 對 麼? 答案是錯誤的。 行業標準是z-y-x,因為它對應於yaw偏航,pitch俯仰和roll滾轉。

yaw偏航角

pitch俯仰角

roll滾轉角

定義旋轉矩陣時還有其他的含糊之處。給定乙個點(x

,y,z

) ,你可以把這個點想象成乙個行向量[x

,y,z

] 或乙個列向量[x

,y,z

]t。如果使用行向量,則必須對3×

3 旋轉矩陣進行右乘;如果使用列向量表示,則用3×

3 旋轉矩陣左乘該列向量。這兩個旋轉矩陣是不一樣的(它們是彼此的轉置)。

我的觀點是沒有標準的方法來將旋轉矩陣轉換成尤拉角。所以,我決定(幾乎)與matlab實現的rotm2euler.m一致。唯一的區別是他們返回的尤拉角z軸是第乙個和x軸是最後乙個(z-y-x)。我的**先返回x(x-y-z)。

對於3d旋轉的最簡單的方法是以軸角形式思考。任何旋轉都可以由乙個旋轉軸來定義,乙個角度可以描述旋轉的量。比方說,你想旋轉乙個點或乙個參考框架繞x軸旋轉θx

度。與該旋轉對應的旋轉矩陣由下式給出: rx

=⎡⎣⎢

1000

cos(θx

)sin(θ

x)0−

sin(θx

)(cosθx)

⎤⎦⎥

θy和θ

z 關於y和z軸的旋轉可以寫成: ry

=⎡⎣⎢

cos(θy

)0−sin(θ

y)01

0sin(θ

y)0(

cosθy)

⎤⎦⎥

rz=⎡

⎣⎢cos(θz

)sin(θ

z)0−

sin(θz

)(cosθz)

0001

⎤⎦⎥

關於任意軸的旋轉

r 可以用關於z,y和最後x軸的連續旋轉來寫,使用下面顯示的矩陣乘法。 r=

rzry

rx在這個公式中,θx

,θy 和

θz是尤拉角。給定這三個角度,首先找到rx

,ry 和

rz,然後將它們相乘得到

r ,就可以很容易地找到旋轉矩陣。

// calculates rotation matrix given euler angles.

mat euleranglestorotationmatrix(vec3f &theta)

將旋轉矩陣轉換成尤拉角是有點棘手的。該解決方案在大多數情況下不是唯一的。使用上一節中的**,可以驗證與尤拉角

[0.1920

,2.3736

,1.170

] (或[11

,136,64

] )(度))和[−

2.9496

,0.7679,−

2.0246

] (或[−

169,44,

−116

] (度))實際上是相同的,儘管尤拉角看起來非常地不同。下面的**顯示了給定旋轉矩陣的尤拉角的一種方法。下面**的輸出應該與matlab的ro

tm2e

uler

.m的輸出完全匹配,但是x和z的順序是交換的(z-y-x)。

// checks if a matrix is a valid rotation matrix.

bool isrotationmatrix(mat &r)

// calculates rotation matrix to euler angles

// the result is the same as matlab except the order

vec3f rotationmatrixtoeulerangles(mat &r)

else

return vec3f(x, y, z);

}

01 旋轉矩陣與變換矩陣

旋轉矩陣描述了兩個座標系 slam中兩個時刻機械人的姿態 之間的相互關係,是slam中描述姿態變換的數學工具。為了更深入地理解旋轉矩陣及座標變化,我們簡單地以兩個原點重合的座標系來闡釋旋轉矩陣的含義及其性質。有兩個座標系 b a 其中 b 為剛體座標系 兩座標係原點重合,點 p 是剛體上的一點 座標...

Eigen 旋轉向量與旋轉矩陣(用法)

1 旋轉矩陣 旋轉向量 eigen angleaxisd rotation vector2 rotation vector2.fromrotationmatrix rotation matrix2 或者 eigen angleaxisd rotation vector2 rotation matri...

四元素與旋轉矩陣

如何描述三維空間中剛體的旋轉,是個有趣的問題。具體地說,就是剛體上的任意乙個點p x,y,z 圍繞過原點的軸 i,j,k 旋轉 求旋轉後的點p x y z 旋轉矩陣乘以點p的齊次座標,得到旋轉後的點p 因此旋轉矩陣可以描述旋轉,x y z 1 r xy z1 繞x,y,或z軸旋轉 的矩陣為 r x ...