Filtre personnalisé pour les systèmes de référence

Cette section montre comment personnaliser la définition du système de référence d’un post processeur existant. Par exemple, définir un système de référence personnalisé pour un robot KUKA.

Vous pouvez utiliser des post processeurs compilés et réimplémenter facilement uniquement les fonctions nécessaires (par exemple, setFrame, setTool ou setSpeed).

Dans cet exemple, nous supposons que vous souhaitez personnaliser la façon dont le repère de base est défini pour un contrôleur KUKA. Par exemple, si vous souhaitez générer la ligne suivante lors de la définition du système de référence :

BASE_DATA[8] = {FRAME: X:2000, Y:0, Z:0, A:0, B:0, C:0}

BAS (#BASE,8)

Il vous suffit de créer un nouveau fichier nommé KUKA_Custom_Post.py dans le dossier C:/RoboDK/Posts/ contenant les quelques lignes suivantes, qui utilisent le post processeur KUKA_KRC2 par défaut et redéfinissent la fonction de configuration du système de référence (fonction 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)')

Vous pourriez toutefois ajouter des filtres personnalisés basés sur certains critères afin de choisir entre le comportement par défaut et une implémentation personnalisée. Le fichier du post processeur pourrait alors être modifié comme suit :

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

Lors de la génération de programmes pour des contrôleurs KUKA KRC, il existe plusieurs façons de définir votre système de coordonnées ou système de référence. La définition suivante de setFrame montre une implémentation alternative avec différentes options :

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