众所周知,6轴机械臂笛卡尔坐标为X,Y,Z,A,B,C,其中XYZ很好理解,就是三维空间的位置坐标。然而ABC呢,这三个是欧拉角,是为了表示TCP的姿态,有人说是分别绕XYZ的角度,好像也不全对。于是查了点资料,整理记录如下:
1.欧拉角定义
欧拉角是由Leonhard Euler 提出的概念,用来描述刚体/移动坐标系在一个固定坐标系中的姿态.简单的说是使用XYZ三个轴的旋转分量,来描述一个6自由度的旋转。
2.欧拉角描述
欧拉角是描述机械臂末端姿态的重要方法之一。
欧拉角主要有两种表示方法:
Proper Euler angles (z-x-z, x-y-x, y-z-y, z-y-z, x-z-x, y-x-y);
Tait–Bryan angles (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z);
每个大类都使用了3个变量描述三次旋转过程中的旋转角度, 差别在于Proper Euler angles只涉及两个转轴.而Tait–Bryan angles涉及三个转轴。
2.1关于旋转顺序:
旋转顺序就是我们上文提到的Tait–Bryan angles (x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z).
我们指定绕x轴旋转α,绕y轴旋转β.但是可以有多个旋转顺序, 比如:
情况1:先绕x轴旋转α,再绕y轴旋转β.得到姿态 O1
情况2:先绕y轴旋转β,再绕x轴旋转α,得到姿态 O2
得到的 O1 一般是不等于 O2 的.
对于x,y,z三个轴的不同旋转顺序一共有(x-y-z, y-z-x, z-x-y, x-z-y, z-y-x, y-x-z)六种组合.我们需要明确旋转顺序,才能确定欧拉角所指的姿态.
2.3关于内旋/外旋:
内旋/外旋的定义:
假设在世界坐标系中XYZ中存在物体,物体自身坐标系为xyz,假设初始状态物体相对XYZ的旋转为(0,0,0),即xyz与XYZ重合.我们定义旋转顺序为z->y->x,转角分别为γ,β,α.
先绕z轴旋转γ,旋转过后,物体的x,y轴的坐标系发生了改变,z轴不变,得到新的物体自身坐标系 x2y2z ,此时的坐标轴 x2 , y2 不再与世界坐标系的坐标轴XY重合.
内旋,外旋的区别在于:
在转β(第二个转角)时:
内旋按照旋转后物体的坐标y轴,也就是 y2 旋转.
外旋按照世界坐标系中的Y轴旋转.
旋转最后一个角度时亦然.
因此, 增加了这两个概念(旋转顺序, 内外旋)后,我们描述一个能表示确定姿态/旋转的欧拉角,应该这样:
旋转角度(α,β,γ),旋转顺序(z->y->x),外旋.
或者:
旋转角度(α,β,γ),旋转顺序(x->y->z),内旋.
等等, 三个元素缺一不可.
3.欧拉角缺点
死锁问题:死锁,说的是当第二次旋转为90度的时候(宽泛来讲,第二次旋转后坐标系发生重合),第三次旋转和第一次旋转的旋转方向一样,从整体来看就是失去了一个自由度的控制。无法实现球面平滑插值。
表示不唯一:由于角度的周期性变化,导致在表示的形式上也不唯一。且死锁问题的存在更增加了解的数目。当然这一点可以通过限制范围在[-180,180]解决。
插值后死锁引发震荡:当插值后的值正好为90度附近时,会出现相同姿态的欧拉角差距很大的情况(第二条)。