在上一篇中,我们使用旋转矩阵的9个分量来描述物体的姿态,但是这9个分量并不是相互独立的。对于一个旋转矩阵RRR,我们可以写出6个约束方程。如果我们用参考坐标系中某坐标系的三个单位轴来表示旋转矩阵RRR
R=(X^Y^Z^) R=(\hat X\quad\hat Y\quad\hat Z) R=(X^Y^Z^)
这三个矢量均为单位矢量,且两两正交,故有如下6个约束
∣X^∣=∣Y^∣=∣Z^∣=1X^⋅Y^=X^⋅Z^=Y^⋅Z^=0 \begin{split} &|\hat X|=|\hat Y|=|\hat Z|=1\\ &\hat X\cdot\hat Y=\hat X\cdot\hat Z=\hat Y\cdot\hat Z=0 \end{split} ∣X^∣=∣Y^∣=∣Z^∣=1X^⋅Y^=X^⋅Z^=Y^⋅Z^=0
这意味着我们最少只需给出3个参数就能确定一个物体的姿态。
X-Y-Z固定角
围绕方向固定不动的参考坐标系主轴旋转的拆解方式称为固定角(Fixed Angles)。从X-Y-Z固定角的视角来看,任意姿态的{B}\{B\}{B}都可以由以下过程表示:将{B}\{B\}{B}与{A}\{A\}{A}重合,先绕X^A\hat{X}_AX^A旋转γ\gammaγ角,再绕Y^A\hat{Y}_AY^A旋转β\betaβ角,最后绕Z^A\hat{Z}_AZ^A旋转α\alphaα角得到最终的{B}\{B\}{B}。X-Y-Z表示绕主轴旋转的顺序。

