参照座標系用のカスタムフィルター

このセクションでは、既存のポストプロセッサーの参照座標系の設定をカスタマイズする方法を説明します。例えば、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, 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)')

ただし、特定の条件に基づいてカスタムフィルターを追加し、デフォルトの動作を使用するかカスタム実装を使用するかを切り替えることもできます。その場合、ポストプロセッサーファイルは次のように変更できます:

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

KUKA KRCコントローラー用にプログラムを生成する際、座標系または参照座標系を設定する方法は数多くあります。以下のsetFrameの定義は、さまざまなオプションを使用した別の実装例を示しています:

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