后处理器是离线编程的关键环节,它能针对特定机器人控制器生成可执行程序。机器人编程必须遵循厂商专属的编程规范,这些规则通过后处理器实现。机器人后处理器定义了如何为特定控制器生成符合要求的机器人程序。
从 RoboDK 仿真到特定机器人程序的转换是由后处理器完成的。每个机器人都与后处理器相连,后处理器将定义特定的机器人程序样式。后处理器用于离线生成程序,如新建程序(右击程序,然后选择 "生成机器人程序")。
RoboDK 包含许多后处理器,支持 50 多种不同的机器人制造商和控制器。支持的控制器列于支持的后处理器章节。此外,还可以创建自定义后处理器或修改现有后处理器。所有可用的后处理器都在文件夹中:C:/RoboDK/Posts/文件夹中。
一个后处理器就是一个PY文件(每个后处理器都由一个 Python 脚本定义)。可以手动添加、修改或删除 RoboDK Posts 文件夹中的文件。如果你已获得RoboDK后处理器(PY 文件),则应将其放在 Posts 文件夹中,以便从RoboDK中选择。
本节介绍如何选择、编辑或创建后处理器,并将其用于RoboDK中的机器人。以下视频提供了快速介绍:https://www.robodk.com/help#PostProcessor
Note:大多数机器人品牌都有不同的控制器版本。必须选择正确的后处理器,以生成特定机器人控制器所支持的适当机器人程序。
Important: 每个机器人默认都有已指定的默认后处理器。默认选择可能无法为你的机器人控制器生成合适的程序。在这种情况下,你可能需要选择不同的后处理器,以使程序在你的机器人控制器上运行。
你可以通过右键点击机器人或程序轻松选择后处理器。后处理器的选择是与机器人绑定的,因此更改程序所分配的后处理器时,同一机器人关联的所有程序都将同步更新所使用的后处理器。
以下介绍如何为机器人选择后处理器:
1.右击机器人或程序
2.选择选择后处理器程序
3.从列表中选择后处理器
4.最后选择确定


变更已经生效,需要重新生成程序以查看结果。
Note: 后处理器的选择会关联到机器人。改变一个仿真程序的后处理器时,会改变与同一机器人关联的所有程序的后处理器。
或者,通过以下步骤为机器人选择后处理器:
1.打开机器人面板(双击机器人)
2.选择参数,打开参数面板
3.点击选择后处理器程序,然后选择你的后处理器

Tip:通过双击C:/RoboDK/Posts/文件夹中的PY文件,可快速预览每个后处理器的输出效果。更多信息详见下一节。
你可以在GUI上修改后处理器的相关设置。后处理编辑器提供关于机器人控制器定义的后处理器变量的修改内容。
后处理器编辑器是一个插件,可帮助你自定义后置处理器。点击以下页面下载并安装该插件:https://robodk.com.cn/addin/cn/com.robodk.plugin.postprocessoreditor。
按照以下步骤打开后处理器编辑器:
1.在菜单栏选择:程序➔ 添加/编辑后处理程序。
2.选择要自定义的后处理器。
3.选择 "确定"。这时会打开一个新窗口,你会看到可以修改的变量。
4.选择将后处理器另存为...
5.输入名称后保存。
Important:不要覆盖默认的后处理器。相反,你可以在创建自己的后处理器时使用自己的唯一名称。如果你重新安装 RoboDK,默认后处理器将被设置回默认值。


