回到基础——理解几何旋转与欧拉角

在机器人学习中,几何旋转可以说是其中的难点之一。提到旋转,就不能不提到欧拉角表达方式(也会涉及到其他的表达方式例如四元数),在这里,我们希望这篇基础知识能帮你更好地理解空间旋转。

机器人几何旋转!

我们都知道,在三维空间里,要表达位置可以使用坐标[X, Y, Z],坐标的三个数值基于一个原点的位置。如果要表达方向的话,就要用到旋转。当你需要为机器人末端执行器的位置跟方向编程的时候,你会明白旋转不是那么容易理解。

或许你觉得,我只需要移动机器人末端到这个位置,并指向那个方向就可以了啊。在实际操作中我们可以很容易地指出那个方向。然而,当你需要使用精确的数字来描述方向的时候,这个任务就复杂了。

在表达位移的时候,我们只需要[X, Y, Z]坐标就可以了。

比如 [X, Y, Z] = [100, 1000, 1500] mm 是代表空间内唯一的一个点,它在X方向距离原点100mm,Y方向1000mm,而Z方向是1500mm。以上三个数字是这个点的唯一描述,要想到达这个点的位置,你可以先从原点沿着Z轴移动1500mm,然后在Y轴移动1000mm,最后在X轴移动100mm,调换三个平移运动的顺序并不会改变这个点的坐标值。

但是,在表达方向的时候,就不是这样了。

  • 你可以做这个旋转:[XYZ] = [5, 45, 15]o
  • 或者,旋转:[XY’Z”] = [-7.9, 44.7, 16.2]o
  • 再或者,旋转:[ZY’Z”] = [7.9, 45.2, 5]o
  • 甚至,以四元数的方式:[q1, q2, q3, q4] = [0.9, -0.1, 0.4, 0.1]

而以上不同的几组数字,表达的是同一个方向!

这非常难以理解,因为我们的大脑无法很好地想象出物体在3D空间里旋转的样子。而那么多的机器人生产商,都各自选择使用不同的方式来定义它们的机器人旋转!这可能会让人感到头疼,就算你已经对3D几何很熟悉了。

机器人需要准确的指令,控制它的运动方位。这就是引入欧拉角几何法的原因,因为我们不能很好地想象“旋转”。

什么是欧拉角?

让我们从基础开始介绍,它是最常见的机器人“方向”的表达。欧拉角由三个数字组成,每个数字代表环绕一个坐标轴旋转的角度。欧拉角也有不同的写法跟表达方式。

让我们从一个坐标轴开始,想象一个指南针,它的针头就相当于围绕着Z坐标轴旋转(一般来说,在世界空间中Z坐标为与地面垂直的轴,并指向天)。我们把指南针平放在手上观察它指向的角度,这代表着以北方为零度,你目前的方向角。不论你把指南针放在哪里(地上或者桌子上),它指向的角度都是一样的。我们的指南针只有一个旋转自由度,即围绕Z轴旋转。当你引入另外两个旋转时,情况就有些复杂了。

另外,我们提到的四元数方向表示法,则更加让人难以用脑子想象。

使用软件工具帮助理解

现在,我建议你下载免费的RoboDK软件试用版,你可以使用它更好地理解旋转,观察坐标系,以及它旋转后的效果。

打开RoboDK软件,添加一个“参考坐标系”。你可以看到一个由红绿蓝三色组成的坐标出现在屏幕中间(约定俗成的规则是,电脑中的RGB,即红绿蓝三原色,各代表X, Y, Z这三个坐标轴)。你可以按下Alt按键,用鼠标拖动弧形的红、绿、蓝色圆弧箭头来旋转这个坐标。

如何“飞行”

让我们拿飞机做个比方,想象你刚添加的坐标系是一架飞机。红色的X轴是它的机头,绿色的Y轴是它的机翼。此时,使用圆弧箭头旋转坐标系可以实现以下的功能。欧拉角

  • 移动红色圆弧箭头,围绕X轴旋转,即相当于翻滚机身(Roll)。
  • 移动绿色圆弧箭头,围绕Y轴旋转,即相当于机身俯仰(Pitch)。
  • 移动蓝色圆弧箭头,围绕Z轴旋转,即决定飞机头指向的方向,又叫偏航(Yaw)。

如果你需要让飞机既向它的左前方、又朝着地面方向飞行的话,正确的做法不是仅仅旋转偏航(Z轴)与俯仰(Y轴)两个角度,而应当是渐渐地调整可旋转的三个角度,保证飞机能缓和地降落。

使用鼠标拖动,试验一下首先压低俯仰角(围绕Y轴旋转),再向左翻滚(围绕X轴旋转),最后向左偏航(围绕Z轴旋转)。这三个旋转叠加起来可以表达为旋转:[YXZ]。试着来回移动几次,熟悉互相叠加的旋转角度。双击这个参考坐标系,可以查看坐标系详情。

一个方向,多种表达!

使用RoboDK,完成下面的任务。在每个任务之前,重置坐标系——在坐标详情菜单中,点击最右边显示为三条平行线的按钮,然后选择“重设“。

  1. 在坐标系详情菜单中点击下拉菜单,选择Staubli (deg) 旋转表达方式。
  2. 重置坐标系,让坐标系围绕Y轴旋转180度。你会发现此时Z轴跟X轴都反向了。
  3. 重置坐标系,达到同样的旋转。但是先使用一个Z轴旋转,再进行X轴旋转。
  4. 重置坐标系,达到同样的旋转。但是先使用一个X轴旋转,再进行Z轴旋转。

你已经发现了,需要达到同样的旋转效果,可以通过不同的方式。

第一种方式我们可以称它为围绕Y轴的旋转:[Y],第二种是旋转:[Z, X’],第三种是旋转:[X, Z’]。这个 ‘ 上标表达的是该旋转是以上一次旋转为参考,而不是以绝对(世界)坐标系为参考。

这就是欧拉角背后的基本概念。你可以使用不同的方式得到同一个旋转——通过不同的转轴或者不同的旋转顺序。

不同的机器人生产商选择了不同的方式定义旋转。比如,史陶比(Staubli)使用的是XY’Z”,爱得普(Adept)使用ZY’Z”,库卡(KUKA)使用ZY’X”而发那科(Fanuc)与安川(Motoman)则使用XYZ。另外,ABB机器人使用四元数表达旋转,而优傲(UR)机器人使用方向矢量。以上这些定义都可以用于表达几何空间中的任何旋转。

测试不同的旋转定义

希望这篇文章让你对3D旋转跟几何方向有了更好的理解,虽然这只是个开始。你可以在坐标系详情菜单中观察旋转角度的变化;在默认的旋转设置(Generic),即通用的XYZ定义下,试着从下拉菜单中选择不同的机器人生产商,观察不同的角度数值,更好地理解它们。

3 Comments on “回到基础——理解几何旋转与欧拉角”

Leave a Reply

Your email address will not be published. Required fields are marked *