本节将向您介绍如何对现有的后处理器进行小幅修改。大多数后处理器都有一些变量,可以轻松修改,以更改或激活特定供应商的机器人程序功能。
举例来说,现有的库卡(Kuka)和 ABB 后处理器将做如下改动:
●将程序及其子程序作为一个文件生成,并强制规定每个程序最多只能有 3000 行代码。大型程序将被分割成更小的程序,并按顺序调用。
●设置关节运动,利用关节角度信息生成运动指令。
●将最高速度设为 500 mm/s。即使机器人被编程为移动速度更快,在后处理器中速度也将被限制在 500 mm/s。
下文将介绍如何在文本编辑器上进行建议的更改。
本示例将向您展示如何更改库卡(Kuka)KRC4 后处理器的默认行为,在同一文件中生成主程序及其子程序。
确保已启用后处理器编辑器插件,并按照以下步骤对后处理器进行修改:
1.选择程序➔ 后处理器编辑器。
2.选择要自定义的后处理器(库卡(Kuka) KRC4)。
3.选择 "确定"。这时会打开一个新窗口,你会看到可以修改的变量,如下图所示。
4.将 "包含子程序 "变量设置为 "True",而不是 "False"。
5.选择将后处理器另存为...
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 程序选项菜单中指定了每个程序的最大行数,则 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)
注:在后处理器顶部的 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 变量。
3.选择程序➔ 添加/编辑后处理器,然后选择当前使用的后处理器进行修改。如果您当前使用的是可定制的后处理器,则会默认选择该处理器。
4.您应该在后处理器中查找MoveJ 函数。该函数定义了后处理器生成关节运动指令的方式。另外,RoboDK 使用MoveL 来实现线性运动。使用 Python 编程语言,修改程序文件中添加的提供关节角度信息的行如下图所示。
5.最后,您可能需要修改后处理器将关节角度或位姿转换为字符串的方式。函数angles_2_str 和pose_2_str 分别定义了如何将关节角度和位姿转换为文本。
大多数 RoboDK 后处理器在关节运动中使用关节数据,在线性运动中使用笛卡尔坐标。建议始终将线性运动序列中的第一个点作为关节运动开始,并指定关节坐标。这样可以避免以错误的机器人配置启动程序,从而达到奇异点或轴限制。
注:所有 RoboDK 后处理器默认使用 robodk.py 模块。该模块包含有用的工具,可将许多机器人控制器的位姿转换为欧拉角。请使用与您的机器人控制器相对应的符号。更多信息,请参阅参考坐标系部分和 robodk.py 模块。
注:多个机器人制造商可以使用相同的欧拉角符号。例如,发那科(Fanuc)和安川(Motoman)都使用相同的 X Yàà Z 符号,史陶比尔(Stäubli)和麦卡德米克(Mecademic)使用相同的 X➔ Y'➔ Z'' 符号,等等。
重要:如果使用位姿(例如,使用笛卡尔坐标和欧拉或四元数信息)指定运动,机器人将达到的位置将取决于激活工具和参考坐标系。必须在程序中正确指定工具和参考坐标系的位姿。这可分别通过 setTool 和 setFrame 函数实现。