例如,如果你选择发那科(Fanuc)R30iA 后处理器,就会看到上图所示的窗口。
用户可以修改已经存在的后处理器,或者添加新的后处理器。后处理器文件必须放在C:/RoboDK/Posts/ 文件夹中,这样才能在RoboDK软件环境中备选。前一节中描述了如何将后处理器与机器人连接。
请确保你拥有后处理器的源代码,以便对其进行编辑。如果你要编辑的后处理器不可编辑(已编译),请联系我们。
后处理器必须放在 C:/RoboDK/Posts/ 文件夹中,以便从RoboDK 中选择。上一节介绍了如何将特定机器人链接到后处理器。
每个后处理器都是一个PY文件。可以重命名文件或从/向 C:/RoboDK/Posts/ 文件夹复制文件,以共享不同的后处理器。要删除现有的后处理器脚本,只需删除 Posts 文件夹中相应的PY 文件即可。
可以通过任意一种文本编辑器或者使用Python编辑器(Python IDLE)来编辑后处理器。使用Python编辑器可以快速调试并通过文件末尾的例程来评估该后处理器。
Vedio:后处理器概述:https://www.youtube.com/watch?v=lbycCDjtOnE
安装Python以便更好地测试与使用后处理器(默认设置下Python将与RoboDK一同安装)。
请按照以下步骤修改已经存在的后处理器::
1.选择程序➔ 添加/编辑后处理程序
2.选择现有后处理器
3.选择 "确定",会弹出文本编辑器。
4.选择转到➔ 调试 (F5) 以预览结果。如有必要,请进行修改。根据你使用的文本编辑器,你可能需要选择运行➔ 运行模块 (F5)。

或者,用户可以手动修改后置处理器:
1.打开后置处理器文件夹:C:/RoboDK/Posts/
2.使用Python IDLE编辑器(右键选择“使用IDLE编辑”)或者其他文本编辑器打开一个PY文件。
3.根据需要进行修改
4.运行并检查结果:在Python IDLE 中选择运行➔运行模块(默认快捷键为F5)
或者,用户可以使用任意文本编辑器编辑,之后双击通过Python运行。

Tip:可以在RoboDK中改变后处理器的默认编辑器,点击工具➔ 选项➔ 其他,并在Python 编辑器命令中给出编辑器的安装路径。
Important:请勿覆盖默认后处理器。你可以在创建自己的后处理器时使用自定义的命名。若重新安装RoboDK,默认后处理器将被重置为初始值。
Important:如果你使用Notepad++ 等文本编辑器和 Python 3.6 或更早版本,请务必将制表符替换为 4 个空格。否则,你将看到TabError,Tip缩进中制表符和空格的使用不一致。
本节将展示如何对现有后处理器进行微调。大多数后处理器都包含若干可轻松修改的变量,通过这些变量可更改或启用特定厂商的机器人编程功能。
举例来说,现有的库卡(KUKA)和 ABB 后处理器将做如下改动:
●为每个仿真程序分别生成文件,并且强制每个文件不超过3000行指令。较大的程序将被分割为多个子程序并依次被调用。
●设置一个关节运动,使用角度信息生成运动指令。
●将速度最大值限制为500 mm/s。即使机器人仿真程序中的速度设置超过这个值,也会被后置处理器限制在500 mm/s之内。
下文将介绍如何在文本编辑器上进行更改。
本示例将展示如何修改库卡(KUKA)KRC4后置处理器的默认设置,实现在同一文件中生成主程序及其子程序。
确保已启用后处理器编辑器插件,并按照以下步骤对后处理器进行修改:
1.菜单栏选择:程序➔ Post Processor Editor
2.选择要自定义的后处理器:KUKA KRC4
3.选择 "确定"。这时会打开一个新窗口,你会看到可以修改的变量,如下图所示
4.将 " INCLUDE SUB PROGRAMS "变量设置为 "True"
5.选择将后处理器另存为Save Post Processor as...
6.输入新名称保存(默认名称使用修改日期)。

现在,你会在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。

本示例将向你展示在使用 RoboDK 生成程序时,如何将速度限制为 500 mm/s,避免在RoboDK中仿真时设置的速度值过大。
在本示例中,我们假设使用的是库卡(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)

