Filtro personalizado para frames

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('; --------------------------')