旋转矩阵的几种描述方式
旋转矩阵的几种描述方式
旋转矩阵是机器人学、计算机图形学等领域中描述物体姿态和运动的重要工具。本文将详细介绍旋转矩阵的几种描述方式,包括根据定义、连续旋转、k-ϕ过程以及单位四元数。通过本文的学习,读者将能够全面了解旋转矩阵的相关知识,并掌握其在实际应用中的具体方法。
关于旋转矩阵
在坐标系的变换中,主要分为旋转变换和平移变换。对于旋转变换来说,常常通过一个3×3的正交矩阵来描述坐标系的一个旋转过程,也可以用于描述一个空间物体的姿态。
旋转矩阵的特殊性在于,它与一个三维向量相乘时只改变其方向而不改变其长度。为了达到这种效果,旋转矩阵均为33的*正交矩阵,属于一个特殊正交群SO(3):
$$
SO(3)={R\in \R^{3\times3}|RR^T=I,det(R)=+1}
$$
进一步推广,对于三维空间中的6自由度运动,人们希望定义一个统一变换矩阵来同时描述坐标系的平移和旋转变换。这种统一的变换矩阵将包含在如下的特殊欧几里得空间里:
$$
SE(3)={ (p,R) | p \in \R^3, R \in SO(3) } = \R^3 \times SO(3)
$$
1.旋转矩阵
旋转矩阵一般可以通过以下几种方式获得。
1.1.根据定义
已知存在两个坐标系{A}和{B},如何得到相对于{A}的{B}的姿态,即旋转矩阵$^A_BR$呢?
假设用$\hat{X_B}$、$\hat{Y_B}$和$\hat{Z_B}$来表示坐标系{B}主轴方向的单位矢量。当用坐标系{A}作为参考系时,它们被写作$\hat{^AX_B}$、$\hat{^AY_B}$和$\hat{^AZ_B}$,分别表示坐标系{B}各个主轴在坐标系{A}描述下的单位矢量,也就是坐标系{B}各个主轴分别在坐标系{A}的三个主轴下的投影分量。
将这三个单位矢量按照顺序排列成一个3*3的矩阵,即为旋转矩阵。
$$
^A_BR=(\hat{^AX_B}\quad\hat{^AY_B}\quad\hat{^AZ_B}) =\left[ \begin{matrix} r_{11} & r_{12} & r_{13}\ r_{21} & r_{22} & r_{23}\ r_{31} & r_{32} & r_{33} \end{matrix} \right]
$$
1.2.连续旋转
一个旋转矩阵也可以被视为多个基本旋转矩阵的乘积。基本旋转矩阵,即绕基本坐标系的某个主轴进行旋转后得到的旋转矩阵,根据绕X轴、Y轴和Z轴旋转可分别得到三种基本旋转矩阵。
$$
R_X(\theta)=\left[ \begin{matrix} 1 & 0 & 0\ 0 & \cos\theta & -\sin\theta\ 0 & \sin\theta & \cos\theta \end{matrix} \right]
$$
$$
R_Y(\theta)=\left[ \begin{matrix} \cos\theta & 0 & \sin\theta\ 0 & 1 & 0\ -\sin\theta & 0 & \cos\theta \end{matrix} \right]
$$
$$
R_Z(\theta)=\left[ \begin{matrix} \cos\theta & -\sin\theta & 0\ \sin\theta & \cos\theta & 0\ 0 & 0 & 1 \end{matrix} \right]
$$
根据旋转的参考系不同,可分为绕固定坐标系和绕运动坐标系这两种旋转方式。下面介绍两种常见的连续旋转方式。
1.2.1.X-Y-Z固定角(静态欧拉角)
假设坐标系{B}与一个已知参考坐标系{A}重合。然后坐标系{B}经过以下次序进行旋转:
- 绕$X_A$旋转$\gamma$角;
- 绕$Y_A$旋转$\beta$角;
- 绕$Z_A$旋转$\alpha$角.
最后,根据旋转次序将三种基本旋转矩阵相乘即可得到对应的旋转矩阵$^A_BR$。但需要注意的是矩阵相乘的方向,由于这三次旋转都是绕着固定坐标系进行的,因此矩阵相乘顺序为从右到左。
$$
^A_BR_{XYZ}(\gamma,\beta,\alpha)=R_Z(\alpha)R_Y(\beta)R_X(\gamma)
$$
1.2.2.Z-Y-X欧拉角(动态欧拉角)
假设坐标系{B}与一个已知参考坐标系{A}重合。然后坐标系{B}经过以下次序进行旋转:
- 绕$Z_B$旋转$\alpha$角;
- 绕$Y_B$旋转$\beta$角;
- 绕$X_B$旋转$\gamma$角.
最后,根据旋转次序将三种基本旋转矩阵相乘即可得到对应的旋转矩阵$^A_BR$。但需要注意的是矩阵相乘的方向,由于这三次旋转都是绕着运动坐标系进行的,每次旋转所绕的轴的姿态取决于上一次的旋转,因此矩阵相乘顺序为从左到右。
$$
^A_BR_{Z'Y'X'}(\alpha,\beta,\gamma)=R_Z(\alpha)R_Y(\beta)R_X(\gamma)
$$
由于在整个旋转过程中,参考坐标系的选取一直在发生变换,因此会出现万向节锁的现象。
为什么会出现万向节锁的问题呢?原因在于参考系一直在变换。
假设一个初始坐标系{A},根据其三个主轴可以进行三种不同的旋转,也就是说存在3个自由度。假设旋转序列为X → Y → Z:
- 首先初始坐标系{A}绕X轴旋转任意角度得到坐标系{B},假设旋转0 o ;
- 然后坐标系{B}绕Y轴旋转9 0 o 得到坐标系{C},此时{C}的Z轴与{A}的X轴重合;
- 最后坐标系{C}绕Z轴旋转任意角度得到坐标系{D}。
从最后一次旋转中可以发现,无论坐标系{C}绕Z轴如何转动,都无法得到绕初始坐标系{A}的Z轴的效果,即此时旋转失去了一个自由度。这就是出现万向节锁的原因。
1.3.k − ϕ k-\phik−ϕ过程
1.3.1.简介
除了上述两种方法外,还可以通过给定一个单位向量k和以k为轴旋转的角度ϕ \phiϕ,从而得到旋转矩阵。这种方法的好处是可以以任意向量为旋转轴,而不是使用一个连续的旋转。
在介绍k − ϕ k-\phik−ϕ过程前,需要先介绍一个重要的数学理论发现,即指数映射。
$$
EXP:so(3)\rightarrow SO(3)
$$
该映射说明,对于每一个3*3的斜对称矩阵S ∈ s o ( 3 ) S\in so(3)S∈so(3),其指数函数e x p ( S ) = R ∈ S O ( 3 ) exp(S)=R\in SO(3)exp(S)=R∈SO(3)始终是旋转矩阵。下面正式开始介绍k − ϕ k-\phik−ϕ过程。
已知一个单位向量k = ( k 1 k 2 k 3 ) T k=(k_1 \quad k_2 \quad k_3)^Tk=(k1 k2 k3 )T,可以给出相应的斜对称矩阵为
$$
S(k)=K=\left[ \begin{matrix} 0 & -k_3 & k_2\ k_3 & 0 & -k_1\ -k_2 & k_1 & 0 \end{matrix} \right]
$$
根据指数映射公式,可以通过斜对称矩阵ϕ K ∈ s o ( 3 ) \phi K\in so(3)ϕK∈so(3)得到:
$$
exp(\phi K)=R\in SO(3)
$$
然后将上式左边按照泰勒级数展开,可以得到以下公式,也就是著名的罗德里格斯公式:
$$
I + \sin\phi K+(1-\cos\phi)K^2= R
$$
1.3.2.两个参数与特征值和特征向量的联系
基于旋转矩阵R的特殊性,其特征值必然为
$$
\lambda_1 = 1, \lambda_{2,3} = \cos\theta \pm i \sin\theta
$$
而从特征值中,我们神奇的发现了ϕ \phiϕ的身影。通过MATLAB验证发现,ϕ = θ \phi = \thetaϕ=θ。接下来,我们把目光转移到特征值λ 1 \lambda_1λ1 ,假设其特征向量为v。根据特征值与特征向量的基本等式,代入λ 1 \lambda_1λ1 可以发现一个神奇的现象:
$$
Rv=v
$$
向量v左乘旋转矩阵后得到的新向量仍为v。这是为什么呢?向量v与向量k之间有什么联系呢?
事实上,通过MATLAB验证可以发现,向量v与向量k相等!也就是说,旋转矩阵R的旋转轴即为其特征值为1所对应的特征向量。有了这个结论,我们可以比较直观理解上述的等式了。由于旋转矩阵R可以分解成旋转轴k和旋转角度ϕ \phiϕ,于是等式左边可以理解为:向量v绕旋转轴k旋转ϕ \phiϕ,而当向量v与转轴k相等时,也就是说,向量v绕自身转动,最终得到的新向量自然就是向量v本身。
这也是一般性的矩阵的特征向量的厉害之处,从基本等式A α = λ α = β A\alpha=\lambda \alpha = \betaAα=λα=β可以看出,矩阵A右乘其特征向量α \alphaα,其结果得到的新的向量β \betaβ与其本身方向相同,改变的仅是其模的大小。
1.4.单位四元数(Unit Quaternion)
四元数并不是一个新概念,其出现的历史已经超过了150年。但一直以来,四元数都饱受人们的争议,其其中一个反对理由就是四元数不支持乘法交换律。但直到机器人学的出现,让四元数逐渐受到重视且发挥着巨大的作用,比如单位四元数可用于描述旋转运动。
假设四元数由一个标量s和一个向量v组成,如下式所示:
$$
q=s+\vec{v}=s+v_1i+v_2j+v_3k
$$
$$
q = s<v_1,v_2,v_3>
$$
用单位四元数表示旋转与第三种方式有些相似,都用到了等效旋转轴k和等效旋转角ϕ \phiϕ,可表示为
$$
q=s+\vec{v},s=\cos \frac{\theta}{2},\vec{v}=(\sin \frac{\theta}{2})\hat{k}
$$
单位四元数一个由四个参数组成,可组成一个41的矢量,被称为*欧拉参数。根据等效旋转轴k ^ = ( k x k y k z ) T \hat{k}=(k_x \quad k_y \quad k_z)^Tk^=(kx ky kz )T和等效旋转角ϕ \phiϕ,可以得到欧拉参数如下:
$$
\varepsilon_1=k_x\sin\frac{\theta}{2}
$$
$$
\varepsilon_2=k_y\sin\frac{\theta}{2}
$$
$$
\varepsilon_3=k_z\sin\frac{\theta}{2}
$$
$$
\varepsilon_4=\cos\frac{\theta}{2}
$$
比较欧拉参数和单位四元数的四个参数,可以发现:
$$
s=\varepsilon_4,\vec{v}=(\varepsilon_1,\varepsilon_2,\varepsilon_3)
$$
根据欧拉参数或者说单位四元数,可以得到对应的旋转矩阵R,即
$$
R=\left[ \begin{matrix} 1-2\varepsilon^2_2-2\varepsilon^2_3 & 2(\varepsilon_1\varepsilon_2-\varepsilon_3\varepsilon_4) & 2(\varepsilon_1\varepsilon_3+\varepsilon_2\varepsilon_4)\ 2(\varepsilon_1\varepsilon_2+\varepsilon_3\varepsilon_4) & 1-2\varepsilon^2_1-2\varepsilon^2_3 & 2(\varepsilon_2\varepsilon_3-\varepsilon_1\varepsilon_4)\ 2(\varepsilon_1\varepsilon_3-\varepsilon_2\varepsilon_4) & 2(\varepsilon_2\varepsilon_3+\varepsilon_1\varepsilon_4) & 1-2\varepsilon^2_1-2\varepsilon^2_2 \end{matrix} \right]
$$
使用四元数描述旋转矩阵有诸多优点:
- 计算速度相对较快;
- 可以避免万向节锁(gimbal lock)现象;