Note:如果没有后处理器的源代码,你仍可添加自定义函数来覆盖默认行为。
本节介绍如何为现有后处理器自定义设置参考坐标系。例如,为KUKA机器人设置自定义参考坐标系。
你可以使用已编译的后置处理器,并仅重新实现必要的功能数(例如setFrame setTool 或 setSpeed)。
Note:请确保你的自定义后处理器名称与引用的原始后处理器名称不同。当你更新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, pose, frame_id, frame_name):
"""Change the robot reference frame"""
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, pose, frame_id, frame_name):
"""Change the robot reference frame"""
if frame_name == "Frame 4": # Enter any condition here
# Trigger the call to the default method (same as not overriding the function)
super(MainPost, self).setFrame(pose, frame_id, frame_name)
return
# Implement a custom setFrame
self.addline('; ---- Setting reference: %s ----' % frame_name)
self.addline('; BASE_DATA[8] = {FRAME: %s}' % (self.pose_2_str(pose)))
self.addline('BAS (#BASE,8)')
self.addline('; --------------------------')
为库卡(KUKA)控制器生成程序时,可通过多种方式设置坐标系或参考框架。以下setFrame定义展示了一种具有不同选项的替代实现方案:
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; ---- Setting reference: %s ----' % frame_name)
# option 1: Build the kinematics based on the MACHINE_DEF array and the provided offset
#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose))
# option 2: Build the kinematics based on the EX_AX_DATA array and the provided offset
#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' % self.pose_2_str(pose))
# Option 3: Build the kinematics based on the EX_AX_DATA array and the pre-defined offset
#self.addline('; Using external axes')
#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))
# Option 4: Use the BAS(#ex_BASE) init function from the BAS.src file
#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
#self.addline('BAS(#ex_BASE,%i)' % self.BASE_ID)
# Option 5: Use the BAS(#BASE) init function from the BAS.src file
self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
self.addline('BAS (#BASE,%i)' % self.BASE_ID)
# Option 6: Directly take the base from the BASE_DATA array (usually what the BAS(#BASE) does)
# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)
self.addline('; --------------------------')
本节将介绍如何修改现有后处理器,以通过关节值而非笛卡尔值强制实现轴向运动。
在本示例中,我们将此变更应用于ABB IRC5机器人控制器。
1.找到机器人控制器的使用手册。在本范例中我们使用的是ABB IRC5 RAPID编程手册。
2.找到关节运动的指令。本范例中ABB的关节运动绝对值指令为MoveAbsJ。该指令使用jointtarget变量来定义关节轴数值。

1.选择程序➔ 添加/编辑后处理程序,选择当前的后处理器并修改它。如果你当前使用的是自定义的后处理器,它会被(在默认状态下)选中。
2.在后处理器中找到MoveJ函数。该函数定义了后处理器如何生成机器人关节运动的指令。另外, RoboDK使用MoveL定义线性运动。使用Python编程语言,修改给机器人程序添加轴角度信息的那行指令,如下图所示。

1.最后,修改后处理器将关节轴角度值或者姿态值转化为字符串的方式。函数angles_2_str与pose_2_str分别负责将关节轴角度值与姿态值转化为文本文字。

