zoukankan      html  css  js  c++  java
  • 机器人学——1.3-正交旋转矩阵

    正如在二维情况下一样,我们可以用相对于参考坐标系的坐标轴单位向量表示它们所在坐标系的方向。每一个单位向量有 33 个元素,它们组成了 3×33 imes 3 阶正交矩阵 ARB^AR_B
    (AxAyAz)=ARB(BxByBz) left(egin{array}{c}^A ext{x}\^A ext{y}\^A ext{z}end{array} ight) = {}^AR_Bleft(egin{array}{c}^B ext{x}\^B ext{y}\^B ext{z}end{array} ight)
    上式将一个相对于坐标系 {B}{B} 的向量旋转为相对于坐标系 {A}{A} 的向量。矩阵 RR 属于特殊三维正交群,或 RSO(3)R3×3Rin SO(3)subsetmathbb{R}^{3 imes 3}。它具有前文提到的标准正交矩阵的特性,如 RT=R1R^T=R^{-1} 以及 det(R)=1det(R)=1
    分别绕 xxyyzz 轴旋转 θ heta 角后的标准正交旋转矩阵可表示为
    Rx(θ)=(1000cosθsinθ0sinθcosθ)Ry(θ)=(cosθ0sinθ010sinθ0cosθ)Rz(θ)=(cosθsinθ0sinθcosθ0001) egin{array}{c} R_x( heta)=left(egin{array}{ccc}1&0&0\0&cos heta&-sin heta\0&sin heta&cos hetaend{array} ight) \[1.5em] R_y( heta)=left(egin{array}{ccc}cos heta&0&sin heta\0&1&0\-sin heta&0&cos hetaend{array} ight) \[1.5em] R_z( heta)=left(egin{array}{ccc}cos heta&-sin heta&0\sin heta&cos heta&0\0&0&1end{array} ight) end{array}
    机器人工具箱中也提供了一些函数来计算这些基本的旋转矩阵,例如 Rx(θ)R_x( heta)

    >> R = rotx(pi/2)
    R =
        1.0000         0         0
             0    0.0000   -1.0000
             0    1.0000    0.0000
    

    函数rotyrotz则分别用于计算 Ry(θ)R_y( heta)Rz(θ)R_z( heta)
    要绘制出相应的坐标系,可以用

    >> trplot(R)
    

    如图所示
    在这里插入图片描述

    如果要想使一个旋转更加生动有力,可以使用工具箱函数tranimate制作一个旋转动画:

    >> tranimate(R)
    

    它将展示世界坐标系旋转到指定坐标系的过程。

    在正交旋转矩阵中,从左至右的列向量可以告诉我们旋转后新坐标系各个轴相对于当前坐标系的方向。例如,如果

    R =
       1.0000         0         0
            0    0.0000   -1.0000
            0    1.0000    0.0000
    

    则新坐标系的 xx 轴仍在以前 xx 轴方向 (100)(1,0,0),但其 yy 轴却在以前的 zz 轴方向 (001)(0,0,1),而新的 zz 轴在以前 yy 轴的反方向 (010)(0,-1,0)。这里,之所以 xx 轴没变,是因为这个旋转是围绕 xx 轴发生的。行向量则相反,它们表示了原来坐标系的各个轴在新坐标系中的方向。
    为了说明旋转的复合,我们继续旋转上一张图所示的坐标系,这一次绕它的y轴旋转:

    >> R = rotx(pi/2) * roty(pi/2)
    R =
        0.0000         0    1.0000
        1.0000    0.0000   -0.0000
       -0.0000    1.0000    0.0000
    >> trplot(R)
    

    绘制出如图所示的坐标系。在这个坐标系中,xx 轴现在指向世界坐标系 yy 轴的方向。
    在这里插入图片描述
    如果颠倒以上旋转的顺序,可以看出旋转的不可交换性:

    >> R = roty(pi/2) * rotx(pi/2)
    R =
        0.0000    1.0000    0.0000
             0    0.0000   -1.0000
       -1.0000    0.0000    0.0000
    >> trplot(R)
    

    在这里插入图片描述
    得到的结果是完全不同的。

    回忆一下欧拉旋转定理,它指出任何旋转都可以用不超过 33 次绕坐标轴的旋转表示。这意味着,一般情况下两个坐标系之间的任意旋转均可分解为一组绕三个旋转轴转动的角度——这个问题之后讨论。
    正交矩阵有 99 个元素,但它们不是独立的。每一列都是单位长度,这提供了 33 个约束。列与列之间相互正交,又提供了另外 33 个约束。99 个元素加上 66 个约束,实际上只有 33 个独立的值。

  • 相关阅读:
    Hibernate 基于外键的双向一对一关联映射
    Hibernate 基于外键的单项一对一关联映射
    Hibernate inverse
    Hibernate cascade
    Hibernate 双向一对多的关联映射
    Hibernate 单项一对多的关联映射
    (转)关闭iptables和SELinux
    linux下大于2T的硬盘格式化方法
    lsusb命令
    CentOS最小化安装后启用无线连接网络
  • 原文地址:https://www.cnblogs.com/thewaytotheway/p/12847253.html
Copyright © 2011-2022 走看看