因而可以推导{B}\{B\}{B}到{A}\{A\}{A}的等价旋转矩阵(式中cθ=cosθc\theta=\cos\thetacθ=cosθ,sθ=sinθs\theta=\sin\thetasθ=sinθ)
BARXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)=[cα−sα0sαcα0001][cβ0sβ010−sβ0cβ][1000cγ−sγ0sγcγ]=[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γ] \begin{split} ^A_BR_{XYZ}(\gamma,\beta,\alpha)&=R_Z(\alpha)R_Y(\beta)R_X(\gamma)\\ &=\begin{bmatrix}c\alpha&-s\alpha&0\\s\alpha&c\alpha&0\\0&0&1\end{bmatrix}\begin{bmatrix}c\beta&0&s\beta\\0&1&0\\-s\beta&0&c\beta\end{bmatrix}\begin{bmatrix}1&0&0\\0&c\gamma&-s\gamma\\0&s\gamma&c\gamma\end{bmatrix}\\ &=\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} \end{split} BARXYZ(γ,β,α)=RZ(α)RY(β)RX(γ)=cαsα0−sαcα0001cβ0−sβ010sβ0cβ1000cγsγ0−sγcγ=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γ
矩阵书写顺序与实际旋转操作顺序相反,从旋转一个矢量的角度来看,是因为旋转矩阵乘在矢量的左边,所以右侧的矩阵会先与矢量相乘。
相应地,我们也可以通过任意旋转矩阵求得X-Y-Z固定角。将旋转矩阵的九个元素与上式联立有
BARXYZ(γ,β,α)=[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γ]=[r11r12r13r21r22r23r31r32r33] \begin{split} ^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} \end{split} 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
可解得
β=Atan2(−r31,r112+r212)α=Atan2(r21cβ,r11cβ)γ=Atan2(r32cβ,r33cβ) \begin{split} \beta=\mathrm{Atan}2\left(-r_{31},\sqrt{r_{11}^2+r_{21}^2}\right)\\ \alpha=\mathrm{Atan}2\left(\frac {r_{21}}{c\beta},\frac {r_{11}}{c\beta}\right)\\ \gamma=\mathrm{Atan}2\left(\frac {r_{32}}{c\beta},\frac {r_{33}}{c\beta}\right) \end{split} β=Atan2(−r31,r112+r212)α=Atan2(cβr21,cβr11)γ=Atan2(cβr32,cβr33)
式中Atan2(y,x)=tan−1(y/x)\mathrm{Atan2}(y,x)=\tan^{-1}(y/x)Atan2(y,x)=tan−1(y/x)为反正切函数的双参变量表示法,其可根据xxx和yyy的符号判别求得的角所在的象限。
当β=±90∘\beta=\pm90^\circβ=±90∘时,cβ=0c\beta=0cβ=0,此时仅能求出α\alphaα和γ\gammaγ的和或差。一般取α=0∘\alpha=0^\circα=0∘,则
γ={Atan2(r12,r22),β=90∘−Atan2(r12,r22),β=−90∘ \gamma=\left\{ \begin{split} \mathrm{Atan2}(r_{12},r_{22}),\quad&\beta=90^\circ\\ -\mathrm{Atan2}(r_{12},r_{22}),\quad&\beta=-90^\circ\\ \end{split} \right. γ={Atan2(r12,r22),−Atan2(r12,r22),β=90∘β=−90∘
Z-Y-X欧拉角
围绕运动坐标系自身主轴旋转的拆解方式称为欧拉角(Euler Angles)。从Z-Y-X欧拉角的视角来看,任意姿态的{B}\{B\}{B}都可以由以下过程表示:将{B}\{B\}{B}与{A}\{A\}{A}重合,先绕Z^B\hat{Z}_BZ^B旋转α\alphaα角,再绕Y^B\hat{Y}_BY^B旋转β\betaβ角,最后绕X^B\hat{X}_BX^B旋转α\alphaα角得到最终的{B}\{B\}{B}。

通过中间坐标系{B′}\{B'\}{B′}和{B′′}\{B''\}{B′′},我们可以写出由{A}\{A\}{A}到{B}\{B\}{B}({B′′′}\{B'''\}{B′′′})的旋转矩阵为
BAR=B′ARB′′B′RBB′′R
^A_BR={^A_{B'}R}{^{B'}_{B''}R}{^{B''}_{B}R}
BAR=B′ARB′′B′RBB′′R
则由Z-Y-X欧拉角参数化的旋转矩阵为(下标中的撇号表明这是用欧拉角而非固定角描述的旋转)
BARZ′Y′X′(α,β,γ)=B′ARB′′B′RBB′′R=RZ(α)RY(β)RX(γ)=[cα−sα0sαcα0001][cβ0sβ010−sβ0cβ][1000cγ−sγ0sγcγ]=[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γ] \begin{split} ^A_BR_{Z'Y'X'}(\alpha,\beta,\gamma)&={^A_{B'}R}{^{B'}_{B''}R}{^{B''}_{B}R}\\ &=R_Z(\alpha)R_Y(\beta)R_X(\gamma)\\ &=\begin{bmatrix}c\alpha&-s\alpha&0\\s\alpha&c\alpha&0\\0&0&1\end{bmatrix}\begin{bmatrix}c\beta&0&s\beta\\0&1&0\\-s\beta&0&c\beta\end{bmatrix}\begin{bmatrix}1&0&0\\0&c\gamma&-s\gamma\\0&s\gamma&c\gamma\end{bmatrix}\\ &=\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} \end{split} BARZ′Y′X′(α,β,γ)=B′ARB′′B′RBB′′R=RZ(α)RY(β)RX(γ)=cαsα0−sαcα0001cβ0−sβ010sβ0cβ1000cγsγ0−sγcγ=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γ
该结果与X-Y-Z固定角中的一致。由此可见,三次绕固定轴旋转的最终姿态和以相反顺序绕运动坐标轴旋转的最终姿态相同。
固定角和欧拉角均需要按一定顺序进行绕主轴的三个旋转,将XYZ三个主轴进行排列组合(只需要满足相邻两次旋转围绕的主轴不同即可,例如Z-Y-Z),我们可以得到24种旋转矩阵表示法,其中12种为固定角,12种为欧拉角,它们均被称为转角排列设定法。
等效角度-轴线表示法
在上一篇的变换算子一节中,我们给出过旋转算子RK(θ)R_K(\theta)RK(θ)表示绕K^\hat KK^轴旋转θ\thetaθ角度。如果轴的方向是一般方向而非主轴方向,任何姿态都可通过选择适当的轴和角度来得到,这种表示法即为等效角度-轴线表示法。

令AK^=(kxkykz)T^A\hat K=(k_x\quad k_y\quad k_z)^TAK^=(kxkykz)T,则等效旋转矩阵为
RK(θ)=[kx2vθ+cθkxkyvθ−kzcθkxkzvθ+kysθkxkyvθ+kzsθkxkyvθ+cθkykzvθ−kxsθkxkzvθ−kysθkykzvθ+kxsθkz2cθ] R_K(\theta)=\begin{bmatrix}k_x^2v\theta+c\theta&k_xk_yv\theta-k_zc\theta&k_xk_zv\theta+k_ys\theta\\ k_xk_yv\theta+k_zs\theta&k_xk_yv\theta+c\theta&k_yk_zv\theta-k_xs\theta\\ k_xk_zv\theta-k_ys\theta&k_yk_zv\theta+k_xs\theta&k_z^2c\theta\end{bmatrix} RK(θ)=kx2vθ+cθkxkyvθ+kzsθkxkzvθ−kysθkxkyvθ−kzcθkxkyvθ+cθkykzvθ+kxsθkxkzvθ+kysθkykzvθ−kxsθkz2cθ
式中cθ=cosθc\theta=\cos\thetacθ=cosθ,sθ=sinθs\theta=\sin\thetasθ=sinθ,vθ=1−cosθv\theta=1-\cos\thetavθ=1−cosθ。
其推导思路为,假设有一辅助坐标系{U}\{U\}{U},其Z^\hat ZZ^轴与旋转轴K^\hat KK^一致。
- 将{B}\{B\}{B}与{A}\{A\}{A}重合;
- 通过旋转矩阵AUR^U_ARAUR将{B}\{B\}{B}相对于{A}\{A\}{A}的表示转换为{B}\{B\}{B}相对于{U}\{U\}{U}的表示;
- 通过旋转算子RZ(θ)R_Z(\theta)RZ(θ)将{B}\{B\}{B}绕{U}\{U\}{U}的Z^\hat ZZ^轴旋转θ\thetaθ;
- 再通过旋转矩阵UAR^A_URUAR将{B}\{B\}{B}相对于{U}\{U\}{U}的表示恢复为{B}\{B\}{B}相对于{A}\{A\}{A}的表示。
由此等效旋转矩阵可表示为
RK(θ)=UARRZ(θ)AUR R_K(\theta)={^A_UR}{R_Z(\theta)}{^U_AR} RK(θ)=UARRZ(θ)AUR
已知AZ^U=AK^=(kxkykz)T^A\hat Z_U=^A\hat K=(k_x\quad k_y\quad k_z)^TAZ^U=AK^=(kxkykz)T,则
UAR=[ADkxBEkyCFkz] ^A_UR=\begin{bmatrix} A&D&k_x\\B&E&k_y\\C&F&k_z\end{bmatrix} UAR=ABCDEFkxkykz
其中六个未知数根据旋转矩阵的性质满足
A2+B2+C2=1D2+E2+F2=1(ABC)⋅(DEF)T=0(ABC)×(DEF)=(kxkykz)T \begin{matrix} A^2+B^2+C^2=1\\ D^2+E^2+F^2=1\\ (A\quad B\quad C)\cdot(D\quad E\quad F)^T=0\\ (A\quad B\quad C)\times(D\quad E\quad F)=(k_x\quad k_y\quad k_z)^T \end{matrix} A2+B2+C2=1D2+E2+F2=1(ABC)⋅(DEF)T=0(ABC)×(DEF)=(kxkykz)T
利用上述性质,再由AUR=UART^U_AR={^A_UR^T}AUR=UART,可化简等效旋转矩阵为最终结果。
旋转矩阵、固定角、欧拉角和等效角度-轴线表示法均为姿态表示的经典方法,它们在后续更复杂的实际应用中将逐渐面临一些根本性的挑战。现代机器人领域则发展出了四元数表示法以及更高层次的旋量理论,在姿态表示中实现了更加优雅而统一的数学框架,博主将在运动学与动力学的基础篇章结束后对其进行介绍。

3447

被折叠的 条评论
为什么被折叠?



