机器人程序

RoboDK是一个专注于工业机器人应用的仿真软件。用户可以离线对机器人臂和机器人控制器创建、仿真并生成机器人程序。换句话说,RoboDK是一个支持离线编程的软件。

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

RoboDKlibrary 可以帮助你拓展工业机器人。工业机器人在RoboDK中建模的方式与供应商特定控制器的行为相同,包括轴极限,运动方向和轴连接。

Robot Programs - 图片 1

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

注意:本节将介绍如何仅使用图形操作界面(GUI)创建机器人程序。RoboDK API可用于补充机器人程序或者可以完全通过API创建程序。更多相关信息请访问RoboDK API部分。

离线编程

离线编程意味着你要在生产环境之外编程和仿真机器人。离线编程消除了由车间编程(使用示教器)导致的生产停机时间。仿真和离线编程允许在设置生产工作单元之前研究工作单元的多个场景。这样你就可以及时预测工作单元时常犯的错误。

离线编程可以最大程度的优化机器人系统的投资回报成本,与此同时,它非常需要合适的仿真工具。离线编程可以使得新作业的生产周期从几周缩短到一天,从而实现短期生产过程的机器人化。

新建程序

通常情况下,你需要在程序中添加指令来完成仿真,其中每条指令代表机器人控制器的特定代码。但是你可以在RoboDK的图形操作界面(GUI)上以非常通用的方式轻松构建机器人程序而无需编写代码。每当生成程序时,你的机器人控制器代码也会自动生成。

通过以下步骤可以在RoboDK图形操作界面创建一个新的程序:

1.选择“程序ProgramRobot Programs - 图片 2 添加程序Add Program
或者在工具栏中选择相应按钮

2.选择工具Tools重命名事件Rename item… (F2)来重命名程序

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

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

Robot Programs - 图片 3

注意也可以使用RoboDK API其他编程语言PythonCMatlab来仿真编程。更多相关信息请参考RoboDK API部分。

程序指令

右键单击程序program或者从工具栏菜单Program menu中添加新指令如上一节所示。

提示你只能在所选指令后添加新指令。

提示你可以在程序内或不同程序之间拖拽指令对其重新排序。

本节将介绍如何在RoboDK图形操作界面上运用机器人离线编程。

关节运动

选择“程序ProgramRobot Programs - 图片 4关节运动指令Move Joint Instruction即可添加关节运动指令。你也可以在工具栏中选择相应按钮。

如果在添加指令时没有选中一个机器人目标,运动指令将会创建一个新目标点并关联运动与该目标。如果该目标点被移动了,运动指令也随之改变。

当程序添加第一条指令后,在该指令运行前将会添加两条指令:“参考坐标系选项Reference Frame selection”和“工具坐标系选项Tool Frame selection”。这会保证当程序运行到该运动指令时,机器人会使用相同的参考坐标系和工具坐标系来创建新目标。

注意:右键单击运动指令,然后选择“目标选项Target options… (F3)就可以打开目标选项菜单。你可以在这个窗口直接更改数据,或者直接在3D视图中修改目标信息。

Robot Programs - 图片 5

线性运动

选择程序ProgramRobot Programs - 图片 6直线运动指令 Move Linear Instruction即可添加一个直线运动指令。你也可以在工具栏中选择相应按钮。

如果你没有在添加指令之前选择一个目标运动指令将会创建一个新目标并使其连接。如果该目标被移动了运动指令也随之改变。

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

直线运动指令与关节运动指令操作相同的是,当程序添加第一条指令后,在该指令运行前程序将会添加两条指令:“参考坐标系选项Reference Frame selection”和“工具坐标系选项Tool Frame selection

重要提示:我们建议使用关节目标与关节运动设置每个程序的第一条运动指令。这样能从第一条指令开始确保机器人使用正确的位姿,并保证真实机器人的移动方式与仿真相同。

