RoboDK是一款专注于工业机器人应用的仿真软件,支持离线编程(Offline Programming, OLP)。用户可通过该软件创建、仿真机器人程序,并直接生成适用于特定机械臂和控制器的代码,无需依赖真实机器人进行调试。
为了创建一个机器人程序,你需要选择并加载一个机器人和机器人工具,然后再使用一个或多个计算机辅助设计(CAD)软件插件添加目标,或者使用特定工具(如转换数控机床CNC程序到机器人程序)来创建程序。
RoboDK的在线资源库提供了大量工业机器人模型与工作站范例。工业机器人在RoboDK中建模的方式与供应商特定控制器的行为相同,包括轴极限,运动方向和轴连接。

本节将介绍如何在RoboDK图形操作界面(GUI)为你的机器人控制器创建、仿真并生成机器人程序。
Note:本节将介绍如何仅在软件界面创建机器人程序。RoboDK API可用于补充机器人程序或者可以完全通过API创建程序。更多信息详见RoboDK API章节。
离线编程是指脱离生产环境对机器人进行编程的技术。通过采用离线编程,可消除示教器现场编程导致的产线停机问题。
机器人工作单元的仿真与离线编程技术,能在实际搭建生产单元前对多种场景方案进行验证。由此可提前预判工作单元设计阶段常见的错误配置。
离线编程是实现机器人系统投资回报最大化的最佳途径,但需要配备专业的仿真工具。该技术能将新程序的调试周期从数周压缩至单日完成,从而助力短期生产项目的自动化改造。
仿真可通过在程序中添加一系列指令来实现。每条指令代表针对特定控制器的专用代码,而RoboDK提供的图形用户界面(GUI)能以通用方式轻松构建机器人程序,无需编写代码。
机器人控制器专用代码将在程序生成时自动创建,通过以下步骤可以在RoboDK软件界面创建一个新的程序:
1.选择程序➔
或者,选择工具栏上的相应按钮。
2.选择工具➔ 重新命名项目...(F2)重命名程序
Note:如果添加了指令但是工作站中没有可用程序,这时程序则会自动创建。
此操作将创建一个空程序,然后右键单击程序或者在程序菜单中选择一条指令添加。更多有关添加指令的信息请参考下一节程序指令。

