一般來說,三維空間中的剛體具有 **六個自由度**:三個旋轉自由度和三個平移自由度。
剛體的位置和方向可以透過在其上附著座標系來描述。
描述剛體位置和方向的一種常見方法是在其上附著座標系。在定義參考座標系後,剛體的位置和方向完全由座標系原點的位置及其軸線相對於參考座標系的方位確定。
**旋轉矩陣** 描述了兩個這樣的座標系的相對方位。這個 3 × 3 矩陣的列由一個座標系相對於另一個參考座標系的軸線上的單位向量組成。因此,座標系 { b } {\displaystyle \{b\}} 相對於參考座標系 { a } {\displaystyle \{a\}} 的相對方位由旋轉矩陣 a b R {\displaystyle _{a}^{b}R\,} 給出。
b a R = ( a x b a y b a z b ) = ( x b ⋅ x a y b ⋅ x a z b ⋅ x a x b ⋅ y a y b ⋅ y a z b ⋅ y a x b ⋅ z a y b ⋅ z a z b ⋅ z a ) {\displaystyle _{b}^{a}R={\begin{pmatrix}_{a}x^{b}&_{a}y^{b}&_{a}z^{b}\end{pmatrix}}={\begin{pmatrix}x^{b}\cdot x^{a}&y^{b}\cdot x^{a}&z^{b}\cdot x^{a}\\x^{b}\cdot y^{a}&y^{b}\cdot y^{a}&z^{b}\cdot y^{a}\\x^{b}\cdot z^{a}&y^{b}\cdot z^{a}&z^{b}\cdot z^{a}\end{pmatrix}}}
旋轉矩陣可以 **用兩種方式解釋**
作為將第一個座標系 **旋轉** 到第二個座標系的表示(**主動** 解釋)。
作為兩個座標系之間相互 **方位** 的表示(**被動** 解釋)。
點 p {\displaystyle p} 相對於參考座標系 { a } {\displaystyle \{a\}} 的座標,其座標相對於具有相同原點的座標系 { b } {\displaystyle \{b\}} 已知,可以按如下方式計算: a p = b a R b p {\displaystyle _{a}p=\,_{b}^{a}R\,_{b}p} .
旋轉矩陣的一些可能具有實際價值的性質是
a b R {\displaystyle _{a}^{b}R\,} 的列向量相互正交。
矩陣 a b R {\displaystyle _{a}^{b}R\,} 的列向量長度等於 1。
旋轉矩陣是對剛體姿態的非最小描述。也就是說,它使用 9 個數字來表示姿態,而不是僅使用 3 個數字。(上述兩個屬性對應於 9 個矩陣元素之間的 6 個關係。因此,只有 3 個是獨立的。)但是,非最小表示通常具有一些數值優勢,因為它們不表現出座標奇點。
由於 a b R {\displaystyle _{a}^{b}R\,} 是正交的, b a R = a b R − 1 = a b R T {\displaystyle _{b}^{a}R=\,_{a}^{b}R^{-1}=\,_{a}^{b}R^{T}} 。
繞 z 軸旋轉角度 γ {\displaystyle \gamma } 。
關於框架軸的初級旋轉的表示式很容易推匯出。從右邊的圖中可以看出,框架繞 z 軸旋轉角度 γ {\displaystyle \gamma } ,由以下描述:
R z ( γ ) = ( cos ( γ ) − sin ( γ ) 0 sin ( γ ) cos ( γ ) 0 0 0 1 ) {\displaystyle R_{z}(\gamma )={\begin{pmatrix}\cos(\gamma )&-\sin(\gamma )&0\\\sin(\gamma )&\cos(\gamma )&0\\0&0&1\end{pmatrix}}}
類似地,可以證明,框架繞 x 軸旋轉角度 α {\displaystyle \alpha } ,由以下給出:
R x ( α ) = ( 1 0 0 0 cos ( α ) − sin ( α ) 0 sin ( α ) cos ( α ) ) {\displaystyle R_{x}(\alpha )={\begin{pmatrix}1&0&0\\0&\cos(\alpha )&-\sin(\alpha )\\0&\sin(\alpha )&\cos(\alpha )\end{pmatrix}}}
以完全相同的方式推匯出,框架繞 y 軸旋轉角度 β {\displaystyle \beta } ,由以下描述:
R y ( β ) = ( cos ( β ) 0 sin ( β ) 0 1 0 − sin ( β ) 0 cos ( β ) ) {\displaystyle R_{y}(\beta )={\begin{pmatrix}\cos(\beta )&0&\sin(\beta )\\0&1&0\\-\sin(\beta )&0&\cos(\beta )\end{pmatrix}}}
複合旋轉透過將不同的初級旋轉矩陣相乘來找到。
對應於一組關於移動 軸的旋轉的矩陣可以透過後乘 旋轉矩陣來找到,從而以旋轉發生的相同順序將它們相乘。透過繞 z 軸旋轉角度 α {\displaystyle \alpha } ,然後繞移動 的 y 軸旋轉角度 − β {\displaystyle -\beta } 所形成的旋轉矩陣,由以下給出:
R ( z y , α , − β ) = R ( z , α ) R ( y , − β ) {\displaystyle R(zy,\alpha ,-\beta )=R(z,\alpha )R(y,-\beta )}
另一方面,關於**固定**軸的旋轉的合成,可以透過**前乘**不同的基本旋轉矩陣來找到。
關於框架軸的**單個**旋轉的逆,是關於同一軸的旋轉角度為負的旋轉。
R − 1 ( z , α ) = R ( z , − α ) {\displaystyle R^{-1}(z,\alpha )=R(z,-\alpha )}
複合旋轉的逆從矩陣乘積的逆得出。
R − 1 ( z y , α , − β ) = R − 1 ( y , − β ) R − 1 ( z , α ) {\displaystyle R^{-1}(zy,\alpha ,-\beta )=R^{-1}(y,-\beta )R^{-1}(z,\alpha )}
**注意**:這些示例需要 Robotics Toolbox 正確安裝。
theta = pi/2;
T_x = rotx(theta); % Returns a 4x4 pose matrix. The upper-left 3x3 submatrix is the
% rotation matrix representing a rotation by theta about the x-axis.
R_x = tr2rt(T_x); % Returns the 3x3 rotation matrix corresponding with T_x.
T_y = roty(theta); % A rotation about the y-axis.
T_z = rotz(theta); % A rotation about the z-axis.
與旋轉矩陣相反,**尤拉角 **是對相對方向的最小表示(僅一組**三個**數字)。這組三個角描述了關於移動參考系軸的一系列旋轉。但是,有很多(確切地說是 12 個)集合描述了相同的方向:軸的不同組合(例如 ZXZ、ZYZ 等)會導致不同的尤拉角。尤拉角通常用於描述許多串聯機械手機器人的手腕狀末端執行器的方向。
**注意**:相同的軸不應該出現在連續的位置(例如 ZZX)。另外,應該限制尤拉角的範圍以避免相同方向的不同角度。例如:對於 ZYZ 尤拉角的情況,關於 z 軸的第一次旋轉應該在 [ − π , π ] {\displaystyle [-\pi ,\pi ]} 內。關於移動的 y 軸的第二次旋轉,範圍為 [ − π / 2 , π / 2 ] {\displaystyle [-\pi /2,\pi /2]} 。關於移動的 z 軸的最後一次旋轉,範圍為 [ − π , π ] {\displaystyle [-\pi ,\pi ]} 。
正向對映,或找到末端執行器相對於基座框架的方向,從關於移動軸的旋轉的合成得出。對於關於 z 軸旋轉角度為 α {\displaystyle \alpha } 的旋轉,然後是關於移動的 x 軸旋轉角度為 β {\displaystyle \beta } 的旋轉,以及最後關於移動的 z 軸旋轉角度為 γ {\displaystyle \gamma } 的旋轉,得到的旋轉矩陣為
b s e e R = R ( z x z , α , β , γ ) = R ( z , α ) R ( x , β ) R ( z , γ ) {\displaystyle _{bs}^{ee}R\,=R(zxz,\alpha ,\beta ,\gamma )=R(z,\alpha )R(x,\beta )R(z,\gamma )}
寫出之後
R ( z x z , α , β , γ ) = ( c γ c α − s γ c β s α − s γ c α − c γ c β s α s β s α c γ s α + s γ c β c α − s γ s α + c γ c β c α − s β c α s γ s β c γ s β c β ) {\displaystyle R(zxz,\alpha ,\beta ,\gamma )={\begin{pmatrix}c_{\gamma }c_{\alpha }-s_{\gamma }c_{\beta }s_{\alpha }&-s_{\gamma }c_{\alpha }-c_{\gamma }c_{\beta }s_{\alpha }&s_{\beta }s_{\alpha }\\c_{\gamma }s_{\alpha }+s_{\gamma }c_{\beta }c_{\alpha }&-s_{\gamma }s_{\alpha }+c_{\gamma }c_{\beta }c_{\alpha }&-s_{\beta }c_{\alpha }\\s_{\gamma }s_{\beta }&c_{\gamma }s_{\beta }&c_{\beta }\end{pmatrix}}}
注意: 請注意簡寫符號: s α {\displaystyle s_{\alpha }} 代表 sin α {\displaystyle \sin \alpha } , c α {\displaystyle c_{\alpha }} 代表 cos α {\displaystyle \cos \alpha } ,等等。
為了驅動末端執行器,必須解決逆問題:給定一個特定的方向矩陣,實現該方向的尤拉角是什麼?
對於上述情況,尤拉角 α {\displaystyle \alpha } , β {\displaystyle \beta } 和 γ {\displaystyle \gamma } 可以透過觀察旋轉矩陣找到
α = atan2 ( R 13 , − R 23 ) {\displaystyle \alpha ={\textrm {atan2}}(R_{13},-R_{23})}
β = atan2 ( − R 23 c α + R 13 s α , R 33 ) {\displaystyle \beta ={\textrm {atan2}}(-R_{23}c_{\alpha }+R_{13}s_{\alpha },R_{33})}
γ = atan2 ( R 31 , R 32 ) {\displaystyle \gamma ={\textrm {atan2}}(R_{31},R_{32})}
在上面的示例中,當 β = 0 {\displaystyle \beta =0} 時,存在座標奇點。以上等式在 β {\displaystyle \beta } 的小值時數值條件很差:第一個和最後一個等式變得無定義。這對應於末端執行器的第一軸和最後一軸的對齊。座標奇點的出現涉及 **自由度損失**:在上述示例中,繞 y 軸的小旋轉需要繞 x 軸和 z 軸的極大旋轉。
沒有最小表示形式的姿態能夠在不出現座標奇點的情況下全域性描述所有姿態。
剛體的姿態可以用三個連續的繞固定軸旋轉來描述。這導致了使用 **橫滾-俯仰-偏航** (RPY) 角的記法。
RPY 角到旋轉矩陣的正向對映類似於尤拉角的對映。由於現在框架繞固定軸旋轉而不是移動軸,因此不同旋轉矩陣相乘的順序是反轉的
R ( R P Y , r , p , y ) = R ( z , y ) R ( y , p ) R ( x , r ) {\displaystyle R(RPY,r,p,y)=R(z,y)R(y,p)R(x,r)}
寫出之後
R ( R P Y , r , p , y ) = ( c y c p c y s p s r − s y c r c y s p c r + s y s r s y c p s y s p s r + c y c r s y s p c r − c y s r − s p c p s r c p c r ) {\displaystyle R(RPY,r,p,y)={\begin{pmatrix}c_{y}c_{p}&c_{y}s_{p}s_{r}-s_{y}c_{r}&c_{y}s_{p}c_{r}+s_{y}s_{r}\\s_{y}c_{p}&s_{y}s_{p}s_{r}+c_{y}c_{r}&s_{y}s_{p}c_{r}-c_{y}s_{r}\\-s_{p}&c_{p}s_{r}&c_{p}c_{r}\end{pmatrix}}}
反向關係是從上面旋轉矩陣的觀察中找到的
r = atan2 ( R 32 , R 33 ) {\displaystyle r={\textrm {atan2}}(R_{32},R_{33})}
y = atan2 ( R 21 , R 11 ) {\displaystyle y={\textrm {atan2}}(R_{21},R_{11})}
p = atan2 ( − R 31 , c y R 11 + s y R 21 ) {\displaystyle p={\textrm {atan2}}(-R_{31},c_{y}R_{11}+s_{y}R_{21})}
**注意:** 以上等式在 p {\displaystyle p} 接近 π / 2 {\displaystyle \pi /2} 和 − π / 2 {\displaystyle -\pi /2} 的值時,數值條件很差。
單位四元數 (四元數 的絕對值等於 1) 是姿態的另一種表示。它們可以被視為旋轉矩陣和尤拉角集的優點和缺點之間的折衷方案。
以上符號僅描述相對方向。一個點相對於座標系 { b } {\displaystyle \{b\}} 的座標,該座標系相對於參考座標系 { a } {\displaystyle \{a\}} 進行了旋轉和平移,由下式給出:
a p = a b R b p + a p a , b {\displaystyle _{a}p=\,_{a}^{b}R\,_{b}p+_{a}p^{a,b}}
這可以壓縮成一個 **齊次變換矩陣** 或 **位姿(矩陣)** 的形式。其定義如下
a b T = ( a b R a p a , b 0 1 × 3 1 ) {\displaystyle _{a}^{b}T=\left({\begin{array}{cc}^{b}_{a}R&_{a}p^{a,b}\\0_{1\times 3}&1\end{array}}\right)}
該矩陣表示座標系 { b } {\displaystyle \{b\}} 的位置和方向,其原點相對於參考座標系 { a } {\displaystyle \{a\}} 的位置由 a p a , b {\displaystyle _{a}p^{a,b}} 描述,其相對於同一參考座標系 { a } {\displaystyle \{a\}} 的方向由旋轉矩陣 a b R {\displaystyle _{a}^{b}R\,} 描述。
a b T {\displaystyle _{a}^{b}T\,} 因此是三維空間中座標系的表示。如果一個點 p {\displaystyle p} 相對於座標系 { b } {\displaystyle \{b\}} 的座標已知,那麼該點相對於 a {\displaystyle {a}} 的座標可透過以下方式找到:
( a p 1 ) = a b T ( b p 1 ) {\displaystyle {\begin{pmatrix}_{a}p\\1\end{pmatrix}}=\,_{a}^{b}T{\begin{pmatrix}_{b}p\\1\end{pmatrix}}}
這與以下寫法相同
a p = a b R b p + a p a , b {\displaystyle _{a}p=\,_{a}^{b}R\,_{b}p+_{a}p^{a,b}}
請注意,上面的向量用第四個座標(等於 1)進行了擴充套件:它們被設定為齊次 的。
與旋轉矩陣的情況一樣,齊次變換矩陣可以以主動 (“位移 ”)和被動 (“姿態 ”)的方式解釋。它也是非最小 姿態表示形式,不會受到座標奇點的困擾。
如果已知框架 { c } {\displaystyle \{c\}} 的姿態相對於 { b } {\displaystyle \{b\}} ,而 { b } {\displaystyle \{b\}} 的姿態相對於第三個框架 { a } {\displaystyle \{a\}} 是已知的,則由此產生的姿態 a c T {\displaystyle _{a}^{c}T\,} 可以透過以下方式找到:
a c T = a b T b c T {\displaystyle _{a}^{c}T=\,_{a}^{b}T\,_{b}^{c}T}
x = 1;
y = 1.3;
z = 0.4;
T = transl(x,y,z); % Returns the pose matrix corresponding with a translation over
% the vector (x, y, z)'.
姿態矩陣是描述姿態的一種非最小方式。一種常用的最小 替代方法是有限位移扭曲
t = ( α β γ x y z ) {\displaystyle t={\begin{pmatrix}\alpha \\\beta \\\gamma \\x\\y\\z\end{pmatrix}}}
這裡, α {\displaystyle \alpha } 、 β {\displaystyle \beta } 和 γ {\displaystyle \gamma } 是尤拉角的一組有效值(任何有效值),而 x {\displaystyle x} 、 y {\displaystyle y} 和 z {\displaystyle z} 是剛體上參考點座標。