不同与关节运动的是,机器人对直线运动的奇点和轴限制非常敏感。例如,六轴机器人在直线运动后不能越过奇点。下图的示例表示“关节5太靠近奇点(0度)。 [...]正考虑关节运动来替代Joint 5 is too close to a singularity (0 degrees). […] Consider a Joint move instead”。如下图所示:

Robot Programs - 图片 7

如果不是非常必要的直线移动,你可以右键单击移动指令将其改为关节指令。

Robot Programs - 图片 8

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

设置参考坐标系

选择“程序Program Robot Programs - 图片 9 设置参考坐标系指令Set Reference Frame Instruction即可设置参考坐标系。这个指令会为接下来的运动指令更新控制器上的当前参考坐标系,并在RoboDK仿真中改变参考坐标系。对于特定目标(笛卡尔目标),运动指令会随着最新的参考坐标系变化。

参考坐标系的变量名有Work Object (ABB机器人)UFRAMEFanuc机器人),FRAME(针对Motoman机器人)或者$BASE(针对KUKA机器人)。

Robot Programs - 图片 10

注意一些控制器比如FanucMotoman控制器支持用编号设置参考坐标系。这表示参考坐标系的名字可以用数字结尾例如Frame 4代表第4个参考坐标系

设置工具坐标系

选择程序ProgramRobot Programs - 图片 11 设置工具坐标指令Set Tool Frame Instruction即可设置工具坐标系TCP

这个指令会为接下来的运动指令更新当前工具坐标系并在RoboDK仿真中改变工具坐标系。这意味着对于特定机器人目标笛卡尔目标的运动指令会随着最新的工具坐标系变化。

参考坐标系的变量名有ToolData (ABB机器人)UTOOLFanuc机器人, TOOL针对Motoman机器人或者$TOOL针对KUKA机器人

Robot Programs - 图片 12

注意:一些控制器(比如FanucMotoman控制器)支持用编号设置工具坐标系。这表示工具坐标系的名字可以用数字结尾(例如Tool 4 代表第4个工具)。

圆弧运动

选择“程序ProgramRobot Programs - 图片 13 圆弧运动指令Move Circular Instruction即可添加圆弧运动指令。你也可以在工具栏中选择相应按钮。

除非你在添加这个指令前已经有了两个目标点,则该运动指令将不会创建新的目标点。你可以在圆弧运动中添加两个或者更多的目标点,并将它们连接,如下图所示。

Robot Programs - 图片 14

圆弧运动会在机器人所在点开始创建的一条曲线,紧接着运动会穿过第一个循环点(Target Linked 1),最后在目标连接点2处(Target Linked 2)结束循环。

重要提示:只通过一个圆弧指令就完成一整条曲线是不太可能的。因为一条完整的曲线必然会分割成两个曲线运动。

设置速度

选择“程序ProgramRobot Programs - 图片 15 设置速度指令Set Speed Instruction即可添加速度和加速度指令,这个指令可以改变速度和加速度。你也可以在笛卡尔空间和关节空间处设定速度和加速度。

在程序中相应的位置设置速度或者加速度。当执行该指令时,机器人会应用设定好的速度。

你也可以在机器人参数菜单里更改机器人运动速度:双击你的机器人,然后选择参数。

注意:并不是所有机器人控制器都支持设置准确的加速度。

重要提示:设置合适的速度会对精准计算程序执行时间影响很大。更多信息请参考cycle time section

Robot Programs - 图片 16

显示信息

选择程序ProgramRobot Programs - 图片 17 显示信息指令Show Message Instruction”,这个指令可以帮助你在示教器上显示提醒信息。

Robot Programs - 图片 18

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

暂停

选择“程序ProgramRobot Programs - 图片 19 暂停指令Pause Instruction,这个指令将会在指定时间内暂停程序,或者停止程序直到操作器想要恢复它。

Robot Programs - 图片 20

注意:将暂停延迟值设置为-1即可暂停,直到操作员希望恢复程序。这时该指令将自动命名为Stop

重要提示:在仿真时,一次5秒的暂停会花1秒的时间去仿真。更多相关信息请访问Simulation section

程序调用

