【CV】三維空間的旋轉問題(Rotation in 3D space)

北境の守衛發表於2018-07-19

Yaw, Pitch, Roll 角

這裡寫圖片描述

以飛機的動作為例,

  • 左右擺動是 Yaw 角 – 偏航角
  • 上下襬動是 Pitch 角 – 俯仰角
  • 繞軸擺動是 Roll 角 – 翻滾角

對於相機座標系和世界座標系的轉換來看,

xx, 可以認為 roll axis 是 x-axis, pitch axis 是 y -axis, yaw 是 z-axis. roll-pitch-yaw 角可以按照繞 x-y-z 軸的旋轉大小依次確定.

旋轉矩陣

[ x ′ y ′ z ′ 1 ] = R ⋅ [ x y z 1 ] \begin{bmatrix}x'\\ y'\\ z'\\ 1\end{bmatrix}=R\cdot \begin{bmatrix}x\\ y\\ z\\ 1\end{bmatrix} xyz1=Rxyz1

繞x,y,或z軸旋轉θ的矩陣為:

R x ( θ ) = [ 1 0 0 0 cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ ] R_{x}(\theta)=\begin{bmatrix}1 & 0 & 0\\ 0 & \cos\theta & -\sin\theta\\ 0 & \sin\theta & \cos\theta\end{bmatrix} Rx(θ)=1000cosθsinθ0sinθcosθ

R y ( θ ) = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] R_{y}(\theta)=\begin{bmatrix}\cos\theta & 0 & -\sin\theta\\ 0 & 1 & 0\\ \sin\theta & 0 & \cos\theta\end{bmatrix} Ry(θ)=cosθ0sinθ010sinθ0cosθ

R z ( θ ) = [ cos ⁡ θ − sin ⁡ θ 0 sin ⁡ θ cos ⁡ θ 0 0 0 1 ] R_{z}(\theta)=\begin{bmatrix}\cos\theta & -\sin\theta & 0\\ \sin\theta & \cos\theta & 0\\ 0 & 0 & 1\end{bmatrix} Rz(θ)=cosθsinθ0sinθcosθ0001

而對於繞任意軸旋轉,則需要先把這個軸旋轉至與一條座標軸重合,再繞座標軸旋轉,最後再把軸按原路旋轉回去,即

R x ( − p ) ⋅ R y ( − q ) ⋅ R z ( θ ) ⋅ R y ( q ) ⋅ R x ( p ) R_{x}(-p)\cdot R_{y}(-q)\cdot R_{z}(\theta)\cdot R_{y}(q)\cdot R_{x}(p) Rx(p)Ry(q)Rz(θ)Ry(q)Rx(p),其中

  1. 繞x軸旋轉角度p使指定的旋轉軸在xz平面上
  2. 繞y軸旋轉角度q使指定的旋轉軸與z軸重合
  3. 繞z軸旋轉角度θ
  4. 繞y軸旋轉角度-q
  5. 繞x軸旋轉角度-p

其中,p和q的值需要用i,j,k計算出來。
注意,右邊的旋轉先與齊次座標運算。

尤拉角(Euler angles)

旋轉矩陣乘以點P的齊次座標,得到旋轉後的點P’:
這裡寫圖片描述

上圖中

  • xyz 座標系是固定的參考座標系,圖中藍線
  • XYZ 座標系是依附在剛體上的運動座標系。圖中紅線
  • xy 平面與 XY 平面的交線,叫做交軌線,記作 N,這條線穿過兩個座標系的原點並且垂直於 zZ 平面。圖中綠線

尤拉角由以上元素給出

  • α ( o r   φ ) \alpha (or \, \varphi) α(orφ) x 軸與 N 軸的角度,代表繞z 軸旋轉
  • β ( o r   θ ) \beta (or \, \theta) β(orθ) z 軸與 Z 軸的角度,代表繞 x 軸旋轉
  • γ ( o r   ψ ) \gamma (or \, \psi) γ(orψ) N軸與X軸的角度,代表繞 Z 軸的旋轉

如果 β \beta β是0, 就沒有繞N軸的旋轉. 因此Z軸與z軸重合, α \alpha α γ \gamma γ 代表繞同一個軸(z)的旋轉, 最終的方向可以通過一個單一的繞z軸的旋轉獲得,這個旋轉角度等於 α + γ \alpha + \gamma α+γ.

三個尤拉角的定義是明確的固定的,但是順序卻是依個人喜好定的。
若按照上面的 zxZ 的順序,

  1. 繞z軸旋轉α,使x軸與N軸重合,N軸是旋轉前後兩個座標系x-y平面的交線
  2. 繞x軸(也就是N軸)旋轉β,使z軸與旋轉後的z軸重合
  3. 繞z軸旋轉γ,使座標系與旋轉後的完全重合

R z ( α ) ⋅ R x ( β ) ⋅ R z ( γ ) R_{z}(α)\cdot R_{x}(β)\cdot R_{z}(γ) Rz(α)Rx(β)Rz(γ)

注意與旋轉矩陣不同,在尤拉角中最先進行的旋轉在最左邊。因為旋轉矩陣我們始終基於絕對參考系,而對於尤拉角,我們每一次旋轉都是基於剛體座標系。

Ref

相關文章