本节介绍如何自定义设置现有后处理器的参考坐标系。例如,为库卡(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('; --------------------------')