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

1. 群

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

  1. 封闭性: a1,a2A,a1a2A\forall a_1, a_2 \in A, a_1\cdot a_2 \in A.
  2. 结合律: a1,a2,a3A,(a1a2)a3=a1(a2a3)\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. 幺元: a0A,s.t.aA,a0a=aa0=a\exists a_{0} \in A, \quad s.t. \quad \forall a \in A, \quad a_{0} \cdot a=a \cdot a_{0}=a
  4. 逆: aA,a1A,s.t.aa1=a0\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}\{S\},定义body frame为{b}\{b\}{b}\{b\}在fixed frame{S}\{S\}下经过一定的旋转,对应的旋转矩阵为RR

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

  1. 单位向量
    r112+r212+r312=1r122+r222+r322=1r132+r232+r332=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. 正交
    x^by^b=0,x^bz^b=0,z^by^b=0\hat{x}_{b}\cdot\hat{y}_{b}=0,\hat{x}_{b}\cdot\hat{z}_{b}=0,\hat{z}_{b}\cdot\hat{y}_{b}=0,即
    r11r12+r21r22+r31r32=0r12r13+r22r23+r32r33=0r11r13+r21r23+r31r33=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}
    上面两个性质可以写成矩阵的形势,
    RRT=I RR^T=I
    此外,坐标系{b}\{b\}的三个坐标轴还需要遵守右手坐标系,例如x^b×y^b=z^b\hat{x}_{b}\times\hat{y}_{b}=\hat{z}_{b},其中×\times表示叉乘。
    在线性代数上有如下的一个公式,当我们知道一个3×33\times3矩阵MM的三列为a,b,ca,b,c时,我们可以求得矩阵的行列式值为,

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

y2=yTy=(Rx)TRx=xTRTRx=xTx=x2\|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 描述坐标系

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

考虑以上三个坐标系,其对应的描述为,
Ra=[100010001],Rb=[010100001],Rc=[010001100]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]

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

pa=[110],pb=[110],pc=[011]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]

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

3.2 改变参考坐标系

假设旋转矩阵RabR_{ab},描述了{b}\{b\}相对于{a}\{a\}的旋转,RbcR_{bc}描述了{c}\{c\}相对于{b}\{b\}的旋转,则RacR_{ac}{c}\{c\}相对于{a}\{a\}的旋转,
Rac=RabRbc R_{ac}=R_{ab}R_{bc}
向量pp{b}\{b\}坐标系的向量为pbp_b,则在{a}\{a\}坐标系下pap_a为,
Rabpb=pa R_{ab}p_b=p_a

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

在坐标系{a}\{a\}下旋转一个向量pap_a(同一坐标系下),会产生另外一个向量pap\prime _a
pa=Rpa p\prime _a=Rp_a

而对一个坐标系乘以一个旋转矩阵,则有不同的意义,分为左乘右乘,下面分别介绍,其中参考坐标系为{S}\{S\},body frame为{b}\{b\}{S}\{S\}ZZ轴转90度生成{b}\{b\}RsbR_{sb}表示{b}\{b\}{S}\{S\}下的描述,RR仅表示某一旋转矩阵(绕着xx转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

最终结果,

由上面两图可以看到,RR左乘RsbR_{sb},是顺着原来{S}\{S\}中的XX轴旋转了30度。因此左乘,{R}\{R\}是在{S}\{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

最终结果,

由上面两图可以看到,RR右乘RsbR_{sb},是顺着{b}\{b\}中的XX轴旋转了30度。右乘,{R}\{R\}是在{b}\{b\}坐标系下描述。
其实关于左乘和右乘,在前面的文章中介绍过旋转矩阵的列向量是{b}\{b\}{S}\{S\}中的描述,右乘相当于,
[x^b,y^b,z^b]R=[r11x^b+r21y^b+r31z^b,r12x^b+r22y^b+r32z^b,r13x^b+r23y^b+r33z^b] \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}\{b\}所对应基的线性组合,所以{R}\{R\}此时的意义肯定是在{b}\{b\}坐标系下描述。
同理,前面文章提到过,旋转矩阵的行向量是{S}\{S\}{b}\{b\}中的描述,此时{b}\{b\}是参考坐标系,
R[x^sy^sz^s]=[r11x^s+r12y^s+r13z^sr21x^s+r22y^s+r23z^sr31x^s+r32y^s+r33z^s] 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}\{S\}所对应基的线性组合,所以{R}\{R\}此时的意义肯定是在{S}\{S\}坐标系下描述。

发布了124 篇原创文章 · 获赞 163 · 访问量 38万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览