Note:你也可以使用RoboDK API和其他编程语言(如Python,C#或Matlab)来仿真和编程。更多信息详见RoboDK API章节。
可以通过右键单击程序或从程序菜单中添加新的指令,如上一节所示。
Tip:选择特定指令,可在所选指令后添加新指令。
Tip:可以在程序内部或不同程序之间拖放指令,以重新排序。
本节介绍RoboDK图形用户界面支持的指令,用于机器人离线编程。
选择程序➔
如果在添加指令时没有选取目标点,该运动指令会自动创建新的目标点并与之关联。当目标点位置发生改变时,运动轨迹也会相应调整。
如果这是添加到该程序中的第一条指令,系统会在运动指令前自动插入两条额外指令:设置参考坐标系和设置工具坐标系。这将确保机器人执行到运动指令时,使用的参考坐标系和工具坐标系与创建该目标点时保持一致。
Note:右键单击运动指令并选择目标点选项… (F3)即可打开目标选项菜单。可从该窗口或直接于3D视图中修改该目标位置等信息。

选择程序➔
如果在添加指令时没有选取目标点,该运动指令会自动创建新的目标点并与之关联。当目标点位置发生改变时,运动轨迹也会相应调整。
关节运动和直线运动的移动方式一样,可以从一种类型切换到另一种类型。
与关节移动指令相同,如果这是添加到该程序中的第一条指令,系统会在运动指令前自动插入两条额外指令:设置参考坐标系和设置工具坐标系。
Important:建议将每个程序的第一条运动指令保持为使用关节目标的关节运动。这将确保机器人在此后的运动中使用正确的位姿配置,并确保真实机器人的移动方式与仿真相同。
与关节运动不同,线性运动对机器人奇异点和轴限位非常敏感。例如,六轴机器人无法以直线轨迹穿越奇异点。下图所示案例中,由于关节5过于接近奇异点(0度位置),导致运动失败。[...] 此时建议改用关节运动方案,如下图所示。

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

或者通过修改目标、TCP或参考坐标系的位置来避免奇点。
选择程序 ➔
参考坐标系是一个变量名称,在ABB机器人中被称为Work Object,在发那科(Fanuc)机器人中称为UFRAME,在安川(Motoman)机器人中称为FRAME,在库卡(KUKA)机器人中则称为$BASE。

Note:特定控制器(比如Fanuc和Motoman控制器)支持使用编号设置参考坐标系。这表示参考坐标系的名称可以用数字结尾(例如Frame 4代表第4个参考坐标系)。
选择程序➔
工具坐标系的变量名有ToolData (ABB机器人),UTOOL(Fanuc机器人), TOOL(Motoman机器人)或者$TOOL(针对KUKA机器人)。

Note:特定控制器(比如Fanuc和Motoman控制器)支持使用编号设置工具坐标系。这表示工具坐标系的名称可以用数字结尾(例如Tool 4代表第4个工具)。
选择程序➔
添加圆弧运动指令时需要选取两个目标点,否则该运动指令不会自动创建新的目标点。该指令需要分别关联两个目标点,如下图所示。

圆弧运动是从机器人所在的点出发,经过第一个环路点(目标点 1),并以终点(目标点 2)结束而形成的弧线。
Important:仅用一条圆弧运动指令不可能完成一个完整的圆周运动。一个完整的圆必须被分为两条独立的圆弧运动完成。
选择程序➔
根据情况,在程序中相应的位置设置速度或者加速度。机器人速度从执行该指令时开始生效。
也可在机器人参数菜单中更改机器人速度:双击机器人,然后选择参数。
Note:并非所有机器人控制器都支持精确设置加速度。
Important:设置正确的速度对准确计算程序时间(循环时间)非常重要。更多信息请参考循环时间。

选择程序➔

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

Note:将暂停延迟值设置为-1即可暂停程序,直到操作员希望恢复程序。该指令将自动被改名为停止。Important:当仿真时采用默认的速度比率 5时,则5秒钟的暂停需要1秒钟的模拟时间。更多信息请参考仿真部分。
选择程序➔
默认情况下,这是对特定程序的阻塞调用。也可以切换到插入代码模式,在该指令的位置插入一些代码。此功能可能对特定应用和特定控制器具有实用价值。
Tip:通过选择程序可自动填充该文本框。或者,直接键入子程序名同样有效。只要所输入文本匹配到子程序名称,该子程序将会被RoboDK仿真调用。
Tip:输入多行文本可自动连续调用多个程序。


从项目调用切换到启动线程,可触发对子程序的非阻塞调用。在这种情况下,控制器将启动一个新的线程。该选项仅适用于某些控制器,且仅对特定操作有效。
Tip:仅用于仿真目的时,主程序可利用启动线程选项同时启动多个子程序(例如同时模拟两个或多个机器人)。
选择程序➔
如果是命名变量,IO名称可以是数字或文本值。如果是命名状态,IO值可以是数字(0表示"假",1表示"真")或文本值。
Note: 该指令还支持在某些机器人控制器上设置模拟输出(AO)或等待模拟输入(AI)。在这种情况下,可以用十进制数字或特定文本代替数字。

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

Tip:如果机器人单元上有特定的硬件(如夹爪或铣削钻头),使用数字输出(DO)激活该硬件,然后等待特定的数字输入(DI)切换到特定状态,是一种标准做法。
更改仿真的数字输入和数字输出将创建新的工作站变量。要检查这些变量的状态,可以右键单击工作站并选择工作站参数。也可以通过API读取或修改这些变量。
选择程序➔
如果没有轨迹舍入,机器人在每条运动指令结束时速度都会将为 0(除非下一个运动与上一个运动相切)。这将引发机器人的高加速度和快速速度变化,以确保每次运动的准确性。
该值也被称为Blending radius(优傲UR机器人),ZoneData(ABB机器人),CNT/FINE(Fanuc机器人),Cornering(Mecademic机器人)或者$APO.CDIS/$APO.CPTP/Advance(KUKA机器人)。
Note:轨迹舍入精度设置为-1,可实现精细运动。这意味着机器人不会绕过路点边缘。

Tip:高舍入值可确保机器人路径上的速度恒定,以换取路径边缘上的精度损失。根据不同的应用,通常可以在精度和平稳速度之间找到一个很好的折衷方案。
有些控制器要求将该值设置为百分比,例如在发那科(Fanuc)控制器上,如果要提供CNT5命令,则应输入5。
如果你生成的程序用于机器人加工、3D打印或曲线/点追踪,还可以在程序事件窗口中指定舍入参数。

通过RoboDK的路径精准度测试,可以更好地了解不同舍入策略的效果。
选择程序➔
通过图形用户界面可以实现:
●机器人工具抓取或放置物体
●显示或者隐藏物体或者工具
●改变物体和参考坐标系的位置

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

Note:也可以使用宏(Macro)来模拟特定事件(需要编程经验)。例如,使用API可以使物体随机出现在特定位置,进行取放仿真。
Note:抓取物体时,在距离设置内最近的物体将会被附着到工具上。默认距离为200毫米并可在以下页面更改:工具➔选项➔工作站➔将物体固定到机器人工具上的最大距离(mm)。默认情况下,系统会检测从TCP位置到物体参考点的距离,你也可以勾选检查TCP和物体形状之间的最短距离,使其检测TCP与物体之间的最短距离。
双击程序
1.右键单击程序
2.选择运行
如果双击程序,底部会出现一个仿真进度条。可以滑动该进度条,使仿真向前或向后移动。

Tip:点击菜单栏的:程序➔
RoboDK默认以5倍于实时速度进行模拟。这意味着,如果一个程序实际执行需要30秒,模拟过程仅需30/5=6秒即可完成。加速模拟功能可将该比例提升至100倍。常规与快速模拟速度的调整路径为:工具➔选项➔运动选项卡。
Tip:选择程序➔
Tip:选择 Esc 键停止模拟或再次双击程序。
Tip:双击每条指令,逐一执行。
Tip:右键点击某条移动指令并选择“从这里开始”,即可从该指令恢复程序执行,如下图所示。

当程序准备就绪可导出至机器人时,即可生成机器人控制器所需的程序文件。
请按照以下步骤生成机器人程序:
1.右键单击你的程序。
2.接着选择生成机器人程序 (F6)。
然后,你就会看到文本编辑器中显示的机器人程序。
Note:当选择一个或多个程序时,你也可通过菜单栏:程序➔生成程序(F6),可以生成一个或多个机器人程序。
Tip:按住Ctrl键,即可同时选择多个程序,并一次全部生成。

机器人程序默认保存在“文档”文件夹中(路径: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,就可以查看机器人是否存在于局域网中。

提供网络设置并连接上机器人后,请按照以下步骤将程序直接从RoboDK传输到机器人:
1.右键单击程序。
2.选择发送程序到机器人(Ctrl+F6)。
接着,弹出的窗口会告诉你是否传送成功。
Note:程序也可以通过U盘或者其他媒体传送到机器人。“机器人提示Robot Tips”区域(品牌特定部分)为一些支持的机器人品牌提供了更多信息。
Note:启动机器人和程序这一动作仅适用于一些特定的机器人控制器。
Important:“连接”按钮仅在使用机器人驱动程序时有用。这样就可以在不连接机器人驱动器的情况下实现程序传输。机器人驱动程序允许在RoboDK上逐点移动机器人并以这种简单的方式调试程序(“在机器人上运行”选项)。机器人驱动程序还允许直接通过API移动机器人。
Tip: 使用 FileZilla 等 FTP 客户端可以更好地浏览机器人控制器的内容,并检索程序的远程 FTP 路径。大多数机器人控制器都支持 FTP 传输。
在RoboDK上仿真到特定机器人程序的转换都是由后处理器完成。后置处理器定义了如何为机器人生成机器人程序。每个机器人在RoboDK上都有一个特定/默认的后置处理器。
如何为机器人选择后置处理器:
1.右键单击机器人或者程序。
2.选择:选择后处理器程序。
3.在列表里选择后置处理器的名字。
4.最后点击确认。


当选择好后处理器后,你可以再生成一遍程序查看变化。
Note:后处理器需要连接指定的机器人。所以每当更改一个程序的后处理器时,就会同时更改同一机器人下所有程序的后处理器。
RoboDK中的后处理器提供了非常完全的灵活性,它可以根据特定要求生成机器人程序。 RoboDK为大多数机器人品牌提供后处理器。你可以轻松创建或更改后处理器。有关后处理器的更多信息,可以参考后处理器章节。
你可以自定义为机器人生成程序的方式。
按照以下步骤查看生成程序的设置:
1.在工具栏选择:工具➔ 选项。
2.选择:程序选项卡。

以下包含了生成自定义程序的内容
1.将关节动作分割成更小的步骤。
2.将直线运动拆分成更小的步骤。
3.将圆弧运动转换为小的线性运动。
4.将大型机器人程序拆分为子程序。
5.指定机器人程序的默认保存位置。
6.为机器人程序指定默认文本编辑器。。
Tip:为机器人程序指定默认文本编辑器。
在为机器人生成程序时,你可以将圆弧运动轻松转换为小幅直线运动。这在控制器不支持圆弧插补功能时非常实用。
如何将圆弧运动生成直线运动:
1.选择:工具➔ 选项。
1.选择:程序选项卡。
2.选择:避免弧线。
3.调整最大圆弧尺寸(mm),它定义沿弧线的线性移动距离。

Note:RoboDK 不会生成小于此窗口中定义的最小步长(mm)的线性运动。因此,如果最小步长(mm)公差大于最大圆弧尺寸(mm)公差,则沿圆弧的线性运动将更大。
执行长程序可能会超出机器人控制器的限制。控制器一般会限制文件大小或者每个程序的代码行数。例如,用于3D打印或机器人加工的程序代码通常会超过一百万行。这时最好将较长的程序拆分为较小的子程序,包括将一个主程序拆分为几个按顺序运行的子程序。
如何自动拆分一个长程序:
1.选择:工具➔ 选项➔ 程序选项卡。
2.选中:每个程序的最大行数,并填入每个文件生成程序的最大行数。
Tip:大多数后处理器对每个程序的最大行数设有默认限制(变量名为MAX_LINES_X_PROG),可通过此步骤修改或覆盖该限制。

当生成调用子程序的程序时,RoboDK会自动创建调用该子程序的指令。另一方面,也可以自定义程序输出,将子程序直接内联在主程序中,避免使用程序调用。
Note: 部分后处理器会默认将子程序包含在主程序文件中(例如默认的ABB后处理器),而其他后处理器则不会包含子程序,因为这些子程序通常在机器人控制器中是独立文件(例如默认的发那科(Fanuc)后处理器)。
Tip:若控制器需要使用编号程序而非命名程序,此功能会非常实用。
请按照以下步骤内联子程序,以避免调用脱机程序:
1.选择:工具➔ 选项。
2.选择:程序选项卡。
3.勾选内联子程序选项。
从现在开始,当你生成包含子程序的程序时,你将直接在第一个/主程序中获取这些子程序的内容。

后处理器与机器人驱动程序采用不同的方式控制机器人运动。后处理器支持离线生成程序,而驱动程序则能实现与机器人的实时通信。
后处理器用于离线编程,其作用是将RoboDK机器人程序转换为对应机器人控制器的原生编程语言。例如,ABB后处理器会生成适用于IRC5控制器的.mod文件。后处理器还包含通过FTP等方式将程序上传至机器人控制器的功能。程序中的以下功能均由后处理器处理:
1.生成机器人程序
2.生成机器人程序作为...
3.发送程序到机器人
4.启动机器人(与驱动器结合使用)

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

Note:机器人驱动器会逐条发送指令并等待控制器完成操作。对于运动指令而言,这意味着会出现微小延迟(会有明显顿挫)。
Tip:在大多数情况下,离线编程是控制机器人的最佳方式,因为所有运动指令都预先被机器人控制器知晓(预读),使其能够充分利用运动和速度优化功能,例如路径圆滑处理。
Tip:可采用后处理器与驱动器的混合方案,将复杂路径上传至控制器后通过驱动器远程调用。这种方式在使用RoboDK API时尤为高效。