机器人学——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时,不过这个点刚好在大多数车辆可能的姿态范围以外。

原文地址:https://www.cnblogs.com/thewaytotheway/p/12847252.html