选择“程序ProgramRobot Programs - 图片 21 添加函数调用/插入代码指令Program Call Instruction即可在当前程序下的子程序里添加一个程序调用指令。

默认情况下,这是一个阻塞(blocking)调用。然而,你也可以使用“插入代码Insert Code,在指令的位置插入代码。这对一些个别应用软件和控制器帮助很大。

提示:选择“选择程序Select program即可自动填充该文字框。另外,文本匹配同样可以做到自动填充该文字框。当你在指令下的子程序里匹配到一个名字,这个子程序将会在RoboDK中仿真。

提示:可以输入多行指令自动连续调用多个子程序。

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

当你从程序调用Program Call切换到开始线程Start Thread这时子程序将会唤起一个非块调用机器人控制器也会开始一个新的线程。然而这个选项只适用于一些指定的控制器和操作内容。

提示:如果你的主程序是以仿真为目的,你或许可以尝试切换到“开始线程Start Thread”选项,这样你就可以在同一时间执行多个仿真程序(例如当两个及以上机器人在执行仿真时)

设置/等侯IO

选择“程序ProgramRobot Programs - 图片 24 添加信号输出/等待信号指令Set or Wait I/O Instruction即可修改数字输出(Digital Outputs)的状态。这个指令的默认值为“设置数字输出(Set Digital Output)”。然而这个指令允许等待特定的“数字输入(Digital Input)”来转换到特定的状态。

如果你想把“IO 名字(IO Name)”作为命名变量,我们建议你对IO的名字进行编码或者用字符替代。“IO值(IO Value)”可以用数字(0代表错误1代表正确)或者字符来表示状态。

注意:这个指令同样也支持在一些机器人控制器上设置“模拟输出(Analog Outputs)”或者等待“模拟输入(Analog Inputs)”。这时你可以用十进制数字或者特殊字符命名而不仅仅只用数字。

Robot Programs - 图片 25

当选择等待数字输入Wait for Digital Input)”,程序便会在输入数值变化到指定数值时停止。还有,如果等待时间超过了指定数值,这时大多数控制器会报错,原因是超时延迟。这时你可以去激活“超时Timeoutms)”功能。

Robot Programs - 图片 26

提示这里有个很好的例子如果机器人的元件上有一些特别硬件例如工具gripper或者铣削主轴),你可以用数字输出Digital Output)”激活这些硬件然后等待数字输入Digital Input)”来转换状态。

更改仿真数字输入Digital Inputs)”数字输出Digital Outputs)”将会创建一个新的站变量。如果想要查看这些变量的状态你可以右键单击这个站即可查看站参数Station Parameters)”。你也可以通过API读写这些变量。

设置轨迹精度

选择“程序ProgramRobot Programs - 图片 27 设置轨迹精度Set Rounding Instruction即可修改轨迹精准度。这个轨迹精度可以用来顺滑两个连续运动的间隙。当程序执行这个指令时,轨迹精度便开始做影响(这个过程和其他指令相似),所以在程序开始前设置轨迹精度是非常必要的。

如果没有轨迹精度指令,当每次机器人运动最后,机器人速度将会降到0(除非下一个动作与前一个动作相切)。这将引起高加速度和快速变速,以确保每个运动的最佳精度。

该值也被称为Blending radiusUniversal 机器人),ZoneDataABB机器人),CNT / FINEFanuc机器人),CorneringMecademic机器人)或者$ APO.CDIS / $ APO.CPTP / AdvanceKUKA机器人)。

注意:设置“轨迹精度Rounding value”为-1即可唤起运动。这样的话机器人就不会绕着路径边缘做运动。

Robot Programs - 图片 28

提示:较高的轨迹精度确保机器人在通过作业路径时保持较为连贯的速度,但这是以失去精准度为代价的。根据不同的应用,通常是可以在准确度和平稳速度之间找到一个好的折衷方案。

RoboDK 路径测量系统里的“路径精准度path accuracy测试或许会让你对不同轨迹精度的作用有一个更好的理解。

仿真事件

