你很难理解机器人的旋转,不是吗?欧拉角是一个令人头疼的问题。以下是消除痛苦的基本入门。
方向!他们让我想把头发扯下来。如果你曾经使用坐标和旋转来编程机器人的结束姿势,你就会知道我在说什么。
乍一看,设置机器人末端执行器的姿势似乎很简单,不是吗?
你只需说“我想把机器人的工具移动到。这我想让它指向这方向。”
直观地,您确切地知道您希望工具具有的方向。然而,当涉及到使用精确数字描述方向时,这个简单的任务突然变得混乱。
为什么机器人的方向很难理解
描述机器人工具的X, Y, Z(平移)坐标很容易。
要描述平移,您只需输入坐标-例如点[X, Y, Z] = [100,1000,1500] mm -并且只有一个位置可以引用,假设您使用相同的基准参考。它只能表示沿x轴100毫米,沿y轴1米,沿z轴1.5米。
但是,如何描述工具的方向呢?
你可以说:
旋转[XYZ] =[5,45,15]°
然而,你也可以说(四舍五入)
Rot[XY 'Z "] =[-7.9, 44.7, 16.2]°
或
Rot[ZY 'Z "] =[7.9, 45.2, 5.0]°
甚至
四元数[q1-q4] = [0.9, -0.1, 0.4, 0.1]
所有这些都指向完全相同的方向!
更令人费解的是,不同的机器人制造商使用不同的惯例。即使您熟悉3D几何,它也会变得有点令人头疼。
问题:我们只是不以轮换的方式思考
真正的问题是,我们不是很自然地考虑旋转。
我们直观地理解平移坐标,因为我们在日常生活中使用它们(例如:“在第二个书架上,左边数起四本书。”)。然而,当我们必须描述方位时,我们会用手指着说“就在那个方向。”
不幸的是,机器人需要更精确的信息,而不是模糊的“在那边。”
我们需要的是对欧拉角的深刻理解。
欧拉角是什么?
让我们退一步,从基础开始。
描述机器人方向最常用的方法是欧拉角。欧拉角由三个数字组成,每个数字描述绕一个轴的旋转。根据旋转的顺序有不同的欧拉角约定。
首先,我们把它简化成一个单轴的例子。
想象一个指南针。
通常世界的z轴是指从天空延伸到地面的轴。所以,你可以把指南针上的指针想象成绕着Z轴旋转(称为Rot[Z])。当你把指南针平放在你面前,箭头指向135°时,这意味着北方在你的左肩上方,所以你目前正面向东南。无论你把指南针放在哪里(地板上,头上等等),只要方向相同,角度总是135°。
到目前为止,一切都很简单。
我们的指南针只有一个旋转值(如Rot[Z]),但要描述任何3D方向,我们需要三个值。这就是问题开始变得复杂的地方。
描述机器人方向的其他方法是四元数或姿态(4×4矩阵)。
让我们动手吧
从现在开始,有一个互动的视觉辅助工具会对你有帮助。
我建议你2022世界杯国家队名单从这个链接下载RoboDK的免费版本,这使得可视化参考系和看到结果坐标变得非常容易。
启动RoboDK并使用“添加参考框架”按钮或选择Program菜单中的选项创建参考框架。你应该看到一个红、绿、蓝的框架出现在屏幕中间。
你可以像这样旋转框架:按住Alt键,然后点击并拖动出现的弯曲箭头之一。
如何驾驶飞机
让我们用飞机来类比,就像上面描述的那样robot-forum.
假设参考系是一个平面。笔直的红色箭头的尖端(x轴)是它的鼻锥的尖端,笔直的绿色箭头(y轴)是它的左翼。
在这种情况下,移动曲线箭头起到以下作用:
- 曲线红色箭头= Rot[X]:飞机的滚动,它允许飞机围绕其水平轴旋转。
- 弯曲的绿色箭头= Rot[Y]:飞机的俯仰,使机头向上或向下。
- 蓝色曲线箭头= Rot[Z]:飞机的偏航,决定了飞机前进的方向。
如果飞行员想让飞机向左和向下转向,逐渐地,飞机不会只在Z轴上旋转——这不是飞机的工作方式。
相反,飞机会:
- 把它的鼻锥向下倾斜:Rot[Y]
- 将飞机向左滚动:-Rot[X]
- 向左偏航:Rot[Z]
这整个运动将被表示为Rot[XYZ]。试着在RoboDK中自己移动一下框架,直到你对这些概念感到舒服。
然后,双击主窗口左上角的框架名称,弹出“框架细节”面板。
一个方向,几个可能的旋转
使用RoboDK,尝试以下任务。
每次任务开始前,打开框架细节面板中的“汉堡包”菜单图标(三条水平线),选择“重置(设置标识)”,重置框架。
- 选择坐标顶部的下拉菜单,并选择Stäubli旋转(X->Y ' ->Z ")而不是Generic。
- 旋转框架,使蓝色(Z)向下指向,红色(X)向后指向(即它们都从起始位置翻转,绿色(Y)与起始位置相同),但只能通过围绕Y轴旋转来实现。
- 重置框架,然后再次将其移动到相同的旋转。然而,这一次只使用一次Z旋转和一次X旋转。
- 重置框架,然后再次将其移动到相同的旋转。但是,这次只使用一次X旋转和一次Z旋转。
正如您所看到的,可以有不止一种方法来实现相同的方向。
第一种方法我们可以称之为Rot[Y],因为它只包含围绕Y轴的旋转。第二种方法我们可以称之为Rot[Z, X '],因为它包括围绕Z轴的一次旋转和围绕新X轴的一次旋转。第三种我们称之为Rot[X, Z ']。撇号表示旋转是相对于最后的运动而不是静态轴。
这是欧拉角背后的基本概念。通过改变轴和旋转的顺序,可以以多种方式将一个帧旋转到相同的方向。
不同的机器人制造商选择了不同的旋转组合。例如,Stäubli使用XY 'Z "约定,Adept使用ZY 'Z "约定,KUKA使用ZY 'X "约定,Fanuc & Motoman使用XYZ约定。另一方面,ABB使用四元数,而Universal Robots使用方向矢量。但是所有的惯例都可以用来表示空间中的任何方向。
你会发现更多的信息RoboDK的文档.
测试不同的机器人约定
希望你们开始明白了。然而,这仅仅是个开始。为了真正掌握RoboDK中的欧拉角约定,我发现使用以下软件很有用本指南.
你可以在“框架细节”面板的浅蓝色、紫色和黄色框中看到数字旋转的效果。
默认情况下,将为新的参考帧选择Generic XYZ约定。尝试从彩色框上方的下拉菜单中选择不同的机器人制造商。尝试在方框中输入数值,以查看它们对参考框架的影响。
关于欧拉角的深入教程,我也可以推荐这个学术页面.