Benutzerdefinierter Filter für Bezugssysteme

Dieser Abschnitt zeigt, wie Sie das Festlegen des Bezugssystems eines bestehenden Postprozessors anpassen können. Zum Beispiel das Festlegen eines benutzerdefinierten Bezugssystems für einen KUKA-Roboter.

Sie können kompilierte Postprozessoren verwenden und dabei ganz einfach nur die notwendigen Funktionen neu implementieren (zum Beispiel setFrame, setTool oder setSpeed).

In diesem Beispiel gehen wir davon aus, dass wir anpassen möchten, wie die Basis für eine KUKA-Steuerung definiert wird. Wenn Sie zum Beispiel beim Festlegen des Bezugssystems die folgende Zeile ausgeben möchten:

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

BAS (#BASE,8)

Sie müssen lediglich eine neue Datei mit dem Namen KUKA_Custom_Post.py im Ordner C:/RoboDK/Posts/ mit den folgenden wenigen Zeilen erstellen, die den Standard-Postprozessor KUKA_KRC2 verwendet und das Festlegen des Bezugssystems (Funktion setFrame) überschreibt:

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

Wir könnten jedoch benutzerdefinierte Filter basierend auf bestimmten Kriterien hinzufügen, um zwischen dem Standardverhalten und einer benutzerdefinierten Implementierung zu unterscheiden. Die Postprozessor-Datei könnte dann wie folgt geändert werden:

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

Beim Generieren von Programmen für KUKA-KRC-Steuerungen gibt es viele Möglichkeiten, das Koordinatensystem bzw. Bezugssystem festzulegen. Die folgende Definition von setFrame zeigt eine alternative Implementierung mit verschiedenen Optionen:

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