机器人学——1.4-三角度表示法


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

欧拉式是绕一个特定的轴重复旋转,但不是连续的: X Y X XYX X Z X XZX Y X Y YXY Y Z Y YZY Z X Z ZXZ Z Y Z ZYZ 。卡尔丹式的特点是绕 3 3 个不同轴旋转: X Y Z XYZ X Z Y XZY Y Z X YZX Y X Z YXZ Z X Y ZXY Z Y X ZYX 。一般来说,所有这些序列均被统称为欧拉角,共有 12 12 种形式可供选择。

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

Z Y Z ZYZ 序列的欧拉角表示为
R = R z ( ϕ ) R y ( θ ) R z ( ψ ) R=R_z(\phi)R_y(\theta)R_z(\psi)
它常用在航空和机械动力学中,并在机器人工具箱中使用。欧拉角是一个三维向量 Γ = ( ϕ , θ , ψ ) \Gamma=(\phi,\theta,\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

但是,如果 θ \theta 为负时,如

>> 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

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

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

两组不同的欧拉角对应同一个旋转矩阵,说明从旋转矩阵到欧拉角的映射是不唯一的,而机器人工具箱函数返回的角度 θ \theta 始终为正。
对于 θ = 0 \theta=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 = R z ( ϕ ) R y ( θ ) R z ( ψ ) = R z ( ϕ ) R z ( ψ ) = R z ( ϕ + ψ ) R=R_z(\phi)R_y(\theta)R_z(\psi)=R_z(\phi)R_z(\psi)=R_z(\phi+\psi)
由于 R y = I R_y=I ,所以可化简为只是 ϕ + ψ \phi+\psi 的一个函数。对于逆运算而言,只能确定这个和的值。要想得到其中每个值,只能按惯例取 ϕ = 0 \phi=0 θ = 0 \theta=0 的情况实际上是一个奇异点,我们之后还会详细讨论。

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

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

>> 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 \theta_p=\pm \pi/2 时,不过这个点刚好在大多数车辆可能的姿态范围以外。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM