Esta seção mostra como você pode personalizar a definição do frame de referência de um pós-processador existente. Por exemplo, definir um frame de referência personalizado para um robô KUKA.
Você pode usar pós-processadores compilados e reimplementar facilmente apenas as funções necessárias (por exemplo, setFrame, setTool ou setSpeed).
Neste exemplo, supomos que você queira personalizar como a base é definida para um controlador KUKA. Por exemplo, se você quiser emitir a seguinte linha ao definir o frame de referência:
BASE_DATA[8] = {FRAME: X:2000, Y:0, Z:0, A:0, B:0, C:0}
BAS (#BASE,8)
Você só precisa criar um novo arquivo chamado KUKA_Custom_Post.py na pasta C:/RoboDK/Posts/ com as seguintes linhas, que usam o pós-processador padrão KUKA_KRC2 e substituem a configuração do frame de referência (função setFrame):
from KUKA_KRC2 import RobotPost as MainPost
classe 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)')
No entanto, poderíamos adicionar filtros personalizados com base em determinados critérios para filtrar entre o uso do comportamento padrão e o uso de uma implementação personalizada. O arquivo do pós-processador poderia então ser modificado da seguinte forma:
from KUKA_KRC2 import RobotPost as MainPost
classe RobotPost(MainPost):
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
if frame_name == "Frame 4": # Insira qualquer condição aqui
# Acionar a chamada para o método padrão (o mesmo que não substituir a função)
super(MainPost, self).setFrame(pose, frame_id, frame_name)
retorno
# Implementar um setFrame personalizado
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('; --------------------------')
Quando você gera programas para os controladores KUKA KRC, há muitas maneiras de definir o sistema de coordenadas ou o frame de referência. A seguinte definição de setFrame mostra uma implementação alternativa com diferentes opções:
def setFrame(self, pose, frame_id, frame_name):
"""Change the robot reference frame"""
self.addline('; ---- Referência de configuração: %s ----' % frame_name)
# Opção 1: Construir a cinemática com base na matriz MACHINE_DEF e no deslocamento fornecido
#self.addline('$BASE = EK (MACHINE_DEF[2].ROOT, MACHINE_DEF[2].MECH_TYPE, { %s })' % self.pose_2_str(pose))
# Opção 2: construir a cinemática com base na matriz EX_AX_DATA e no deslocamento fornecido
#self.addline('$BASE=EK(EX_AX_DATA[1].ROOT,EX_AX_DATA[1].EX_KIN, { %s })' % self.pose_2_str(pose))
# Opção 3: construir a cinemática com base na matriz EX_AX_DATA e no deslocamento predefinido
#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))
# Opção 4: usar a função de inicialização BAS(#ex_BASE) do arquivo BAS.src
#self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
#self.addline('BAS(#ex_BASE,%i)' % self.BASE_ID)
# Opção 5: Use a função de inicialização BAS(#BASE) do arquivo BAS.src
self.addline('; BASE_DATA[%i] = {FRAME: %s}' % (self.BASE_ID, self.pose_2_str(pose)))
self.addline('BAS (#BASE,%i)' % self.BASE_ID)
# Opção 6: Obter diretamente a base da matriz BASE_DATA (geralmente o que o BAS(#BASE) faz)
# self.addline('$BASE=BASE_DATA[%i]' % self.BASE_ID)
self.addline('; --------------------------')