旋轉三種表示詳解


簡介

我們來看一個簡單的例子。

繞y軸旋轉\(30^o\),三種表示。

  • 矩陣 : \(R_y(30^o)=\begin{bmatrix}\cos 30^o & 0 & -\sin 30^o \\0 & 1 & 0 \\\sin 30^o & 0 & \cos 30^o \end{bmatrix}\)
  • 歐拉角 :
    • \(Heading(Yaw/y)\)   =30
    • \(pitch(x)\)                    =0
    • \(bank(Roll/z)\)          =0
  • 四元數 : [0.9659   (0   0.2588   0)]

我們先要了解這三種旋轉方式的優缺點:

任務/性質 旋轉矩陣 歐拉角 歐拉角
在坐標系間(物體和慣性)旋轉點 不能(必須轉換到矩陣) 不能(必須轉化到矩陣)
連接或增量旋轉 能,但經常比四元數慢,小心矩陣蠕變的情況 不能 能,比矩陣快
插值 基本上不能 能,但可能遭遇萬向鎖或其他問題 Slerp,提供了平滑插值
易用程度
在內存或文件存儲 9個數 3個數 4個數
對給定方位的表達方式是否唯一 不是,對同一方位有無數多種方法 不是,有兩種方法,他們互相為互
可能導致非法 矩陣蠕變 任意三個數能構成合法的歐拉角 可能會出現誤差累計,從而產生非法的四元數

矩陣

平面二維旋轉

如下圖,XY坐標系中,向量OP旋轉β角度到了OP'的位置:
image
根據三角函數關系,可以列出向量OP與OP'的坐標表示形式:

\(\begin{cases} & x = |OP|*\cos \alpha\\ & y=|OP|*sin \alpha \end{cases}\)
\(\begin{cases} & x^\prime = |OP|*\cos (\alpha+\beta) \\ & y^\prime=|OP|*sin (\alpha+\beta) \end{cases}\)
對比上面個兩個式子,將第2個式子展開:
\(\begin{cases} & x^\prime = |OP|*\cos (\alpha+\beta) =|OP|*(\cos\alpha*\cos\beta-\sin\alpha*\sin\beta)=x*\cos\beta-y*\sin\beta \\ & y^\prime=|OP|*sin (\alpha+\beta) =|OP|*(\cos\alpha*\sin\beta+\sin\alpha*\cos\beta)=x*\sin\beta+y*\cos\beta \end{cases}\)
用矩陣形式重新表示為:
\(\begin{bmatrix}x^\prime \\y\prime \end{bmatrix}= \begin{bmatrix}\cos\beta & -\sin\beta\\ \sin\beta & \cos\beta\end{bmatrix}* \begin{bmatrix}x \\ y \end{bmatrix}\)
這就是二維旋轉的基本形式,中間的矩陣即二維旋轉的旋轉矩陣,坐標中的某一向量左乘該矩陣后,即得到這個向量旋轉β角后的坐標。

三維旋轉

三維旋轉可借助二維旋轉來理解,由於三維空間中可以任意軸旋轉,為方便分析與使用,只考慮繞X、Y、Z軸的旋轉。

繞Z軸

參照上面的圖,添加一個Z軸,則上面的二維旋轉實際上就是繞Z軸的三維旋轉
image
照搬上面的推導公式,並添加Z坐標的變換關系(實際是沒有變),然后改寫成矩陣形式,紅色方框即為繞Z軸的旋轉矩陣。
\(\begin{cases} x^\prime=x*\cos\beta-y*\sin\beta \\y^\prime=x*\sin\beta+y*\cos\beta \\z^\prime=z \end{cases}\)
\(\begin{bmatrix} x^\prime \\y^\prime \\z^\prime \end{bmatrix}= \begin{bmatrix} \cos\beta & -\sin\beta & 0 \\ \sin\beta & \cos\beta & 0 \\0 & 0 & 0 \end{bmatrix}* \begin{bmatrix} x \\y \\z \end{bmatrix}\)

繞Y軸

繞Y軸旋轉同理,這里直接改變坐標軸的符號表示,注意坐標順序要符合右手系,我這里用顏色區分了不同的軸。最終的矩陣形式要進一步改寫成XYZ的順序。紅色方框即為繞Y軸的旋轉矩陣。
image
\(\begin{cases} x^\prime=z*\sin\beta+x*\cos\beta \\y^\prime=y \\z^\prime=z*\cos\beta-x*\sin\beta \end{cases}\)
\(\begin{bmatrix} x^\prime \\y^\prime \\z^\prime \end{bmatrix}= \begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\-\sin\beta & 0 & \cos\beta \end{bmatrix}* \begin{bmatrix} x \\y \\z \end{bmatrix}\)

繞X軸

