旋转矩阵
基本概念
三个主轴,可以看作是三个向量,为b在a的表达,以a为基准
旋转矩阵
B相对于A的姿态:
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 ] ^A_BR=\begin{bmatrix} ^A\hat{X_B} & ^A\hat{Y_B} & ^A\hat{Z_B}\\ \end{bmatrix} =\begin{bmatrix}\hat{X}_B\cdot\hat{X}_A&\hat{Y}_B\cdot\hat{X}_A&\hat{Z}_B\cdot\hat{X}_A\\\hat{X}_B\cdot\hat{Y}_A&\hat{Y}_B\cdot\hat{Y}_A&\hat{Z}_B\cdot\hat{Y}_A\\\hat{X}_B\cdot\hat{Z}_A&\hat{Y}_B\cdot\hat{Z}_A&\hat{Z}_B\cdot\hat{Z}_A\end{bmatrix} BAR=[AXB^AYB^AZB^]= X^B⋅X^AX^B⋅Y^AX^B⋅Z^AY^B⋅X^AY^B⋅Y^AY^B⋅Z^AZ^B⋅X^AZ^B⋅Y^AZ^B⋅Z^A
用三个列向量分别来表示B坐标系每一个转轴的方向,每一个列向量的组成:即每一个轴的向量在A坐标系的投影,即通过点乘得到投影。
以下面的图为例子,蓝色为A坐标系,红色为B坐标系。
如果要求 B A R = ? ^A_BR=? BAR=? ,需要分析B的三轴与A的三轴的关系。B的X轴与A的Z轴反向,则 A X B ^ = [ 0 0 − 1 ] ^A\hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} AXB^= 00−1 ,如果去分析投影计算方法,则可知是向量 X B ^ = [ 0 0 − 1 ] \hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} XB^= 00−1 分别与 X A ^ = [ 1 0 0 ] \hat{X_A}=\begin{bmatrix}1\\0\\0\end{bmatrix} XA^= 100 、 Y A ^ = [ 0 1 0 ] \hat{Y_A}=\begin{bmatrix}0\\1\\0\end{bmatrix} YA^= 010 、 Z A ^ = [ 0 0 1 ] \hat{Z_A}=\begin{bmatrix}0\\0\\1\end{bmatrix} ZA^= 001 ,就可以得到 A X B ^ = [ 0 0 − 1 ] ^A\hat{X_B}=\begin{bmatrix}0\\0\\-1\end{bmatrix} AXB^= 00−1 了。
B的Y轴与A的Y轴重叠,即 A Y B ^ = [ 0 1 0 ] ^A\hat{Y_B}=\begin{bmatrix}0\\1\\0\end{bmatrix} AYB^= 010
B的Z轴与A的X轴重叠,即 A Z B ^ = [ 1 0 0 ] ^A\hat{Z_B}=\begin{bmatrix}1\\0\\0\end{bmatrix} AZB^= 100
可以得到
B A R = [ 0 0 1 0 1 0 − 1 0 0 ] ^A_BR=\begin{bmatrix}0 &0 &1\\ 0&1&0\\ -1&0&0 \end{bmatrix} BAR= 00−1010100
特性
特性1
由于点乘得到的是一个数,左右交换顺序并不改变得到的结果
B A R = [ 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 ] = [ X ^ A ⋅ X ^ B X ^ A ⋅ Y ^ B X ^ A ⋅ Z ^ B Y ^ A ⋅ X ^ B Y ^ A ⋅ Y ^ B Y ^ A ⋅ Z ^ B Z ^ A ⋅ X ^ B Z ^ A ⋅ Y ^ B Z ^ A ⋅ Z ^ B ] ^A_BR =\begin{bmatrix}\hat{X}_B\cdot\hat{X}_A&\hat{Y}_B\cdot\hat{X}_A&\hat{Z}_B\cdot\hat{X}_A\\\hat{X}_B\cdot\hat{Y}_A&\hat{Y}_B\cdot\hat{Y}_A&\hat{Z}_B\cdot\hat{Y}_A\\\hat{X}_B\cdot\hat{Z}_A&\hat{Y}_B\cdot\hat{Z}_A&\hat{Z}_B\cdot\hat{Z}_A\end{bmatrix}=\begin{bmatrix}\hat{X}_A\cdot\hat{X}_B&\hat{X}_A\cdot\hat{Y}_B&\hat{X}_A\cdot\hat{Z}_B\\\hat{Y}_A\cdot\hat{X}_B&\hat{Y}_A\cdot\hat{Y}_B&\hat{Y}_A\cdot\hat{Z}_B\\\hat{Z}_A\cdot\hat{X}_B&\hat{Z}_A\cdot\hat{Y}_B&\hat{Z}_A\cdot\hat{Z}_B\end{bmatrix} BAR= X^B⋅X^AX^B⋅Y^AX^B⋅Z^AY^B⋅X^AY^B⋅Y^AY^B⋅Z^AZ^B⋅X^AZ^B⋅Y^AZ^B⋅Z^A = X^A⋅X^BY^A⋅X^BZ^A⋅X^BX^A⋅Y^BY^A⋅Y^BZ^A⋅Y^BX^A⋅Z^BY^A⋅Z^BZ^A⋅Z^B
B A R = [ B X A ^ T B Y A ^ T B Z A ^ T ] = [ B X A ^ B Y A ^ B Z A ^ ] T = A B R T ^A_BR=\begin{bmatrix}^B\hat{X_A}^T\\^B\hat{Y_A}^T\\^B\hat{Z_A}^T\end{bmatrix} =\begin{bmatrix}^B\hat{X_A}&^B\hat{Y_A}&^B\hat{Z_A}\end{bmatrix}^T =^B_AR^T BAR= BXA^TBYA^TBZA^T =[BXA^BYA^BZA^]T=ABRT
特性2
B A R T ⋅ B A R = [ A X B ^ T A Y B ^ T A Z B ^ T ] [ A X B ^ A Y B ^ A Z B ^ ] = [ 1 0 1 0 1 0 0 0 1 ] = I 3 = B A R − 1 ⋅ B A R ^A_BR^T \cdot^A_BR=\begin{bmatrix}^A\hat{X_B}^T\\^A\hat{Y_B}^T\\^A\hat{Z_B}^T\end{bmatrix}\begin{bmatrix} ^A\hat{X_B} & ^A\hat{Y_B} & ^A\hat{Z_B}\\ \end{bmatrix} =\begin{bmatrix} 1 & 0 & 1\\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} =I_3=^A_BR^{-1} \cdot^A_BR BART⋅BAR= AXB^TAYB^TAZB^T [AXB^AYB^AZB^]= 100010101 =I3=BAR−1⋅BAR
即:
B A R T ⋅ B A R = = B A R − 1 ⋅ B A R ^A_BR^T \cdot^A_BR==^A_BR^{-1} \cdot^A_BR BART⋅BAR==BAR−1⋅BAR
称之为单位正交矩阵。
该矩阵有九个数字,但是有六个限制条件(单位正交、每一行或者列的长度为1,共有三行六列),因此只有三个自由度,与转动只有三个自由度相符。
特性3
坐标点的转换,在B坐标系的P点通过与旋转矩阵相乘,得到A坐标系的P点
A P = B A R B P ^AP=^A_BR^BP AP=BARBP
对于将旋转拆解成三次旋转的连乘
- 需要明确多次旋转的前后顺序
- 旋转转轴也需要明确定义,是对固定不动的转轴旋转(Fixed angles),还是对转动之后坐标系下的转轴旋转(Euler angles)
旋转矩阵可以描述物体旋转的状态(以逆时针为正),
以 Z A ^ \hat{Z_A} ZA^为旋转轴,旋转角度为 θ \theta θ
R Z A ^ ( θ ) = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] R_{\hat{Z_A}}(\theta)=\begin{bmatrix}cos\theta&-sin\theta&0\\sin\theta&cos\theta&0\\0&0&1\end{bmatrix} RZA^(θ)= cosθsinθ0−sinθcosθ0001
通过旋转,得到下面的坐标 A P ′ = R ( θ ) A P {}^AP^{\prime}=R(\theta)^AP AP′=R(θ)AP 。
Fix Angles
依次按照XYZ轴旋转,可得:
B A R X Y Z ( γ , β , α ) = R Z ( α ) R Y ( β ) R X ( γ ) _B^AR_{XYZ}(\gamma,\beta,\alpha)=R_Z(\alpha)R_Y(\beta)R_X(\gamma) BARXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)
先转的在后面,即先与矩阵相乘(需要乘的矩阵在最右侧),先进行变换,后转在前面。
在fix angles下,先对X轴旋转60°、后对Y轴旋转30°与先对Y轴旋转30°,在对X轴旋转60°的旋转矩阵。
先对X轴旋转60°、后对Y轴旋转30°:
B A R X Y Z ( γ , β , α ) = R Z ( 0 ) R Y ( 30 ) R X ( 60 ) = [ 0.866 0.433 0.25 0 0.5 − 0.866 − 0.5 0.75 0.433 ] ^A_BR_{XYZ}(\gamma,\beta,\alpha)=R_Z(0)R_Y(30)R_X(60)=\begin{bmatrix}0.866&0.433&0.25\\0&0.5&-0.866\\-0.5&0.75&0.433\end{bmatrix} BARXYZ(γ,β,α)=RZ(0)RY(30)RX(60)= 0.8660−0.50.4330.50.750.25−0.8660.433
先对Y轴旋转30°,在对X轴旋转60°的旋转矩阵:
B A R X Y Z ( γ , β , α ) = R Z ( 0 ) R X ( 60 ) R Y ( 30 ) = [ 0.866 0 0.5 0.433 0.5 − 0.75 − 0.25 0.866 0.433 ] _B^AR_{XYZ}(\gamma,\beta,\alpha)=R_Z(0)R_X(60)R_Y(30)=\begin{bmatrix}0.866&0&0.5\\0.433&0.5&-0.75\\-0.25&0.866&0.433\end{bmatrix} BARXYZ(γ,β,α)=RZ(0)RX(60)RY(30)= 0.8660.433−0.2500.50.8660.5−0.750.433
可以通过旋转矩阵倒推角度:
B A R X Y Z ( γ , β , α ) = [ c α c β c α s β s γ − s α c γ c α s β c γ + s α s γ s α c β s α s β s γ + c α c γ s α s β c γ − c α s γ − s β c β s γ c β c γ ] = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] ^A_BR_{XYZ}(\gamma,\beta,\alpha)=\begin{bmatrix}c\alpha c\beta&c\alpha s\beta s\gamma-s\alpha c\gamma&c\alpha s\beta c\gamma+s\alpha s\gamma\\s\alpha c\beta&s\alpha s\beta s\gamma+c\alpha c\gamma&s\alpha s\beta c\gamma-c\alpha s\gamma\\-s\beta&c\beta s\gamma&c\beta c\gamma\end{bmatrix}=\begin{bmatrix}r_{11}&r_{12}&r_{13}\\r_{21}&r_{22}&r_{23}\\r_{31}&r_{32}&r_{33}\end{bmatrix} BARXYZ(γ,β,α)= cαcβsαcβ−sβcαsβsγ−sαcγsαsβsγ+cαcγcβsγcαsβcγ+sαsγsαsβcγ−cαsγcβcγ = r11r21r31r12r22r32r13r23r33
当 β ≠ 90 \beta \neq 90 β=90 :
β = A t a n 2 ( − r 31 , r 11 2 + r 21 2 ) α = A t a n 2 ( r 21 / c β , r 11 / c β ) γ = A t a n 2 ( r 32 / c β , r 33 / c β ) \begin{aligned} &\beta=Atan2(-r_{31},\sqrt{{r_{11}}^{2}+{r_{21}}^{2}}) \\ &\alpha=Atan2(r_{21}/c\beta,r_{11}/c\beta) \\ &\gamma=Atan2(r_{32}/c\beta,r_{33}/c\beta) \end{aligned} β=Atan2(−r31,r112+r212)α=Atan2(r21/cβ,r11/cβ)γ=Atan2(r32/cβ,r33/cβ)
I f β = 9 0 ∘ α = 0 ∘ γ = A t a n 2 ( r 12 , r 22 ) \begin{aligned}\mathsf{If}\beta&=90^\circ\\\alpha&=0^\circ\\\gamma&=Atan2(r_{12},r_{22})\end{aligned} Ifβαγ=90∘=0∘=Atan2(r12,r22)
I f β = − 9 0 ∘ α = 0 ∘ γ = − A t a n 2 ( r 12 , r 22 ) \begin{aligned}\mathsf{If}\beta&=-90^\circ\\\alpha&=0^\circ\\\gamma&=-Atan2(r_{12},r_{22})\end{aligned} Ifβαγ=−90∘=0∘=−Atan2(r12,r22)
Euler Angles
B A R Z ′ Y ′ X ′ ( α , β , γ ) = B ′ A R B ′ ′ B ′ R B ′ ′ B R = R Z ′ ( α ) R Y ′ ( β ) R X ′ ( γ ) {}_{B}^{A}R_{Z^{\prime}Y^{\prime}X^{\prime}}(\alpha,\beta,\gamma)={}^A_{B^{\prime}}R_{B^{\prime\prime}}^{B^{\prime}}R^{B^{\prime\prime}}{}_{B}R=R_{Z^{\prime}}(\alpha)R_{Y^{\prime}}(\beta)R_{X^{\prime}}(\gamma) BARZ′Y′X′(α,β,γ)=B′ARB′′B′RB′′BR=RZ′(α)RY′(β)RX′(γ)
先对哪个轴转,哪个轴的旋转矩阵在最前面。大概理解为,如果要从旋转后的坐标系恢复至原来的坐标系,需要从最后一个旋转的轴,依次往前复原
如果三个角度相同,那么最终结果与FixAngles相同。
可以通过多种旋转方法得到相同的旋转矩阵,即旋转到相同的姿态
Euler和Fix各有十二种方法,第一个旋转的轴有三种选择,第二个有两种(排除掉第一个旋转的轴),第三个有两种(排除掉第二个旋转的轴)
还存在四元数法,之后会去介绍。