大部分RoboDK后处理器都使用关节轴角度值设置关节运动,以及笛卡尔坐标值设置线性运动。我们建议总是将一系列线性运动的起点(第一段运动)设置为关节运动(用角度值定义)。这样可以避免运动开始前错误的机器人位姿导致机器人进入奇异状态,或者达到轴极限。
Note:不同的机器人生产商可能使用同一种欧拉角公式。例如,发那科(Fanuc)和安川(Motoman)都使用相同的 X Yàà Z 符号,史陶比尔(Stäubli)和Mecademic使用相同的 X➔ Y'➔ Z'' 符号,等等。
Important:如果用户使用一个姿态来定义运动(例如,使用笛卡尔线性坐标与欧拉角或者四元数作为旋转信息),机器人实际所达到的位姿将由当前机器人工具以及参考坐标系所决定。机器人工具与参考坐标系的姿态必须在仿真程序中准确地定义。这可以通过setTool与setFrame函数来实现。
RoboDK 默认提供100 多个后处理器,支持为40 多个机器人制造商生成机器人程序。某些后处理器可进一步定制,以生成特定格式的程序。
你可以访问https://robodk.com.cn/cn/posts,在RoboDK资源库中找到可用后处理器的完整列表,也可以从RoboDK的工具栏中选择文件➔ 打开机器人库。
默认情况下,RoboDK提供以下后处理器:
●ABB RAPID IRC5:用于 ABB IRC5 控制器。
●ABB RAPID IRC5 Robtargets:用于 ABB IRC5 控制器,并生成机器人目标名称。
●ABB RAPID S4C:用于 ABB S4C 控制器。
●Adept Vplus:用于爱德普V+ 程序语言。
●Allen Bradley Logix5000:用于Allen Bradley Logix5000 PLC。
●Annin Robotics:用于AR3和AR4机器人。
●AUBO:用于遨博控制器。
●AUBO ARCS:为遨博ARCS 控制器生成代码(.lua 和 .pro)。
●Automata:用于Automata EVA 机器人。
●Borunte:用于伯朗特机器人手臂。为 BRTIRUS 控制器生成包含必要文件的压缩打包。
●Brooks:用于PreciseFlex 机器人。
●CPR:生成适合 CPR 机器人系统的 XML 格式代码。
●CSV:为通用机械臂和自动化控制器生成简单的 CSV 格式文件。该后处理器用途广泛,可用于需要直接导入和导出数据的应用程序。
●CLOOS:用于克鲁斯控制器。
●ComauC5G:用于柯马C5G 控制器。
●Denso PAC:用于电装 RC7(及更早版本)控制器(PAC 编程语言)。
●Denso RC8:用于电装 RC8(及更新版本)控制器(PacScript 编程语言)。
●Dobot Magician:用于越疆教育类机器人。
●Dobot MG400:用于越疆SCARA机器人。
●Dobot:用于越疆工业类机器人。
●Doosan:用于斗山协作机器人。
●Elite:艾利特CS 任务后处理器用于为 CS 控制器生成代码。
●Epson:用于爱普生控制器。
●Fairino:生成 .lua 文件,支持法奥 FR 系列机器人。
●Fanuc R30iA:用于发那科 R30iA 和 R30iB 控制器。
●Fanuc R30iA_Arc:用于发那科弧焊。
●Fanuc RJ3:用于发那科 RJ3 控制器。
●GCode BnR:用于 B&R 控制器。
●GSK:用于 GSK 机器人。
●HCR:用于韩华(Hanwha)控制器。
●HIWIN HRSS:用于 HIWIN 机器人。
●Hyundai:用于现代控制器。
●KAIRO:用于 Keba Kairo 控制器。
●Kinova:用于 Kinova 机器人。
●Kawasaki:用于川崎 AS 控制器。
●KUKA IIWA:用于库卡 IIWA sunrise Java 编程。
●KUKA KRC2:用于库卡KRC2 控制器。
●KUKA KRC2_CamRob:用于库卡CamRob 铣削选项。
●KUKA KRC2_DAT:用于库卡KRC2 控制器,并包括 DAT 数据文件。
●KUKA KRC4:用于库卡KRC4 控制器。
●KUKA KRC4_Config:用于库卡KRC4 控制器,每行均包含配置数据。
●KUKA KRC4_DAT:用于库卡KRC4控制器,并包括 DAT 数据文件。
●Mecademic:用于 Meca500 机器人所需的Mecademic 脚本代码。
●Mecademic Python:可生成 Python 脚本,远程控制Mecademic Meca500 机器人。
●Mitsubishi:用于三菱控制器。
●Motoman/Yaskawa:针对使用 Inform II 和 Inform III (JBI) 的 Motoman 控制器,需要每个轴的脉冲/度数比值。可以通过上传项目中的ALL.PRM 文件来自动提取此信息。
●Motoman Cartesian:用于采用笛卡尔坐标值的安川 / Motoman 控制器。如需在机器人控制器上手动修改此程序,可能需要启用控制器上的相对作业(Relative Job)选项。
●Nachi AX FD:用于那智不二越AX 和 FD 控制器。
●Omron:用于欧姆龙/达明控制器。
●OTC:用于欧地希 Daihen OTC 控制器。
●Panasonic:用于松下 PRG 程序(需要松下 G2PC 工具将 ASCII 文件编译为二进制文件)。
●Robostar:用于Robostar 控制器。
●Siasun:用于新松控制器。
●Siemens_Sinumerik:用于西门子 Sinumerik ROBX 控制器。
●Staubli VAL3:用于生成史陶比尔 VAL3 机器人程序(CS8控制器及更新版本),内嵌机器人动作。
●Staubli VAL3_Machining:适用于具有 Machining HSM 选项的史陶比尔 VAL3 控制器。
●StaubliS6:用于史陶比尔StaubliS6 控制器。
●Toshiba:用于东芝机器人。
●Techman:用于欧姆龙/达明控制器。
●Universal Robots:用于优傲 UR 机器人,将线性运动生成为位姿目标。
●Universal RobotsURP:用于优傲 UR 机器人,生成可以在 Polyscope(优傲控制器)中加载和修改的URP。
●Universal Robots_RobotiQ:用于优傲 UR 机器人,并包含对 RobotiQ 夹爪的支持。
●Universal Robots_MoveP:用于优傲 UR 机器人,将线性运动生成为 MoveP 命令。
●Yamaha:用于雅马哈机器人。
Note:某些机器人控制器,如发那科(Fanuc)和松下(Panasonic)控制器,需要制造商提供的特定软件或控制器选件,才可以加载RoboDK生成的程序文件。例如,松下机器人需要使用 G2PC 工具,将RoboDK生成的程序文件转换为控制器可读取的二进制文件。有些发那科控制器支持由RoboDK生成的ASCII文件,或者,也可以使用Roboguide的maketp工具编译程序。更多详情,请参阅发那科程序编译LS与TP对比章节。
Note:RoboDK默认后处理器的列表和行为会不时发生变化。这意味着即使使用相同的后处理器,不同版本的RoboDK生成的代码也可能不同。为避免生成代码出现意外变更,你应确保创建唯一副本或自定义后处理器,从而在更新或重新安装RoboDK时保持生成代码的一致性。
本节介绍后处理器的相关资料,以及如何根据需求对其进行定制。
在后处理器资源库中找到完整的后处理器列表:https://robodk.com.cn/cn/posts,选择某个后处理器,以了解其支持的控制器以及可自定义的参数。
在RoboDK API部分找到后处理器中每个函数方法的参考文档:https://robodk.com/doc/en/PythonAPI/postprocessor.html
大多数后处理器都使用robodk.py 模块。该模块为机器人姿态运算提供数学工具(乘法,反转,…),并为从机器人姿态到不同的欧拉角格式之间提供转换。
Note:在默认设置下,Python随RoboDK一同安装,robodk.py模块也将自动添加到Python路径。
通过在线文档学习 Python 编程:https://docs.python.org/3/
每当生成一个程序后,一个预处理的/通用Python程序会被保存至本地临时文件夹中。该程序与正确的后置处理器相关联(用户在RoboDK中的选择)。后置处理器定义了一个“RobotPost类”来输出正确的程序代码。
预编译的程序会通过Python执行。
Tip:在Windows 系统中,预处理的 Python 文件保存在临时文件夹中(例如,C:/Users/username/AppData/Local/Temp 文件夹或在 Windows 文件资源管理器中输入 %TEMP%):C:/Users/username/AppData/Local/Temp 文件夹,或在 Windows 文件资源管理器中输入 %TEMP%)。这些程序也可用于调试新的后处理器。