參照繞Y軸的推導,可以得到繞X軸的結果。紅色方框即為繞X軸的旋轉矩陣。
image
\(\begin{cases} x^\prime=x \\y^\prime=y*\cos\beta-z*\sin\beta \\z^\prime=y*\sin\beta+z*\cos\beta \end{cases}\)
\(\begin{bmatrix} x^\prime \\y^\prime \\z^\prime \end{bmatrix}= \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\beta & -\sin\beta \\ 0 & \sin\beta & \cos\beta \end{bmatrix}* \begin{bmatrix} x \\y \\z \end{bmatrix}\)

繞任意方向旋轉

平凡的我們是不需要知道的。

歐拉角

四元數

四元數記法

\(q=\left[ w , v \right]\)                其中\(v\)向量表示。
\(q=\left[ w , (x, y ,z) \right]\)    其中\(x,y,z\)都是復數。
\(q=[\cos{\theta/2} ,(\sin{\theta/2})n_x,(\sin{\theta/2})n_y,(\sin{\theta/2})n_z]\)       其中\(n\)表示任意向量

復數

在介紹四元數與 3D 旋轉之間的關系之前,我們先來討論一下復數(Complex
Number)的一些性質以及它與 2D 旋轉之間的關系.四元數的很多性質在很
多層面上都與復數非常類似,所以理解復數的一些性質會對理解四元數非常
有幫助.

復數表示形式:\(z=a+bi\)
我們可以用向量來表示這個復數:\(\begin{bmatrix}a \\ b \end{bmatrix}\)
在平面上我們表示為:R𝑒 代表它的實部,縱坐標 𝐼𝑚 代表它的虛部:
image

兩個復數\(z_1=a+bi,z_2=c+di\)相乘:
\(z_1z_2=(a+bi)(c+di)=ac+adi+bci+bdi^2\)
因為\(i^2=-1\)這可以進一步簡化為:
\(z_1z_2=ac-bd+adi+bci=ac-bd+(bc+ad)i\)
如果仔細觀察你就能發現,復數相乘的結果其實也是一個矩陣與向量相乘的
結果,也就是說:
\(z_1z_2=ac-bd+(bc+ad)i=\begin{bmatrix}a & -b \\b & a \end{bmatrix}=\begin{bmatrix}c \\ d \end{bmatrix}\)
右側\(\begin{bmatrix}c \\ d \end{bmatrix}\)是用向量的形式來表示的 \(z_2\)
左側\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}\)則是\(z_1\)的矩陣。
我們可以發現,復數相乘這個運算,其實是與這個\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}\)矩陣所代表的變換是等價的。
復數與復數的相乘也可以表示為矩陣的相乘:
\(z_1z_2=\begin{bmatrix}a & -b \\b & a \end{bmatrix}\begin{bmatrix}c & -d \\d & c \end{bmatrix}= \begin{bmatrix}ac-bd & -(bc+ad) \\bc+ad & ac-bd \end{bmatrix}\)
除此之外,我們來看一下一些特殊復數的矩陣形式:
\(I=\begin{bmatrix}1 & 0 \\ 0 & 1 \end{bmatrix}=1\)      (a=1,b=0)
\(i=\begin{bmatrix}0 & -1 \\ 1 & 0 \end{bmatrix}\)      (a=0,b=1)
如果我們嘗試對它進行平方,可以發現:
\(i^2=i*i=\begin{bmatrix}0 & -1 \\ 1 & 0 \end{bmatrix}\begin{bmatrix}0 & -1 \\ 1 & 0 \end{bmatrix}=\begin{bmatrix}-1 & 0 \\ 0 & -1 \end{bmatrix}=-I=-1\)
復數的模長與共軛:
在進行下一步的討論之前,我們先定義一下復數的模長(Magnitude).如
\(𝑧 = 𝑎 + 𝑏𝑖\),那么它的模長為:
\(||z||=\sqrt{a^2+b^2}\)
接下來,我們定義復數的共軛(Conjugate).如果 \(𝑧 = 𝑎 + 𝑏𝑖\),那么它的共
軛:
\(\overline{z}=a-bi\)

復數相乘與 2D 旋轉

現在,我們回到之前的話題,既然與復數的相乘代表着\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}\)矩陣所作出的變換,那這種變換代表着什么呢?
實際上,如果我們對這個矩陣進行一些變形,這個問題就很容易解決了
\(\begin{bmatrix}a & -b \\b & a \end{bmatrix}=\sqrt{a^2+b^2}\begin{bmatrix} \frac{a}{\sqrt{a^2+b^2}} & \frac{-b}{\sqrt{a^2+b^2}} \\ \frac{b}{\sqrt{a^2+b^2}} & \frac{a}{\sqrt{a^2+b^2}} \end{bmatrix}\)
我們將矩陣中每一個元素都除以了模長\(||z||=\sqrt{a^2+b^2}\)並將這一項提到了矩陣外面.經過這一變換,我們只需要觀察一下復平面就能夠解答之前的問題了:
image

在此省略一萬字,更多學習請點擊下面鏈接!!
......

有關更多請參考

寫的太好了
看視頻學習就是輕松啊
精美壁紙


免責聲明!

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



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