旋转矩阵、轴角 的小角度近似

一、刚体旋转的表示

1.1 欧拉角与旋转矩阵

设一个旋转的欧拉角为 α , β , γ \alpha, \beta, \gamma α,β,γ (即绕 x , y , z x, y, z x,y,z 轴的旋转角度分别为 α , β , γ \alpha, \beta, \gamma α,β,γ)
那么向量绕 x , y , z x, y, z x,y,z 轴的旋转矩阵可以分别表示为:

R x = ( 1 c α − s α s α c α )   R y = ( c β s β 1 − s β c β )   R z = ( c γ − s γ s γ c γ 1 ) \boldsymbol R_x= \begin{pmatrix} 1 & & \\ & c_\alpha & -s_\alpha \\ & s_\alpha & c_\alpha \end{pmatrix} \\~\\ \boldsymbol R_y= \begin{pmatrix} c_\beta & & s_\beta \\ & 1 & \\ -s_\beta & & c_\beta \end{pmatrix} \\~\\ \boldsymbol R_z= \begin{pmatrix} c_\gamma & -s_\gamma & \\ s_\gamma & c_\gamma & \\ & & 1 \end{pmatrix} Rx=1cαsαsαcα Ry=cβsβ1sβcβ Rz=cγsγsγcγ1

(这里 s α , c α s_\alpha, c_\alpha sα,cα 分别表示 sin ⁡ α , cos ⁡ α \sin\alpha, \cos\alpha sinα,cosα)

所以一个向量 v \boldsymbol v v 经过绕 X-Y-Z 的顺序旋转过后到达 v ′ \boldsymbol v' v 的位置就可以表示为:

v ′ = R z R y R x v = R v \boldsymbol v' = \boldsymbol R_z\boldsymbol R_y\boldsymbol R_x\boldsymbol v = \boldsymbol R\boldsymbol v v=RzRyRxv=Rv

1.2 轴角

表示刚体变换的除了欧拉角与旋转矩阵,还可以使用轴角 ϕ \boldsymbol \phi ϕ 来表示:
ϕ = θ n \boldsymbol \phi = \theta\boldsymbol n ϕ=θn

ϕ \boldsymbol \phi ϕ 的方向 (即单位向量 n \boldsymbol n n) 表示旋转的转轴,
ϕ \boldsymbol \phi ϕ 的模长 (即 θ \theta θ) 表示旋转的角度。


二、小角度近似

结论:
在理论研究时,我们经常会假设前后两帧之间的旋转角度非常小,也就是:
α , β , γ → 0 \alpha, \beta, \gamma \rightarrow 0 α,β,γ0

此时旋转矩阵可以近似为:
R = ( 1 − γ β γ 1 − α − β α 1 ) \boldsymbol R = \begin{pmatrix} 1 & -\gamma & \beta \\ \gamma & 1 & -\alpha \\ -\beta & \alpha & 1 \end{pmatrix} R=1γβγ1αβα1

2.1 欧拉角解释

α → 0 ⟹ sin ⁡ α → α        cos ⁡ α → 1 \alpha \rightarrow 0\\ \Longrightarrow\sin\alpha \rightarrow \alpha ~~~~~~ \cos\alpha \rightarrow 1 α0sinαα      cosα1
那么:
R x ≈ ( 1 1 − α α 1 ) = d e f I + A   R y ≈ ( 1 β 1 − β 1 ) = d e f I + B   R z ≈ ( 1 − γ γ 1 1 ) = d e f I + C \boldsymbol R_x≈ \begin{pmatrix} 1 & & \\ & 1 & -\alpha \\ & \alpha & 1 \end{pmatrix}\overset{\mathrm{def}}{=} \boldsymbol I+\boldsymbol A \\~\\ \boldsymbol R_y≈ \begin{pmatrix} 1 & & \beta \\ & 1 & \\ -\beta & & 1 \end{pmatrix}\overset{\mathrm{def}}{=} \boldsymbol I+\boldsymbol B \\~\\ \boldsymbol R_z≈ \begin{pmatrix} 1 & -\gamma & \\ \gamma & 1 & \\ & & 1 \end{pmatrix}\overset{\mathrm{def}}{=} \boldsymbol I+\boldsymbol C Rx11αα1=defI+A Ry1β1β1=defI+B Rz1γγ11=defI+C
所以
R z R y R x ≈ I + A + B + C = ( 1 − γ β γ 1 − α − β α 1 ) \begin{aligned} \boldsymbol Rz\boldsymbol R_y\boldsymbol R_x&≈\boldsymbol I + \boldsymbol A + \boldsymbol B + \boldsymbol C \\ &= \begin{pmatrix} 1 & -\gamma & \beta \\ \gamma & 1 & -\alpha \\ -\beta & \alpha & 1 \end{pmatrix} \end{aligned} RzRyRxI+A+B+C=1γβγ1αβα1

可以发现,小角度近似时,欧拉角旋转与旋转轴的顺序无关。

2.2 轴角解释

由罗德里格斯公式:
R = cos ⁡ θ I + ( 1 − cos ⁡ θ ) n n T + sin ⁡ θ n ∧ ≈ I + θ n ∧ = I + ϕ ∧ = ( 1 − ϕ 3 ϕ 2 ϕ 3 1 − ϕ 1 − ϕ 2 ϕ 1 1 ) \begin{aligned} \boldsymbol R&=\cos\theta\boldsymbol I+(1-\cos\theta)\boldsymbol n\boldsymbol n^{\mathrm T}+\sin\theta\boldsymbol n^{\land} \\ &≈\boldsymbol I + \theta\boldsymbol n^{\land} = \boldsymbol I +\boldsymbol \phi^{\land} \\ &= \begin{pmatrix} 1 & -\phi_3 & \phi_2 \\ \phi_3 & 1 & -\phi_1 \\ -\phi_2 & \phi_1 & 1 \end{pmatrix} \end{aligned} R=cosθI+(1cosθ)nnT+sinθnI+θn=I+ϕ=1ϕ3ϕ2ϕ31ϕ1ϕ2ϕ11

可以看出 在小角度近似的前提下, 欧拉角和轴角基本是同一个东西。


三、注意

顺便提一句,
对于旋转矩阵需要注意的是,要清楚这个旋转矩阵是对向量旋转,还是对坐标系进行旋转。

以二维为例,
如果一个旋转将向量从坐标 v 1 \boldsymbol v_1 v1 移动到了坐标 v 2 \boldsymbol v_2 v2

对向量的旋转矩阵可以写为:
R = ( c α − s α s α c α ) \boldsymbol R= \begin{pmatrix} c_\alpha & -s_\alpha \\ s_\alpha & c_\alpha \end{pmatrix} R=(cαsαsαcα)

但此时如果我们是对坐标系转换,那么他的旋转矩阵是:
R − 1 = R T = ( c α s α − s α c α ) \boldsymbol R^{-1}=\boldsymbol R^{\mathrm T}= \begin{pmatrix} c_\alpha & s_\alpha \\ -s_\alpha & c_\alpha \end{pmatrix} R1=RT=(cαsαsαcα)

在计算过程中要注意自己是用哪种转换,负号不要弄错位置了。

你可能感兴趣的:(#,运动学,矩阵,算法,人工智能)