机器人程序

RoboDK是一款专注于工业机器人应用的仿真软件,支持离线编程(Offline Programming, OLP)。用户可通过该软件创建、仿真机器人程序,并直接生成适用于特定机械臂和控制器的代码,无需依赖真实机器人进行调试。

为了创建一个机器人程序,你需要选择并加载一个机器人和机器人工具,然后再使用一个或多个计算机辅助设计(CAD)软件插件添加目标,或者使用特定工具(如转换数控机床CNC程序到机器人程序)来创建程序。

RoboDK的在线资源库提供了大量工业机器人模型与工作站范例。工业机器人在RoboDK中建模的方式与供应商特定控制器的行为相同,包括轴极限,运动方向和轴连接。

Robot Programs - 图片 1

本节将介绍如何在RoboDK图形操作界面(GUI)为你的机器人控制器创建、仿真并生成机器人程序。

Note:本节将介绍如何仅在软件界面创建机器人程序。RoboDK API可用于补充机器人程序或者可以完全通过API创建程序。更多信息详见RoboDK API章节。

离线编程

离线编程是指脱离生产环境对机器人进行编程的技术。通过采用离线编程,可消除示教器现场编程导致的产线停机问题。

机器人工作单元的仿真与离线编程技术,能在实际搭建生产单元前对多种场景方案进行验证。由此可提前预判工作单元设计阶段常见的错误配置。

离线编程是实现机器人系统投资回报最大化的最佳途径,但需要配备专业的仿真工具。该技术能将新程序的调试周期从数周压缩至单日完成,从而助力短期生产项目的自动化改造。

新建程序

仿真可通过在程序中添加一系列指令来实现。每条指令代表针对特定控制器的专用代码,而RoboDK提供的图形用户界面(GUI)能以通用方式轻松构建机器人程序,无需编写代码。

机器人控制器专用代码将在程序生成时自动创建,通过以下步骤可以在RoboDK软件界面创建一个新的程序:

1.选择程序➔Robot Programs - 图片 2 添加程序       
或者,选择工具栏上的相应按钮。

2.选择工具➔ 重新命名项目...(F2)重命名程序

Note:如果添加了指令但是工作站中没有可用程序,这时程序则会自动创建。

此操作将创建一个空程序,然后右键单击程序或者在程序菜单中选择一条指令添加。更多有关添加指令的信息请参考下一节程序指令

Robot Programs - 图片 3

