zoukankan      html  css  js  c++  java
  • 机器人学——1.4-三角度表示法

    欧拉旋转定理要求绕3个轴依次旋转,但不能绕同一轴线连续旋转两次。旋转顺序分为两种:欧拉式和卡尔丹式,分别以欧拉和卡尔丹(Cardano)的名字命名。

    欧拉式是绕一个特定的轴重复旋转,但不是连续的:XYXXYXXZXXZXYXYYXYYZYYZYZXZZXZZYZZYZ。卡尔丹式的特点是绕 33 个不同轴旋转:XYZXYZXZYXZYYZXYZXYXZYXZZXYZXYZYXZYX。一般来说,所有这些序列均被统称为欧拉角,共有 1212 种形式可供选择。

    现在通常是将所有三角度表示法都称作欧拉角,但这种称呼不够确切,因为一共有 1212 种不同形式的欧拉角可供选择。在某一特定技术领域中,欧拉角往往指一种特定的旋转角顺序。

    ZYZZYZ 序列的欧拉角表示为
    R=Rz(ϕ)Ry(θ)Rz(ψ) R=R_z(phi)R_y( heta)R_z(psi)
    它常用在航空和机械动力学中,并在机器人工具箱中使用。欧拉角是一个三维向量 Γ=(ϕ,θ,ψ)Gamma=(phi, heta,psi)
    例如,要计算 Γ=(0.1,0.2,0.3)Gamma=(0.1, 0.2, 0.3)的等价旋转矩阵,我们可以这样写(注意是弧度制):

    >> R = rotz(0.1) * roty(0.2) * rotz(0.3)
    R =
        0.9021   -0.3836    0.1977
        0.3875    0.9216    0.0198
       -0.1898    0.0587    0.9801
    

    或采用更简便的方式:

    >> R = eul2r(0.1, 0.2, 0.3)
    R =
        0.9021   -0.3836    0.1977
        0.3875    0.9216    0.0198
       -0.1898    0.0587    0.9801
    

    上述问题的逆命题是要找到给定旋转矩阵的欧拉角,可采用以下函数:

    >> tr2eul(R)
    ans =
        0.1000    0.2000    0.3000
    

    但是,如果 θ heta 为负时,如

    >> R = eul2r(0.1, -0.2, 0.3)
    R =
        0.9021   -0.3836   -0.1977
        0.3875    0.9216   -0.0198
        0.1898   -0.0587    0.9801
    

    其反函数结果为

    >> tr2eul(R)
    ans =
       -3.0416    0.2000   -2.8416
    

    它返回了一个正的 θ heta 值和两个不同的 ϕphiψpsi值。但这组欧拉角对应的旋转矩阵仍与前一组是相同的:

    >> R = eul2r(ans)
    R =
        0.9021   -0.3836   -0.1977
        0.3875    0.9216   -0.0198
        0.1898   -0.0587    0.9801
    

    两组不同的欧拉角对应同一个旋转矩阵,说明从旋转矩阵到欧拉角的映射是不唯一的,而机器人工具箱函数返回的角度 θ heta 始终为正。
    对于 θ=0 heta=0 的情况:

    >> R = eul2r(0.1, 0, 0.3)
    R =
        0.9211   -0.3894         0
        0.3894    0.9211         0
             0         0    1.0000
    

    反函数返回的角度值为

    >> tr2eul(R)
    ans =
             0         0    0.4000
    

    它与原值完全不同。其实在这种情况下,旋转矩阵是
    R=Rz(ϕ)Ry(θ)Rz(ψ)=Rz(ϕ)Rz(ψ)=Rz(ϕ+ψ) R=R_z(phi)R_y( heta)R_z(psi)=R_z(phi)R_z(psi)=R_z(phi+psi)
    由于 Ry=IR_y=I,所以可化简为只是 ϕ+ψphi+psi 的一个函数。对于逆运算而言,只能确定这个和的值。要想得到其中每个值,只能按惯例取 ϕ=0phi=0θ=0 heta=0 的情况实际上是一个奇异点,我们之后还会详细讨论。

    另一种广泛使用的旋转角顺序是横滚(Roll)——俯仰(pitch)——偏航角(yaw),即
    R=Rz(θr)Ry(θp)Rz(θy) R=R_z( heta_r)R_y( heta_p)R_z( heta_y)
    在这里插入图片描述
    机器人工具箱函数tripleangle可以直观的展示三角度表示。
    它用于描述船舶、飞机和车辆的姿态时非常直观。横滚、俯仰和偏航(也称为侧倾、姿态和航向)是指分别绕 xxyyzz 轴的旋转。这个 xyzxyz 角序列,即专业上的卡尔丹角,也被称为泰特-布莱恩角(Tait-Bryan)或导航角。对于航空及地面车辆而言,通常定义 xx 轴为前进的方向、zz 轴垂直向下、yy 轴指向右手方向

    注意,也有一些机器人学教科书[Paul1981;Sicilianoet al.2008;Spong et al.2006]都交换了其中的 xx 轴和 zz 轴,把向前的方向定义为 zz 轴方向而不是 xx 轴方向,也就是说是绕 zz 轴而不是 xx 轴横滚。新版的机器人工具箱中默认的是 xyzxyz 顺序,不过也可以用'zyx'选项来指定 zyxzyx 的顺序。

    >> R = rpy2r(0.1, 0.2, 0.3)
    R =
        0.9363   -0.2896    0.1987
        0.3130    0.9447   -0.0978
       -0.1593    0.1538    0.9752
    

    其逆运算为

    >> tr2rpy(R)
    ans =
        0.1000    0.2000    0.3000
    

    横滚——俯仰——偏航序列允许每个角度值有任意正负号,不会产生多解的情况。但它也有一个奇异点,即当 θp=±π/2 heta_p=pm pi/2时,不过这个点刚好在大多数车辆可能的姿态范围以外。

  • 相关阅读:
    有点忙啊
    什么是协程
    HDU 1110 Equipment Box (判断一个大矩形里面能不能放小矩形)
    HDU 1155 Bungee Jumping(物理题,动能公式,弹性势能公式,重力势能公式)
    HDU 1210 Eddy's 洗牌问题(找规律,数学)
    HDU1214 圆桌会议(找规律,数学)
    HDU1215 七夕节(模拟 数学)
    HDU 1216 Assistance Required(暴力打表)
    HDU 1220 Cube(数学,找规律)
    HDU 1221 Rectangle and Circle(判断圆和矩形是不是相交)
  • 原文地址:https://www.cnblogs.com/thewaytotheway/p/12847252.html
Copyright © 2011-2022 走看看