坐标变换(4)—旋转矩阵

1. 群

群(Group)是一种集合加上一种运算的代数结构。我们把集合记作A,运算记作\cdot, 那么群可以记作G = (A, ·)。群要求这个运算满足以下几个条件:

  1. 封闭性: \forall a_1, a_2 \in A, a_1\cdot a_2 \in A.
  2. 结合律: \forall a_1, a_2, a_3 \in A, (a_1\cdot a_2)\cdot a_3 = a_1 \cdot (a_2 \cdot a_3).
  3. 幺元: \exists a_{0} \in A, \quad s.t. \quad \forall a \in A, \quad a_{0} \cdot a=a \cdot a_{0}=a
  4. 逆: \forall a \in A, \exists a^{−1} \in A, \quad s.t. \quad a · a^{−1} = a_0.

2. special orthogonal group

定义参考坐标系(fix frame)为S,定义body frame为bb在fixed frameS下经过一定的旋转,对应的旋转矩阵为R

坐标系b的三个坐标轴,即基,\hat{x}_{b},\hat{y}_{b},\hat{z}_{b},同时R=[\hat{x}_{b},\hat{y}_{b},\hat{z}_{b}],满足以下条件,

  1. 单位向量
    \begin{aligned} &r_{11}^{2}+r_{21}^{2}+r_{31}^{2}=1\\ &r_{12}^{2}+r_{22}^{2}+r_{32}^{2}=1\\ &r_{13}^{2}+r_{23}^{2}+r_{33}^{2}=1 \end{aligned}
  2. 正交
    \hat{x}_{b}\cdot\hat{y}_{b}=0,\hat{x}_{b}\cdot\hat{z}_{b}=0,\hat{z}_{b}\cdot\hat{y}_{b}=0,即
    \begin{array}{l} r_{11} r_{12}+r_{21} r_{22}+r_{31} r_{32}=0 \\ r_{12} r_{13}+r_{22} r_{23}+r_{32} r_{33}=0 \\ r_{11} r_{13}+r_{21} r_{23}+r_{31} r_{33}=0 \end{array}
    上面两个性质可以写成矩阵的形势,
    RR^T=I
    此外,坐标系b的三个坐标轴还需要遵守右手坐标系,例如\hat{x}_{b}\times\hat{y}_{b}=\hat{z}_{b},其中\times表示叉乘。
    在线性代数上有如下的一个公式,当我们知道一个3\times3矩阵M的三列为a,b,c时,我们可以求得矩阵的行列式值为,

\operatorname{det} M=a^{\mathrm{T}}(b \times c)=c^{\mathrm{T}}(a \times b)=b^{\mathrm{T}}(c \times a)
所以,我们可以得到,
det R=1
至此,我们推导出了旋转矩阵满足的两个条件。在数学上,将满足上述两个条件的3\times3的矩阵统称为special orthogonal group SO(3),即3维的特殊正交群,容易验证R符合群的封结幺逆的性质,此外对于任意的3维列向量xy=Rxx具有相同的长度(2范数)。

\|y\|^{2}=y^{\mathrm{T}} y=(R x)^{\mathrm{T}} R x=x^{\mathrm{T}} R^{\mathrm{T}} R x=x^{\mathrm{T}} x=\|x\|^{2}

3. 旋转矩阵的使用

  1. 描述一个坐标系
  2. 改变向量或者坐标系的参考坐标系
  3. 旋转一个坐标系或者向量

3.1 描述坐标系

第一种情况下,旋转矩阵的三列分别对应坐标系的三个坐标轴,即基,

考虑以上三个坐标系,其对应的描述为,
R_{a}=\left[\begin{array}{ccc} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{array}\right], \quad R_{b}=\left[\begin{array}{ccc} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{array}\right], \quad R_{c}=\left[\begin{array}{ccc} 0 & -1 & 0 \\ 0 & 0 & -1 \\ 1 & 0 & 0 \end{array}\right]

而空间中的同一点P,在三个坐标系中的描述分别为,