选择“程序ProgramRobot Programs - 图片 29 仿真事件指令Simulation Event Instruction即可唤醒一个仿真事件。仿真事件的作用不在于生成代码,而是为了唤起一些以仿真为目的的事件。

在图形操作界面进行仿真事件可以实现:

    机器人抓取或放置工件

    展示或者隐藏对象或者工具

    改变对象的位置和参考坐标系

Robot Programs - 图片 30

举例来说,如果我们想要机器人运动到指定位置抓取工件,此时可以创建“抓取工件Attach object事件,此时机器人便会和该工件一起移动。机器人抓取工件且已经准备好离开时,我们可以创建“放置工件Detach object事件,此时机器人将会放置已经抓住的工件。

Robot Programs - 图片 31

注意:一些特殊事件也可以通过宏(需要编程经验)进行仿真。例如,通过使用API接口,机器人就会在特定位置随机出现的运动工件进行取和放的仿真。

注意:当将物体附加到工具时,工具会选中最近的物体(只要物体对于工具不超过一个预设距离)。默认距离是200mm并可以在此更改:“工具Tools 选项Options 对象连接至机器人工具的最大距离Maximum distance to attach an object to a robot tool”。另外,在默认情况下,该距离为TCP点到物体参考坐标系原点的距离。你也可以使用“TCP到物体的最短距离Check shortest distance between TCP and the object shape”。

仿真程序

双击菜单栏的“程序program Robot Programs - 图片 32”,启动仿真程序。或者你可以这样做:

1.右击“程序program”。

2.选择“运行Run”。

双击“程序”后,仿真栏就会出现在界面底部。你可以向前或向后滑动仿真栏

Robot Programs - 图片 33

提示:选择“程序ProgramRobot Programs - 图片 34快速仿真 Fast simulation即可加快仿真速度(或者按住空格键)。这个选项在工具栏也能找到。

RoboDK默认的仿真速度比实际应用场景下的速度快5倍。如果一个程序需要30秒的执行时间,仿真时时间将会缩短到30/5=6秒。加速仿真可以将比率提高到100。你可以在“Tools工具选项Options 动作菜单Motion menu”中修改正常和快速仿真速度。

提示:选择“程序ProgramRobot Programs - 图片 35 暂停Pause即可暂停仿真程序(或者用空格键)。

提示:按下退出键Esc或者再双击程序就可以停止仿真程序。

提示:逐一双击每条指令就可以按点击顺序执行。

提示:右键单击运动指令,然后选择“从这里开始Start from here”就可以从这个指令开始重新执行程序,如下图所示。

Robot Programs - 图片 36

生成程序

你需要通过机器人控制器(供应商特定的机器人控制器)生成机器人程序:

1.选择“程序Program

2.选择“程序Program生成程序Generate Program(s)F6

或者你可以右键单击“程序program”,然后选择“生成机器人程序Generate robot program (F6)

Robot Programs - 图片 37

你可以同时执行多个程序,即按住Ctrl键的同时选择多个程序。选择“生成程序Generate Program(s)… (Shift+F6)选项便会打开一个窗口,此时你需要提供存储程序文件的位置。

传输程序

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

1.右键单击机器人。

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

3.输入机器人IP

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

提示:选择“Ping”就可以查看机器人是否存在于局域网中。

Robot Programs - 图片 38

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

1.右键点击“程序program”。

2.选择“发送程序到机器人Send program to robot (Ctrl+F6)”。

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

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

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

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

选择后置处理器

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

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

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

2.选择“选择后置处理器Select Post Processor

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

4.选择OK

Robot Programs - 图片 39    Robot Programs - 图片 40

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

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

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

拆分长程序

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

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

1.选择“工具Tools选项Options程序Program”。

2.确定“每个程序的最大行数限制Limit the maximum number of lines per program,然后填入你认为的每个程序所需的最大行数,最后生成相应文件。

提示:某些后置处理器内置了每个程序最大行数限制,可以通过此设置(MAX_LINES_X_PROG变量)修改或覆盖。

Robot Programs - 图片 41