Note:你也可以使用RoboDK API和其他编程语言(如Python,C#或Matlab)来仿真和编程。更多信息详见RoboDK API章节。

程序指令

可以通过右键单击程序或从程序菜单中添加新的指令,如上一节所示。

Tip:选择特定指令,可在所选指令后添加新指令。

Tip:可以在程序内部或不同程序之间拖放指令,以重新排序。

本节介绍RoboDK图形用户界面支持的指令,用于机器人离线编程。

关节运动

选择程序➔Robot Programs - 图片 4 关节运动指令,即可添加新的关节运动指令。或者,选择工具栏上的相应按钮。

如果在添加指令时没有选取目标点,该运动指令会自动创建新的目标点并与之关联。当目标点位置发生改变时,运动轨迹也会相应调整。

如果这是添加到该程序中的第一条指令,系统会在运动指令前自动插入两条额外指令:设置参考坐标系设置工具坐标系。这将确保机器人执行到运动指令时,使用的参考坐标系和工具坐标系与创建该目标点时保持一致。

Note:右键单击运动指令并选择目标点选项… (F3)即可打开目标选项菜单。可从该窗口或直接于3D视图中修改该目标位置等信息。

Robot Programs - 图片 5

线性运动

选择程序➔Robot Programs - 图片 6 直线运动指令,即可添加新的直线运动指令。或者,选择工具栏上的相应按钮。

如果在添加指令时没有选取目标点,该运动指令会自动创建新的目标点并与之关联。当目标点位置发生改变时,运动轨迹也会相应调整。

关节运动和直线运动的移动方式一样,可以从一种类型切换到另一种类型。

与关节移动指令相同,如果这是添加到该程序中的第一条指令,系统会在运动指令前自动插入两条额外指令:设置参考坐标系设置工具坐标系

Important:建议将每个程序的第一条运动指令保持为使用关节目标的关节运动。这将确保机器人在此后的运动中使用正确的位姿配置,并确保真实机器人的移动方式与仿真相同。

与关节运动不同,线性运动对机器人奇异点和轴限位非常敏感。例如,六轴机器人无法以直线轨迹穿越奇异点。下图所示案例中,由于关节5过于接近奇异点(0度位置),导致运动失败。[...] 此时建议改用关节运动方案,如下图所示。

Robot Programs - 图片 7

如果不是必要的线性运动,可以右键单击指令将其改为关节运动。

Robot Programs - 图片 8

或者通过修改目标、TCP或参考坐标系的位置来避免奇点。

设置参考坐标系

选择程序 ➔Robot Programs - 图片 9设置工件坐标系指令,即可设置参考坐标系。这将为接下来的运动指令更新控制器上的参考坐标系,并在RoboDK仿真中改变当前参考坐标系。这意味着,执行特定目标(笛卡尔目标)的运动指令将会以最后设定的参考坐标系为基准。

参考坐标系是一个变量名称,在ABB机器人中被称为Work Object,在发那科(Fanuc)机器人中称为UFRAME,在安川(Motoman)机器人中称为FRAME,在库卡(KUKA)机器人中则称为$BASE。

Robot Programs - 图片 10

Note:特定控制器(比如Fanuc和Motoman控制器)支持使用编号设置参考坐标系。这表示参考坐标系的名称可以用数字结尾(例如Frame 4代表第4个参考坐标系)。

设置工具坐标系

选择程序➔Robot Programs - 图片 11 设置工具坐标系指令,即可设置工具坐标系(TCP)。这将为程序中接下来的运动指令更新工具坐标系,并在RoboDK仿真中改变当前工具坐标系。这意味着,执行特定目标(笛卡尔目标)的运动指令将会以最后设定的工具坐标系为基准。

工具坐标系的变量名有ToolData (ABB机器人),UTOOL(Fanuc机器人), TOOL(Motoman机器人)或者$TOOL(针对KUKA机器人)。

Robot Programs - 图片 12

Note:特定控制器(比如Fanuc和Motoman控制器)支持使用编号设置工具坐标系。这表示工具坐标系的名称可以用数字结尾(例如Tool 4代表第4个工具)。

圆弧运动

选择程序➔Robot Programs - 图片 13 圆弧运动指令,即可添加新的圆弧运动指令。或者,选择工具栏上的相应按钮。

添加圆弧运动指令时需要选取两个目标点,否则该运动指令不会自动创建新的目标点。该指令需要分别关联两个目标点,如下图所示。

Robot Programs - 图片 14

圆弧运动是从机器人所在的点出发,经过第一个环路点(目标点 1),并以终点(目标点 2)结束而形成的弧线。

Important:仅用一条圆弧运动指令不可能完成一个完整的圆周运动。一个完整的圆必须被分为两条独立的圆弧运动完成。

设置速度

选择程序➔Robot Programs - 图片 15 设置速度指令即可添加速度和/或加速度指令。可以在关节空间和笛卡尔空间中指定速度和加速度。

根据情况,在程序中相应的位置设置速度或者加速度。机器人速度从执行该指令时开始生效。

也可在机器人参数菜单中更改机器人速度:双击机器人,然后选择参数。

Note:并非所有机器人控制器都支持精确设置加速度。

Important:设置正确的速度对准确计算程序时间(循环时间)非常重要。更多信息请参考循环时间

Robot Programs - 图片 16

显示信息

选择程序➔Robot Programs - 图片 17 显示信息指令,添加一条新指令,在示教器上显示一条信息。

Robot Programs - 图片 18

Note:并不是所有机器人控制器都支持在示教器上显示信息。对于不支持的设备,这条指令将不起作用。

暂停

选择程序➔Robot Programs - 图片 19 暂停指令,添加一条新指令,暂停程序执行一段时间或停止程序,直到操作员恢复程序。

Robot Programs - 图片 20

Note:将暂停延迟值设置为-1即可暂停程序,直到操作员希望恢复程序。该指令将自动被改名为停止Important:当仿真时采用默认的速度比率 5时,则5秒钟的暂停需要1秒钟的模拟时间。更多信息请参考仿真部分

程序调用

选择程序➔Robot Programs - 图片 21 程序调用指令即可在当前程序中添加一条子程序调用指令。

默认情况下,这是对特定程序的阻塞调用。也可以切换到插入代码模式,在该指令的位置插入一些代码。此功能可能对特定应用和特定控制器具有实用价值。

Tip:通过选择程序可自动填充该文本框。或者,直接键入子程序名同样有效。只要所输入文本匹配到子程序名称,该子程序将会被RoboDK仿真调用。

Tip:输入多行文本可自动连续调用多个程序。

Robot Programs - 图片 22Robot Programs - 图片 23

项目调用切换到启动线程,可触发对子程序的非阻塞调用。在这种情况下,控制器将启动一个新的线程。该选项仅适用于某些控制器,且仅对特定操作有效。

Tip:仅用于仿真目的时,主程序可利用启动线程选项同时启动多个子程序(例如同时模拟两个或多个机器人)。

设置/等待 IO

选择程序➔Robot Programs - 图片 24 设置信号输出/等待信号指令,以改变数字输出(DO)的状态。默认情况下,该指令为"设置数字输出"。该指令还允许等待数字输入(DI)以切换到特定状态。

如果是命名变量,IO名称可以是数字或文本值。如果是命名状态,IO值可以是数字(0表示"假",1表示"真")或文本值。

Note: 该指令还支持在某些机器人控制器上设置模拟输出(AO)或等待模拟输入(AI)。在这种情况下,可以用十进制数字或特定文本代替数字。

Robot Programs - 图片 25

可设置等待数字输入,此时程序停止执行,直到该输入变为特定值。此外,大多数机器人控制器都支持超时延迟功能,即当等待时间超过特定值时报错。勾选超时(毫秒)选项可激活此功能。

Robot Programs - 图片 26

Tip:如果机器人单元上有特定的硬件(如夹爪或铣削钻头),使用数字输出(DO)激活该硬件,然后等待特定的数字输入(DI)切换到特定状态,是一种标准做法。

更改仿真的数字输入数字输出将创建新的工作站变量。要检查这些变量的状态,可以右键单击工作站并选择工作站参数。也可以通过API读取或修改这些变量。

设置轨迹精度

选择程序➔Robot Programs - 图片 27 设置轨迹精度,即可修改轨迹的舍入精度。该舍入值用于平滑连续运动之间的边缘。此更改在程序内执行后立即生效(与其他所有指令相同),因此通常在程序开始时设置该值。

如果没有轨迹舍入,机器人在每条运动指令结束时速度都会将为 0(除非下一个运动与上一个运动相切)。这将引发机器人的高加速度和快速速度变化,以确保每次运动的准确性。

该值也被称为Blending radius(优傲UR机器人),ZoneData(ABB机器人),CNT/FINE(Fanuc机器人),Cornering(Mecademic机器人)或者$APO.CDIS/$APO.CPTP/Advance(KUKA机器人)。

Note轨迹舍入精度设置为-1,可实现精细运动。这意味着机器人不会绕过路点边缘。

Robot Programs - 图片 28

Tip:高舍入值可确保机器人路径上的速度恒定,以换取路径边缘上的精度损失。根据不同的应用,通常可以在精度和平稳速度之间找到一个很好的折衷方案。

有些控制器要求将该值设置为百分比,例如在发那科(Fanuc)控制器上,如果要提供CNT5命令,则应输入5。

如果你生成的程序用于机器人加工、3D打印或曲线/点追踪,还可以在程序事件窗口中指定舍入参数。

Robot Programs - 图片 29

通过RoboDK的路径精准度测试,可以更好地了解不同舍入策略的效果。

仿真事件

选择程序➔Robot Programs - 图片 30 仿真指令,即可添加一个新的仿真事件。仿真事件对生成的真机代码没有影响,仅用于为仿真目的触发特定事件。

通过图形用户界面可以实现:

机器人工具抓取或放置物体

显示或者隐藏物体或者工具

改变物体和参考坐标系的位置

Robot Programs - 图片 31

例如,如果机器人移动到指定位置去抓取物体,我们可以设置一个Attach object事件,让该物体与机器人一起移动。之后,在机器人完成移动准备放置物体时,可以设置一个Detach object事件,让工具脱离抓取到的任何物体。

 

Robot Programs - 图片 32

Note:也可以使用宏(Macro)来模拟特定事件(需要编程经验)。例如,使用API可以使物体随机出现在特定位置,进行取放仿真。

Note:抓取物体时,在距离设置内最近的物体将会被附着到工具上。默认距离为200毫米并可在以下页面更改:工具➔选项➔工作站➔将物体固定到机器人工具上的最大距离(mm)。默认情况下,系统会检测从TCP位置到物体参考点的距离,你也可以勾选检查TCP和物体形状之间的最短距离,使其检测TCP与物体之间的最短距离。

仿真程序

双击程序Robot Programs - 图片 33,即可运行仿真程序。或者:

1.右键单击程序

2.选择运行

如果双击程序,底部会出现一个仿真进度条。可以滑动该进度条,使仿真向前或向后移动。

Robot Programs - 图片 34

Tip:点击菜单栏的:程序➔Robot Programs - 图片 35 快速仿真,可加快模拟速度(或按住空格键)。此选项也可在工具栏中找到。

RoboDK默认以5倍于实时速度进行模拟。这意味着,如果一个程序实际执行需要30秒,模拟过程仅需30/5=6秒即可完成。加速模拟功能可将该比例提升至100倍。常规与快速模拟速度的调整路径为:工具➔选项➔运动选项卡。

Tip:选择程序➔Robot Programs - 图片 36 暂停程序,可暂停仿真(或按 Backspace 键)。

Tip:选择 Esc 键停止模拟或再次双击程序。

Tip:双击每条指令,逐一执行。

Tip:右键点击某条移动指令并选择“从这里开始”,即可从该指令恢复程序执行,如下图所示。

Robot Programs - 图片 37

生成程序

当程序准备就绪可导出至机器人时,即可生成机器人控制器所需的程序文件。

请按照以下步骤生成机器人程序:

1.右键单击你的程序。

2.接着选择生成机器人程序 (F6)。

然后,你就会看到文本编辑器中显示的机器人程序。

Note:当选择一个或多个程序时,你也可通过菜单栏:程序➔生成程序(F6),可以生成一个或多个机器人程序。

Tip:按住Ctrl键,即可同时选择多个程序,并一次全部生成。

Robot Programs - 图片 38

机器人程序默认保存在“文档”文件夹中(路径:C:/Users/用户名/Documents/RoboDK/Programs/)。如需修改该路径,请点击菜单栏:工具➔选项程序选项卡,点击:机器人程序文件夹右侧的设置按钮进行更改。

Note:对于某些机器人控制器而言,最佳实践是将生成的程序与所需子程序集成到同一程序文件中。RoboDK已自动处理这一细节——对于支持该功能的控制器(例如ABB、优傲Universal Robots或库卡KUKA控制器),你将在主程序中看到已包含的子程序。而对于不支持此功能的机器人(例如发那科Fanuc或安川Motoman控制器),则需要生成多个文件并传输至机器人控制器才能完整运行所有程序。部分后处理器支持对此行为进行配置,你可通过:工具➔选项程序选项卡查看更多设置。

另外,你也可以右键点击某个程序,并选择:生成机器人程序为…(Shift+F6),指定保存位置来生成程序。

传输程序

你可以将程序从计算机直接发送到机器人,此功能是通过FTP协议或其他特定协议(例如使用套接字消息传递或串行连接)进行传递的。首先,你需要在机器人连接菜单中输入机器人IP和FTP相关设置:

1.右键单击机器人。

2.选择:连接到机器人…,此时左侧界面会弹出一个窗口。

3.输入:机器人IP。

4.选择:更多选项,然后输入FTP相关设置和FTP凭证(如有需要)。

Tip:在连接机器人窗口选择:ping,就可以查看机器人是否存在于局域网中。

Robot Programs - 图片 39

提供网络设置并连接上机器人后,请按照以下步骤将程序直接从RoboDK传输到机器人:

1.右键单击程序

2.选择发送程序到机器人(Ctrl+F6)。

接着,弹出的窗口会告诉你是否传送成功。

Note:程序也可以通过U盘或者其他媒体传送到机器人。“机器人提示Robot Tips”区域(品牌特定部分)为一些支持的机器人品牌提供了更多信息。

Note:启动机器人和程序这一动作仅适用于一些特定的机器人控制器。

Important“连接”按钮仅在使用机器人驱动程序时有用。这样就可以在不连接机器人驱动器的情况下实现程序传输。机器人驱动程序允许在RoboDK上逐点移动机器人并以这种简单的方式调试程序(“在机器人上运行”选项)。机器人驱动程序还允许直接通过API移动机器人。

Tip: 使用 FileZilla 等 FTP 客户端可以更好地浏览机器人控制器的内容,并检索程序的远程 FTP 路径。大多数机器人控制器都支持 FTP 传输。

选择后处理器

RoboDK上仿真到特定机器人程序的转换都是由后处理器完成。后置处理器定义了如何为机器人生成机器人程序。每个机器人在RoboDK上都有一个特定/默认的后置处理器。

如何为机器人选择后置处理器:

1.右键单击机器人或者程序。

2.选择:选择后处理器程序

3.在列表里选择后置处理器的名字。

4.最后点击确认。

Robot Programs - 图片 40   Robot Programs - 图片 41

当选择好后处理器后,你可以再生成一遍程序查看变化。

Note:后处理器需要连接指定的机器人。所以每当更改一个程序的后处理器时,就会同时更改同一机器人下所有程序的后处理器。

RoboDK中的后处理器提供了非常完全的灵活性,它可以根据特定要求生成机器人程序。 RoboDK为大多数机器人品牌提供后处理器。你可以轻松创建或更改后处理器。有关后处理器的更多信息,可以参考后处理器章节。

程序设置

你可以自定义为机器人生成程序的方式。

按照以下步骤查看生成程序的设置:

1.在工具栏选择:工具 选项

2.选择:程序选项卡。

Robot Programs - 图片 42

以下包含了生成自定义程序的内容

1.将关节动作分割成更小的步骤。

2.将直线运动拆分成更小的步骤。

3.将圆弧运动转换为小的线性运动。

4.将大型机器人程序拆分为子程序。

5.指定机器人程序的默认保存位置。

6.为机器人程序指定默认文本编辑器。。

Tip:为机器人程序指定默认文本编辑器。

圆弧运动转换为直线运动

在为机器人生成程序时,你可以将圆弧运动轻松转换为小幅直线运动。这在控制器不支持圆弧插补功能时非常实用。

如何将圆弧运动生成直线运动:

1.选择:工具 选项。

1.选择:程序选项卡。

2.选择:避免弧线

3.调整最大圆弧尺寸(mm),它定义沿弧线的线性移动距离。

Robot Programs - 图片 43

Note:RoboDK 不会生成小于此窗口中定义的最小步长(mm)的线性运动。因此,如果最小步长(mm)公差大于最大圆弧尺寸(mm)公差,则沿圆弧的线性运动将更大。

拆分长程序

执行长程序可能会超出机器人控制器的限制。控制器一般会限制文件大小或者每个程序的代码行数。例如,用于3D打印或机器人加工的程序代码通常会超过一百万行。这时最好将较长的程序拆分为较小的子程序,包括将一个主程序拆分为几个按顺序运行的子程序。

如何自动拆分一个长程序:

1.选择:工具➔ 选项➔ 程序选项卡

2.选中:每个程序的最大行数,并填入每个文件生成程序的最大行数。

Tip:大多数后处理器对每个程序的最大行数设有默认限制(变量名为MAX_LINES_X_PROG),可通过此步骤修改或覆盖该限制。

Robot Programs - 图片 44

内联子程序

当生成调用子程序的程序时,RoboDK会自动创建调用该子程序的指令。另一方面,也可以自定义程序输出,将子程序直接内联在主程序中,避免使用程序调用。

Note: 部分后处理器会默认将子程序包含在主程序文件中(例如默认的ABB后处理器),而其他后处理器则不会包含子程序,因为这些子程序通常在机器人控制器中是独立文件(例如默认的发那科(Fanuc)后处理器)。

Tip:若控制器需要使用编号程序而非命名程序,此功能会非常实用。

请按照以下步骤内联子程序,以避免调用脱机程序:

1.选择:工具➔ 选项

2.选择:程序选项卡。

3.勾选内联子程序选项。

从现在开始,当你生成包含子程序的程序时,你将直接在第一个/主程序中获取这些子程序的内容。

Robot Programs - 图片 45

后处理器与驱动器

后处理器与机器人驱动程序采用不同的方式控制机器人运动。后处理器支持离线生成程序,而驱动程序则能实现与机器人的实时通信。

后处理器用于离线编程,其作用是将RoboDK机器人程序转换为对应机器人控制器的原生编程语言。例如,ABB后处理器会生成适用于IRC5控制器的.mod文件。后处理器还包含通过FTP等方式将程序上传至机器人控制器的功能。程序中的以下功能均由后处理器处理:

1.生成机器人程序

2.生成机器人程序作为...

3.发送程序到机器人

4.启动机器人(与驱动器结合使用)

Robot Programs - 图片 46

通过机器人驱动器,可以使用 RoboDK 从电脑远程控制机器人。该功能支持将RoboDK中的程序指令实时传输至机器人控制器执行,包括调用控制器上的远程程序。例如,ABB驱动程序通过套接字通信传输运动指令。该驱动程序可处理以下功能:

1.选择:在机器人上运行

2.然后双击程序,或选择:运行,即可通过驱动在机器人上运行。

Robot Programs - 图片 47

Note:机器人驱动器会逐条发送指令并等待控制器完成操作。对于运动指令而言,这意味着会出现微小延迟(会有明显顿挫)。

Tip:在大多数情况下,离线编程是控制机器人的最佳方式,因为所有运动指令都预先被机器人控制器知晓(预读),使其能够充分利用运动和速度优化功能,例如路径圆滑处理。

Tip:可采用后处理器与驱动器的混合方案,将复杂路径上传至控制器后通过驱动器远程调用。这种方式在使用RoboDK API时尤为高效。