【CV】三維空間的旋轉問題(Rotation in 3D space)
Yaw, Pitch, Roll 角
以飛機的動作為例,
- 左右擺動是 Yaw 角 – 偏航角
- 上下襬動是 Pitch 角 – 俯仰角
- 繞軸擺動是 Roll 角 – 翻滾角
對於相機座標系和世界座標系的轉換來看,
, 可以認為 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} ⎣⎢⎢⎡x′y′z′1⎦⎥⎥⎤=R⋅⎣⎢⎢⎡xyz1⎦⎥⎥⎤
繞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θ0−sinθ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θ010−sinθ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θ0−sinθ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),其中
- 繞x軸旋轉角度p使指定的旋轉軸在xz平面上
- 繞y軸旋轉角度q使指定的旋轉軸與z軸重合
- 繞z軸旋轉角度θ
- 繞y軸旋轉角度-q
- 繞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 的順序,
- 繞z軸旋轉α,使x軸與N軸重合,N軸是旋轉前後兩個座標系x-y平面的交線
- 繞x軸(也就是N軸)旋轉β,使z軸與旋轉後的z軸重合
- 繞z軸旋轉γ,使座標系與旋轉後的完全重合
R z ( α ) ⋅ R x ( β ) ⋅ R z ( γ ) R_{z}(α)\cdot R_{x}(β)\cdot R_{z}(γ) Rz(α)⋅Rx(β)⋅Rz(γ)
注意與旋轉矩陣不同,在尤拉角中最先進行的旋轉在最左邊。因為旋轉矩陣我們始終基於絕對參考系,而對於尤拉角,我們每一次旋轉都是基於剛體座標系。
Ref
相關文章
- 利用三維旋轉矩陣在空間中旋轉平面矩陣
- 三維空間中物體兩次旋轉之間的連續旋轉矩陣計算矩陣
- 三維空間座標系變換-旋轉矩陣矩陣
- 三維空間 旋轉矩陣 四元數 尤拉角 相互轉換 組合旋轉矩陣
- 剛體在三維空間的旋轉(關於旋轉矩陣、DCM、旋轉向量、四元數、尤拉角)矩陣
- [CareerCup] 1.8 String Rotation 字串的旋轉字串
- 三維座標系旋轉——旋轉矩陣到旋轉角之間的換算矩陣
- 三維空間變換中旋轉矩陣左乘與右乘的區別矩陣
- 32.qt quick-模仿QQ登入介面實現3D旋轉(Rotation、Flipable)QTUI3D
- 關於如何釋放表空間的問題(About Reclaimable Unused Space)AI
- 三維旋轉:旋轉矩陣,尤拉角,四元數矩陣
- 空間旋轉矩陣怎麼表示矩陣
- 三維旋轉矩陣推導矩陣
- 三維座標系的旋轉矩陣矩陣
- imp/EXP 表空間轉換問題
- 利用RMAN遷移表空間碰到的問題(三)
- 原地旋轉矩陣(不申請新的記憶體空間旋轉矩陣)矩陣記憶體
- 關於Oracle10g中tempfile 空間分配的問題:temp file will not actually allocate disk spaceOracle
- 三維重建學習(1):基礎知識:旋轉矩陣與旋轉向量矩陣
- 沒有磁碟空間 No space left on devicedev
- CSS 3D旋轉效果CSS3D
- 如何實現圖片的3D旋轉,而且是不停旋轉?3D
- 3D遊戲-作業三-空間與運動3D遊戲
- 通過 dbms_space.space_usage 檢視objects 的空間使用情況Object
- 大角度非迭代的空間座標旋轉C#實現C#
- 簡單的css3頭像旋轉與3D旋轉效果CSSS33D
- 三維旋轉矩陣 左乘和右乘分析矩陣
- java - OutOfMemoryError: Java heap space 堆空間不足JavaError
- dbms_space 評估儲存空間
- iOS實現3D旋轉iOS3D
- 3D旋轉矩陣的推導3D矩陣
- 空間資料庫三維空間兩點距離計算錯誤資料庫
- system表空間不足的問題分析
- 解決FRA空間滿的問題
- 檢測磁碟空間問題
- oracle 段空間管理問題Oracle
- 轉享: java.lang.OutOfMemoryError: PermGen space 問題JavaError
- 小程式視訊旋轉的相關問題