機器人學——1.4-三角度表示法


歐拉旋轉定理要求繞3個軸依次旋轉,但不能繞同一軸線連續旋轉兩次。旋轉順序分為兩種:歐拉式和卡爾丹式,分別以歐拉和卡爾丹(Cardano)的名字命名。

歐拉式是繞一個特定的軸重復旋轉,但不是連續的: X Y X XYX X Z X XZX Y X Y YXY Y Z Y YZY Z X Z ZXZ Z Y Z ZYZ 。卡爾丹式的特點是繞 3 3 個不同軸旋轉: X Y Z XYZ X Z Y XZY Y Z X YZX Y X Z YXZ Z X Y ZXY Z Y X ZYX 。一般來說,所有這些序列均被統稱為歐拉角,共有 12 12 種形式可供選擇。

現在通常是將所有三角度表示法都稱作歐拉角,但這種稱呼不夠確切,因為一共有 12 12 種不同形式的歐拉角可供選擇。在某一特定技術領域中,歐拉角往往指一種特定的旋轉角順序。

Z Y Z ZYZ 序列的歐拉角表示為
R = R z ( ϕ ) R y ( θ ) R z ( ψ ) R=R_z(\phi)R_y(\theta)R_z(\psi)
它常用在航空和機械動力學中,並在機器人工具箱中使用。歐拉角是一個三維向量 Γ = ( ϕ , θ , ψ ) \Gamma=(\phi,\theta,\psi)
例如,要計算 Γ = ( 0.1 , 0.2 , 0.3 ) \Gamma=(0.1, 0.2, 0.3) 的等價旋轉矩陣,我們可以這樣寫(注意是弧度制):

>> R = rotz(0.1) * roty(0.2) * rotz(0.3)
R =
    0.9021   -0.3836    0.1977
    0.3875    0.9216    0.0198
   -0.1898    0.0587    0.9801

或采用更簡便的方式:

>> R = eul2r(0.1, 0.2, 0.3)
R =
    0.9021   -0.3836    0.1977
    0.3875    0.9216    0.0198
   -0.1898    0.0587    0.9801

上述問題的逆命題是要找到給定旋轉矩陣的歐拉角,可采用以下函數:

>> tr2eul(R)
ans =
    0.1000    0.2000    0.3000

但是,如果 θ \theta 為負時,如

>> R = eul2r(0.1, -0.2, 0.3)
R =
    0.9021   -0.3836   -0.1977
    0.3875    0.9216   -0.0198
    0.1898   -0.0587    0.9801

其反函數結果為

>> tr2eul(R)
ans =
   -3.0416    0.2000   -2.8416

它返回了一個正的 θ \theta 值和兩個不同的 ϕ \phi ψ \psi 值。但這組歐拉角對應的旋轉矩陣仍與前一組是相同的:

>> R = eul2r(ans)
R =
    0.9021   -0.3836   -0.1977
    0.3875    0.9216   -0.0198
    0.1898   -0.0587    0.9801

兩組不同的歐拉角對應同一個旋轉矩陣,說明從旋轉矩陣到歐拉角的映射是不唯一的,而機器人工具箱函數返回的角度 θ \theta 始終為正。
對於 θ = 0 \theta=0 的情況:

>> R = eul2r(0.1, 0, 0.3)
R =
    0.9211   -0.3894         0
    0.3894    0.9211         0
         0         0    1.0000

反函數返回的角度值為

>> tr2eul(R)
ans =
         0         0    0.4000

它與原值完全不同。其實在這種情況下,旋轉矩陣是
R = R z ( ϕ ) R y ( θ ) R z ( ψ ) = R z ( ϕ ) R z ( ψ ) = R z ( ϕ + ψ ) R=R_z(\phi)R_y(\theta)R_z(\psi)=R_z(\phi)R_z(\psi)=R_z(\phi+\psi)
由於 R y = I R_y=I ,所以可化簡為只是 ϕ + ψ \phi+\psi 的一個函數。對於逆運算而言,只能確定這個和的值。要想得到其中每個值,只能按慣例取 ϕ = 0 \phi=0 θ = 0 \theta=0 的情況實際上是一個奇異點,我們之后還會詳細討論。

另一種廣泛使用的旋轉角順序是橫滾(Roll)——俯仰(pitch)——偏航角(yaw),即
R = R z ( θ r ) R y ( θ p ) R z ( θ y ) R=R_z(\theta_r)R_y(\theta_p)R_z(\theta_y)
在這里插入圖片描述
機器人工具箱函數tripleangle可以直觀的展示三角度表示。
它用於描述船舶、飛機和車輛的姿態時非常直觀。橫滾、俯仰和偏航(也稱為側傾、姿態和航向)是指分別繞 x x y y z z 軸的旋轉。這個 x y z xyz 角序列,即專業上的卡爾丹角,也被稱為泰特-布萊恩角(Tait-Bryan)或導航角。對於航空及地面車輛而言,通常定義 x x 軸為前進的方向、 z z 軸垂直向下、 y y 軸指向右手方向

注意,也有一些機器人學教科書[Paul1981;Sicilianoet al.2008;Spong et al.2006]都交換了其中的 x x 軸和 z z 軸,把向前的方向定義為 z z 軸方向而不是 x x 軸方向,也就是說是繞 z z 軸而不是 x x 軸橫滾。新版的機器人工具箱中默認的是 x y z xyz 順序,不過也可以用'zyx'選項來指定 z y x zyx 的順序。

>> R = rpy2r(0.1, 0.2, 0.3)
R =
    0.9363   -0.2896    0.1987
    0.3130    0.9447   -0.0978
   -0.1593    0.1538    0.9752

其逆運算為

>> tr2rpy(R)
ans =
    0.1000    0.2000    0.3000

橫滾——俯仰——偏航序列允許每個角度值有任意正負號,不會產生多解的情況。但它也有一個奇異點,即當 θ p = ± π / 2 \theta_p=\pm \pi/2 時,不過這個點剛好在大多數車輛可能的姿態范圍以外。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM