后处理器

后处理器是离线编程的关键步骤,因为它可以为特定的机器人控制器生成机器人程序。机器人编程必须遵循供应商特定的编程规则,这些规则在后处理器中实现。机器人后处理器定义了必须如何为特定的机器人控制器生成机器人程序。

从 RoboDK 仿真到特定机器人程序的转换是由后处理器完成的。每个机器人都与后处理器相连,后处理器将定义特定的机器人程序样式。后处理器用于离线生成程序,如 "生成程序 "部分所示(右击程序,然后选择 "生成机器人程序")。

RoboDK 包含许多后处理器,支持 50 多种不同的机器人制造商和控制器。支持的控制器列于可用后处理器部分。此外,还可以创建自定义后处理器或修改现有后处理器。所有可用的后处理器都在文件夹中:C:/RoboDK/Posts/ 文件夹中。

一个后处理器就是一个PY文件(每个后处理器都由一个 Python 脚本定义)。可以手动添加、修改或删除 RoboDK Posts 文件夹中的文件。如果您已获得 RoboDK 后处理器(PY 文件),则应将其放在 Posts 文件夹中,以便从 RoboDK 中选择。

本节介绍如何选择、编辑或创建后处理器,并将其用于 RoboDK 中的机器人。以下视频提供了快速介绍: https://www.robodk.com/help#PostProcessor

注:大多数机器人品牌都有不同的控制器版本。必须选择正确的后处理器,以生成特定机器人控制器所支持的适当机器人程序。

重要: 每个机器人默认都有一个特定的后处理器。默认选择可能无法为您的机器人控制器生成合适的程序。在这种情况下,您可能需要选择不同的后处理器,以使程序在您的机器人控制器上运行。

选择后处理器

您可以通过右键单击机器人或程序,轻松选择后处理器。后处理器的选择是分配给机器人的,因此,更改分配给程序的后处理器将更新分配给同一机器人的所有程序所使用的后处理器。

为机器人选择后处理器:

1.右击机器人或程序

2.选择 选择后处理器

3.从列表中选择后处理器

4.选择确定。

Post Processors - 图片 1   Post Processors - 图片 2

现在更改已应用,可以再次生成程序查看结果。

注: 后处理器的选择与特定机器人相关联。更改程序的后处理器将更新链接到同一机器人的所有程序的后处理器。

另外,也可以通过以下步骤选择后处理器:

1.打开机器人面板(双击机器人)

2.选择参数

3.在机器人品牌箱中选择您的后处理器,如下图所示。

提示:双击 C:/RoboDK/Posts/ 文件夹中的PY文件,可以快速预览每个后处理器的输出。更多信息请参阅下一节。

后处理器 编辑器

您可以使用图形用户界面轻松修改后处理器设置。通过后处理器编辑器,您可以修改后处理器中针对机器人控制器定义的变量。

后处理器编辑器是一个有助于自定义后处理器的插件。您可以从以下页面轻松下载并安装该插件:https://robodk.com/addin/com.robodk.plugin.postprocessoreditor。

按照以下步骤打开后处理器编辑器:

1.选择程序 后处理器编辑器。

2.选择要自定义的后处理器。

3.选择 "确定"。这时会打开一个新窗口,你会看到可以修改的变量。

4.选择将后处理器另存为...

5.输入名称保存。

重要提示:不要覆盖默认的后处理器。相反,您可以在创建自己的后处理器时使用自己的唯一名称。如果您重新安装 RoboDK,默认后处理器将被设置回默认值。

Post Processors - 图片 3  Post Processors - 图片 4

例如,如果您选择发那科(Fanuc)R30iA 后处理器,就会看到上图所示的窗口。

修改后处理器

您可以修改 RoboDK 中现有的后处理器,自定义机器人程序的输出,也可以创建新的后处理器。大多数后处理器无需编辑,只需更改配置标志即可获得所需的程序输出。

请确保您拥有后处理器的源代码,以便对其进行编辑。如果您要编辑的后处理器不可编辑(已编译),请联系我们。

后处理器必须放在 C:/RoboDK/Posts/ 文件夹中,以便从 RoboDK 中选择。上一节介绍了如何将特定机器人链接到后处理器。

每个后处理器都是一个PY文件。可以重命名文件或从/向 C:/RoboDK/Posts/ 文件夹复制文件,以共享不同的后处理器。要删除现有的后处理器脚本,只需删除 Posts 文件夹中相应的PY 文件即可。

后处理器可以使用任何文本编辑器或 Python 编辑器(Python IDLE)进行编辑。使用 Python 编辑器可以快速调试和评估文件末尾的示例程序。

视频:后处理器概述:https://www.youtube.com/watch?v=lbycCDjtOnE。

要正确测试和使用后处理器,应安装 Python(RoboDK 默认安装 Python)。

请按照以下步骤修改现有的后处理器:

1.选择程序➔ 添加/编辑后处理器

2.选择现有后处理器

3.选择 "确定"。将打开文本编辑器和程序。

4.选择转到➔ 调试 (F5) 以预览结果。如有必要,请进行修改。根据您使用的文本编辑器,您可能需要选择运行➔ 运行模块 (F5)

Post Processors - 图片 5

另外,也可以手动编辑后处理器:

1.转到后处理器文件夹:C:/RoboDK/Posts/

2.用 Python IDLE(右键➔ Edit with IDLE)或其他文本编辑器打开PY文件。

3.进行所需的更改。

4.运行文件以测试结果:从 Python IDLE 中选择运行➔ 运行模块(默认为 F5)。

或者,也可以使用文本编辑器编辑该文件,并通过双击该文件用 Python 运行。

Post Processors - 图片 6

提示:通过选择工具➔ 选项➔ 其他,并在 Python 编辑器命令中提供编辑器路径,可以更换 RoboDK 后处理器的默认编辑器。

重要提示:不要覆盖默认的后处理器。相反,您可以在创建自己的后处理器时使用自己的唯一名称。如果您重新安装 RoboDK,默认后处理器将被设置回默认值。

重要:如果您使用 Notepad++ 等文本编辑器和 Python 3.6 或更早版本,请务必将制表符替换为 4 个空格。否则,您将看到 TabError,提示缩进中制表符和空格的使用不一致。

修改示例

本节将向您介绍如何对现有的后处理器进行小幅修改。大多数后处理器都有一些变量,可以轻松修改,以更改或激活特定供应商的机器人程序功能。

举例来说,现有的库卡(Kuka)和 ABB 后处理器将做如下改动:

将程序及其子程序作为一个文件生成,并强制规定每个程序最多只能有 3000 行代码。大型程序将被分割成更小的程序,并按顺序调用。

设置关节运动,利用关节角度信息生成运动指令。

将最高速度设为 500 mm/s。即使机器人被编程为移动速度更快,在后处理器中速度也将被限制在 500 mm/s。

下文将介绍如何在文本编辑器上进行建议的更改。

在一个文件中生成所有程序

本示例将向您展示如何更改库卡(Kuka)KRC4 后处理器的默认行为,在同一文件中生成主程序及其子程序。

确保已启用后处理器编辑器插件,并按照以下步骤对后处理器进行修改:

1.选择程序 后处理器编辑器。

2.选择要自定义的后处理器(库卡(Kuka) KRC4)。

3.选择 "确定"。这时会打开一个新窗口,你会看到可以修改的变量,如下图所示。

4.将 "包含子程序 "变量设置为 "True",而不是 "False"。

5.选择将后处理器另存为...

6.输入新名称保存(默认名称使用修改日期)。

Post Processors - 图片 7

现在,您应该在 RoboDK 的 Posts 文件夹中找到一个新的后处理器。现在,您可以按照以下步骤更新您的项目,以使用这个新的后处理器:

1.右键点击机器人。

2.选择"选择后处理器"。

3.选择您创建的新后处理器。

4.再次生成程序,查看结果。

您也可以使用文本编辑器进行这些更改。按照以下步骤更改后处理器的默认 Python 代码:

1.选择程序 添加/编辑后处理器

2.选择您的后处理器。例如,对于库卡(Kuka)KRC4,请选择 KUKA_KRC4

3.选择 "确定"。后处理器将显示在文本编辑器中。

4.将变量MAX_LINES_X_PROG 设置为 3000。

5.将变量INCLUDE_SUB_PROGRAMS 设为True。

Post Processors - 图片 8

注意: 如果在 RoboDK 程序选项菜单中指定了每个程序的最大行数,则 MAX_LINES_X_PROG 变量可能会被覆盖。您也可以修改后处理器的 __init__ 部分,以避免从 RoboDK 设置中更改此变量。

强制限速

本示例将向您展示在使用 RoboDK 生成程序时,如何将速度限制为 500 mm/s,并避免使用更高的速度。

在本示例中,我们假设使用的是库卡(Kuka)KRC2 或 KRC4 控制器:

1.选择程序 添加/编辑后处理器

2.选择您的后处理器。例如,对于库卡(Kuka)KRC4,请选择 KUKA_KRC4

3.选择 "确定"。后处理器将显示在文本编辑器中。

4.查找setSpeed 函数定义(def setSpeed)

5.添加以下插件,使最高速度达到 500 mm/s。这一行需要在生成 $VEL.CP 输出之前添加,输出将以 m/s 为单位改变速度: 
speed_mms = min(speed_mms, 500)

Post Processors - 图片 9

注:在后处理器顶部的 HEADER 变量中定义了 200 mm/s 的默认速度($VEL.CP=0.2)。如果不从 RoboDK 修改速度,也可以更改此默认速度。

注:如果您没有后处理器的源代码,您仍然可以添加您的自定义函数来覆盖默认行为。

自定义坐标系过滤器

本节介绍如何自定义设置现有后处理器的参考坐标系。例如,为库卡(Kuka)机器人设置自定义参考坐标系。

您可以使用编译后的后处理器,只需轻松重新实现必要的函数(例如setFrame setTool 或 setSpeed)。

注意:请确保您自定义的后处理器名称与您正在使用的参考后处理器名称不同。当您更新 RoboDK 时,安装程序将覆盖默认的后处理器,恢复到原始版本。但是,安装程序不会删除或更改 Posts 文件夹中的自定义后处理器。

在本例中,我们假设要自定义库卡(Kuka)控制器的基准定义方式。例如,如果想在设置参考坐标系时输出以下一行:

base_data[8] = {frame:x:2000, y:0, z:0, a:0, b:0, c:0}

BAS (#BASE,8)

您只需在 C:/RoboDK/Posts/ 文件夹中创建一个名为 KUKA_Custom_Post.py 的新文件,其中包含以下几行内容:使用默认的 KUKA_KRC2 后处理器并覆盖参考坐标系设置(setFrame 函数):

from KUKA_KRC2 import RobotPost as MainPost

class RobotPost(MainPost): 

def setFrame(self、位姿、frame_id、frame_name):

""更改机器人参考坐标系"""

self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))     

self.addline('BAS (#BASE,8)')

不过,我们可以根据某些标准添加自定义插件,在使用默认行为和使用自定义实现之间进行筛选。这样,后处理器文件就可以修改如下:

from KUKA_KRC2 import RobotPost as MainPost

class RobotPost(MainPost): 

def setFrame(self、位姿、frame_id、frame_name):

""更改机器人参考坐标系"""

if frame_name == "Frame 4":# 在此输入任何条件

# 触发对默认方法的调用(与不重写函数相同)

super(MainPost, self).setFrame(pose, frame_id, frame_name)

返回

           

# 实现自定义 setFrame

self.addline('; ---- 设置引用:%s ----' % frame_name)

self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))     

self.addline('BAS (#BASE,8)')

        self.addline('; --------------------------')

当您为库卡(Kuka)KRC 控制器生成程序时,有许多方法可以设置坐标系或参考坐标系。下面的 setFrame 定义展示了具有不同选项的另一种实现方式:

def setFrame(self、位姿、frame_id、frame_name):

""更改机器人参考坐标系"""

self.addline('; ---- 设置引用:%s ----' % frame_name)

           

# 选项 1:根据 MACHINE_DEF 数组和提供的偏移量建立运动学模型

#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose)))   

 

# 选项 2:根据 EX_AX_DATA 数组和提供的偏移量建立运动学模型

#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' %self.pose_2_str(pose)))

       

# 选项 3:根据 EX_AX_DATA 数组和预定义偏移建立运动学模型

#self.addline('; 使用外轴')

#self.addline('; $BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN,EX_AX_DATA[1].OFFSET)')

#self.addline('; $ACT_EX_AX= %i' % (self.nAxes - 6))

       

# 选项 4:使用 BAS.src 文件中的 BAS(#ex_BASE) 初始函数

#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))     

#self.addline('BAS(#ex_BASE,%i)' %self.BASE_ID)

       

# 选项 5:使用 BAS.src 文件中的 BAS(#BASE) 初始函数

self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))     

self.addline('BAS (#BASE,%i)' % self.BASE_ID)

       

# 选项 6:直接从 BASE_DATA 数组中获取基数(通常是 BAS(#BASE) 所做的工作)

# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)

    

        self.addline('; --------------------------')

使用关节角度施加运动

本节将向您展示如何修改现有的后处理器,以便使用关节值而不是笛卡尔值强制进行轴向运动。

在本示例中,我们将对 ABB IRC5 机器人控制器进行这一更改。

1.查找机器人控制器的程序手册。在本例中,我们使用的是ABB IRC5 RAPID 编程程序手册。

2.查找关节移动指令。在本例中,ABB 的绝对关节移动指令称为MoveAbsJ。该指令需要一个定义关节轴的jointtarget 变量。

Post Processors - 图片 10

3.选择程序➔ 添加/编辑后处理器,然后选择当前使用的后处理器进行修改。如果您当前使用的是可定制的后处理器,则会默认选择该处理器。

4.您应该在后处理器中查找MoveJ 函数。该函数定义了后处理器生成关节运动指令的方式。另外,RoboDK 使用MoveL 来实现线性运动。使用 Python 编程语言,修改程序文件中添加的提供关节角度信息的行如下图所示。

Post Processors - 图片 11

5.最后,您可能需要修改后处理器将关节角度或位姿转换为字符串的方式。函数angles_2_str pose_2_str 分别定义了如何将关节角度和位姿转换为文本。

Post Processors - 图片 12

大多数 RoboDK 后处理器在关节运动中使用关节数据,在线性运动中使用笛卡尔坐标。建议始终将线性运动序列中的第一个点作为关节运动开始,并指定关节坐标。这样可以避免以错误的机器人配置启动程序,从而达到奇异点或轴限制。

:所有 RoboDK 后处理器默认使用 robodk.py 模块。该模块包含有用的工具,可将许多机器人控制器的位姿转换为欧拉角。请使用与您的机器人控制器相对应的符号。更多信息,请参阅参考坐标系部分和 robodk.py 模块。

:多个机器人制造商可以使用相同的欧拉角符号。例如,发那科(Fanuc)和安川(Motoman)都使用相同的 X Yàà Z 符号,史陶比尔(Stäubli)和麦卡德米克(Mecademic)使用相同的 X➔ Y'➔ Z'' 符号,等等。

重要:如果使用位姿(例如,使用笛卡尔坐标和欧拉或四元数信息)指定运动,机器人将达到的位置将取决于激活工具和参考坐标系。必须在程序中正确指定工具和参考坐标系的位姿。这可分别通过 setTool setFrame 函数实现。

可用的后处理器

RoboDK 默认提供 100 多个后处理器,支持为 40 多个机器人制造商生成机器人程序。某些后处理器可进一步定制,以生成特定格式的程序。

您可以通过导航至 https://robodk.com/posts,。在 RoboDK 资源库中找到可用后处理器的完整列表您也可以从 RoboDK 的主工具栏中选择工具➔打开机器人资源库。

默认情况下,RoboDK 提供以下后处理器:

ABB RAPID IRC5:用于 ABB IRC5 机器人控制器。

ABB RAPID IRC5 Robtargets:用于 ABB IRC5 机器人控制器,并生成机器人目标名称。

ABB RAPID S4C:用于 ABB S4C 机器人控制器。

Adept Vplus:用于爱德普(Adept)V+ 程序语言。

Allen Bradley Logix5000:用于 Allen Bradley Logix5000 PLC。

Annin Robotics:用于 AR3 和 AR4 机器人。

遨博(Aubo):用于 AUBO 机器人控制器。

Aubo ARCS:为遨博(Aubo)ARCS 机器人控制器生成代码(.lua 和 .pro)。

Automata:用于 Automata EVA 机器人。

Borunte:用于 Borunte 机器人手臂。为 BRTIRUS 机器人控制器生成包含必要文件的压缩打包包。

Brooks: 用于PreciseFlex 机器人。

CPR:生成适合 CPR 机器人系统的 XML 格式代码。

CSV:为通用机械手和自动化控制器生成简单的 CSV 格式文件。该后处理器用途广泛,可用于需要直接导入和导出数据的应用程序。

CLOOS:用于 CLOOS 机器人控制器。

柯马(Comau)C5G:用于柯马(Comau)C5G 机器人控制器。

Denso PAC:用于 Denso RC7(及更早版本)机器人控制器(PAC 编程语言)。

Denso RC8:用于 Denso RC8(及更新版本)机器人控制器(PacScript 编程语言)。

越疆(Dobot):用于教育类 Dobot 机器人。

斗山(Doosan):用于斗山协作机器人。

精英机器人艾利特(Elibot)CS 任务后处理器可让您为 CS 控制器生成代码。

爱普生(Epson):用于爱普生机器人控制器。

法奥意威(Fairino):生成 .lua 文件,支持法奥意威 FR 系列机器人。

Fanuc R30iA:用于发那科 R30iA 和 R30iB 机器人控制器。

Fanuc R30iA_Arc:用于发那科(Fanuc)弧焊。

发那科 RJ3:用于发那科 RJ3 机器人控制器。

GCode BnR:用于 B&R 机器人控制器。

GSK:用于 GSK 机器人。

HCR:代表韩华机器人控制器。

HIWIN HRSS:用于 HIWIN 机器人。

现代(Hyundai):用于现代机器人控制器。

KAIRO:用于 Keba Kairo 机器人控制器。

Kinova:用于 Kinova 机器人。

川崎(Kawasaki):用于川崎 AS 机器人控制器。

KUKA IIWA:用于 KUKA IIWA 日出式 Java 编程。

KUKA KRC2:用于库卡(Kuka)KRC2 机器人控制器。

KUKA KRC2_CamRob:用于库卡(Kuka)CamRob 铣削选项。

KUKA KRC2_DAT:用于库卡(Kuka)KRC2 机器人控制器,包括 DAT 数据文件。

KUKA KRC4:用于库卡(Kuka)KRC4 机器人控制器。

KUKA KRC4_Config:用于库卡(Kuka)KRC4 机器人控制器,每行均包含配置数据。

KUKA KRC4_DAT:用于库卡(Kuka)KRC4 机器人控制器,包括 DAT 数据文件。

Mecademic:用于 Meca500 机器人所需的Mecademic 脚本代码。

Mecademic Python:可生成 Python 脚本,远程控制Mecademic Meca500 机器人。

三菱(Mitsubishi):用于三菱机器人控制器。

安川(Motoman):针对使用 Inform II 和 Inform III (JBI) 的不同安川机器人控制器。

Nachi AX FD:用于不二越(Nachi)AX 和 FD 机器人控制器。

欧姆龙(Omron):用于欧姆龙(Omron)/达明(Techman)机器人控制器。

OTC:用于 Daihen OTC 机器人控制器。

松下(Panasonic):用于松下 PRG 程序(需要松下 G2PC 工具将 ASCII 文件编译为二进制文件)。

Robostar:用于Robostar 机器人控制器。

新松(Siasun):用于新松机器人控制器。

Siemens_Sinumerik:用于西门子 Sinumerik ROBX 机器人控制器。

史陶比尔 VAL3:用于生成史陶比尔 VAL3 机器人程序(CS8 控制器及更高版本)。它可以内嵌机器人动作。

史陶比尔 VAL3_Machining:适用于具有加工 HSM 选项的史陶比尔 VAL3 控制器。

史陶比尔(Staubli)S6:用于史陶比尔(Staubli)S6 机器人控制器。

Toshiba:用于东芝机器人。

达明(Techman):用于欧姆龙(Omron)/达明(Techman)机器人控制器。

优傲(Universal Robots):对于 UR 机器人,它会生成线性运动作为位姿目标。

优傲(Universal Robots)URP:对于 UR 机器人,它会生成一个 URP,可以在 Polyscope(UR 机器人控制器)中加载和修改。

优傲(Universal Robots_RobotiQ):适用于 UR 机器人,包括对 RobotiQ 夹爪的支持。

优傲(Universal Robots)_MoveP:对于 UR 机器人,它能以 MoveP 命令的形式生成线性运动。

雅马哈:雅马哈机器人专用。

注:某些机器人控制器,如发那科(Fanuc)和松下(Panasonic)控制器,需要制造商提供的特定软件或控制器选件,以支持加载RoboDK生成的程序文件。例如,松下(Panasonic)机器人需要使用 G2PC 工具,将 RoboDK 生成的程序文件转换为控制器可读取的二进制文件。有些发那科(Fanuc)机器人支持由 RoboDK 生成的 ASCII 文件,另外,您也可以使用 Roboguide 的 maketp 工具编译程序。更多详情,请参阅 LS 至 TP 发那科(Fanuc)编译部分

注意:RoboDK 默认后处理器的列表和行为会随时更改。这意味着使用相同的后处理器生成的代码在不同版本的 RoboDK 中可能会有所不同。为防止生成的代码发生意外变化,您应确保创建一个唯一的副本或自定义后处理器,以便在更新或重新安装 RoboDK 时,生成的代码不会发生变化。

参考

本节包括与后处理器有关的有用参考资料。

以下视频展示了 RoboDK 后处理器的概述: https://robodk.com/help#PostProcessor

后处理器中每种方法的参考文档可在文档的RoboDK API部分找到: http://robodk.com/doc/en/PythonAPI/postprocessor.html

大多数后处理器都使用 robodk.py 模块:http://robodk.com/doc/en/PythonAPI/robodk.html#robodk.Mat。Robodk.py 模块提供了位姿运算(乘法、逆运算......)和不同格式的欧拉角位姿之间的转换等工具。

注:默认情况下,Python 与 RoboDK 一起安装,并将 robodk.py 模块添加到 Python 路径中。

可在线获取帮助文档,学习 Python 程序:   
https://docs.python.org/3/

程序生成时,会生成一个预处理/通用 Python 程序,并保存在本地临时文件夹中。预处理后的程序与正确的后处理器(由用户在 RoboDK 中选择)相连接。后处理器定义一个 RobotPost 类,生成所需的代码。

预编译程序用 Python 执行。

提示在 Windows 系统中,预处理的 Python 文件保存在临时文件夹中(例如,C:/Users/username/AppData/Local/Temp 文件夹或在 Windows 文件资源管理器中输入 %TEMP%):C:/Users/username/AppData/Local/Temp 文件夹,或在 Windows 文件资源管理器中输入 %TEMP%)。这些程序也可用于调试新的后处理器。