p_{a}=\left[\begin{array}{l} 1 \\ 1 \\ 0 \end{array}\right], \quad p_{b}=\left[\begin{array}{c} 1 \\ -1 \\ 0 \end{array}\right], \quad p_{c}=\left[\begin{array}{c} 0 \\ -1 \\ -1 \end{array}\right]

R_{a}p_a=R_bp_b=R_cp_c=\left[\begin{array}{l} 1 \\ 1 \\ 0 \end{array}\right]

3.2 改变参考坐标系

假设旋转矩阵R_{ab},描述了b相对于a的旋转,R_{bc}描述了c相对于b的旋转,则R_{ac}c相对于a的旋转,
R_{ac}=R_{ab}R_{bc}
向量pb坐标系的向量为p_b,则在a坐标系下p_a为,
R_{ab}p_b=p_a

3.3 旋转一个坐标系或者向量

在坐标系a下旋转一个向量p_a(同一坐标系下),会产生另外一个向量p\prime _a
p\prime _a=Rp_a

而对一个坐标系乘以一个旋转矩阵,则有不同的意义,分为左乘右乘,下面分别介绍,其中参考坐标系为S,body frame为bSZ轴转90度生成bR_{sb}表示bS下的描述,R仅表示某一旋转矩阵(绕着x转30度),下面借助matlab来进行可视化,

3.3.1 左乘

R_sb = rotz(90)
R = rotx(30)
R_1 =  R * R_sb 
tranimate(R_1)
R_sb =

     0    -1     0
     1     0     0
     0     0     1
     
R =

    1.0000         0         0
         0    0.8660   -0.5000
         0    0.5000    0.8660
R_1 =

         0   -1.0000         0
    0.8660         0   -0.5000
    0.5000         0    0.8660

最终结果,

由上面两图可以看到,R左乘R_{sb},是顺着原来S中的X轴旋转了30度。因此左乘,R是在S坐标系下的描述。

3.3.2 右乘

R_sb = rotz(90)
R = rotx(30)
R_1 =  R_sb * R 
tranimate(R_1)
R_sb =

     0    -1     0
     1     0     0
     0     0     1
R =

    1.0000         0         0
         0    0.8660   -0.5000
         0    0.5000    0.8660
R_1 =

         0   -0.8660    0.5000
    1.0000         0         0
         0    0.5000    0.8660

最终结果,

由上面两图可以看到,R右乘R_{sb},是顺着b中的X轴旋转了30度。右乘,R是在b坐标系下描述。
其实关于左乘和右乘,在前面的文章中介绍过旋转矩阵的列向量是bS中的描述,右乘相当于,
\begin{bmatrix} \hat{x}_{b},\hat{y}_{b},\hat{z}_{b} \end{bmatrix}R=\begin{bmatrix} r_{11}\hat{x}_{b}+r_{21}\hat{y}_{b}+r_{31}\hat{z}_{b},r_{12}\hat{x}_{b}+r_{22}\hat{y}_{b}+r_{32}\hat{z}_{b},r_{13}\hat{x}_{b}+r_{23}\hat{y}_{b}+r_{33}\hat{z}_{b} \end{bmatrix}
此时,矩阵的乘积的每一列都是b所对应基的线性组合,所以R此时的意义肯定是在b坐标系下描述。
同理,前面文章提到过,旋转矩阵的行向量是\{S\}\{b\}中的描述,此时\{b\}是参考坐标系,
R\begin{bmatrix} \hat{x}_{s} \\ \hat{y}_{s} \\ \hat{z}_{s} \end{bmatrix}=\begin{bmatrix} r_{11}\hat{x}_{s}+r_{12}\hat{y}_{s}+r_{13}\hat{z}_{s}\\ r_{21}\hat{x}_{s}+r_{22}\hat{y}_{s}+r_{23}\hat{z}_{s}\\ r_{31}\hat{x}_{s}+r_{32}\hat{y}_{s}+r_{33}\hat{z}_{s} \end{bmatrix}
此时,矩阵的乘积的每一行都是S所对应基的线性组合,所以R此时的意义肯定是在S坐标系下描述。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容