変更例

このセクションでは、既存のポストプロセッサーに小さな変更を加える方法を示します。ほとんどのポストプロセッサーには、ベンダー固有のロボットプログラミング機能を変更またはアクティブ化するために簡単に変更できるいくつかの変数があります。

例として、次の変更が既存のABBおよびKUKAポストプロセッサーに加えられます:

関節の動きを設定して、関節の角度情報を使用してモーションコマンドを生成します。

最高速度を500 mm / sにオーバーライドします。ロボットがより速く動くようにプログラムされている場合でも、速度はポストプロセッサーで500 mm / sに制限されます。

各プログラムを個別のファイルとして生成し、プログラムにプログラムあたり最大3000行のコードを強制します。大きなプログラムは小さなプログラムに分割され、順次呼び出されます。

前のセクションでは、既存のポストプロセッサーを開いて編集する方法を示しました。

1.プログラムを選択➔ポストプロセッサーの追加/編集

2.ポストプロセッサーを選択します。たとえば、KUKA KRC4の場合、KUKA_KRC4を選択します。

3.OKを選択します。ポストプロセッサーは、Python IDLEエディターに表示されます。

次のセクションでは、テキストエディター(またはPython IDLE)で提案された変更を行う方法を示します。

ファイルごとに1つのプログラムを生成する

次の変更を追加して、ファイルごとに複数のプログラムを追加することを避け、最大3000行のコードでプログラムを生成します。

1.変数MAX_LINES_X_PROGを3000に設定します

2.変数INCLUDE_SUB_PROGRAMSをFalseに設定します

注意:プログラムごとの最大行数がRoboDKから指定されている場合、変数MAX_LINES_X_PROGはオーバーライドされる可能性があります プログラムオプションメニュー。ポストプロセッサーの__init__セクションを変更して、この変数をRoboDK設定から変更しないようにします。

Post Processors - 画像 8


速度制限を強制する

RoboDKからプログラムを生成するとき、500 mm / sの速度制限を設定し、より高い速度を使用しないようにするには、次の手順に従ってください。この例では、KUKA KRC2またはKRC4コントローラーを使用していると想定しています。

1.setSpeed関数定義を見つけます(def setSpeed)

2.m / s単位で速度を変更する$ VEL.CP出力を生成する前に、次のコードを追加します。    
speed_mms = min(speed_mms、500)

Post Processors - 画像 9

注意:200 mm / sのデフォルト速度は、ポストプロセッサーの上部にあるHEADER変数で定義されています($ VEL.CP = 0.2)。このデフォルトの速度は、速度がRoboDKから変更されていない場合にも変更できます。

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

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

関節角度を使用して動きを課す

このセクションでは、デカルト値の代わりにジョイント値を使用して、軸移動を強制するように既存のポストプロセッサを変更する方法を示します。この例では、ABB IRC5ロボットコントローラーにこの変更を適用する方法を示します。

1.ロボットコントローラのプログラミングマニュアルを見つけます。この例では、ABB IRC5 RAPIDプログラミングマニュアルを使用します。

2.関節運動の説明を探します。この場合、ABBの絶対関節移動コマンドはMoveAbsJと呼ばれます。このコマンドには、関節軸を定義するjointtarget変数が必要です。

Post Processors - 画像 10

3.プログラムを選択➔ポストプロセッサーの追加/編集 それを変更するために現在使用しているポストプロセッサーを選択します。現在カスタマイズ可能なポストプロセッサーを使用している場合は、デフォルトで選択されます。

4.ポストプロセッサ内でMoveJ関数を探す必要があります。この関数は、ポストプロセッサーが関節運動コマンドを生成する方法を定義します。あるいは、RoboDKは直線移動にMoveLを使用します。次の図に示すように、Pythonプログラミング言語を使用して、プログラムファイルに追加された行を変更し、関節角度情報を提供します。

Post Processors - 画像 11

5.最後に、ポストプロセッサが関節角度またはポーズを文字列に変換する方法を変更する必要がある場合があります。関数angles_2_strとpose_2_strは、それぞれ関節角度とポーズがテキストに変換される方法を定義します。

Post Processors - 画像 12

ほとんどのRoboDKポストプロセッサは、関節の動きには関節データを使用し、直線的な動きにはデカルト座標を使用します。ジョイント座標を指定して、常に一連の直線移動の最初のポイントをジョイント移動として開始することをお勧めします。これにより、誤ったロボット構成でプログラムを開始したり、特異点や軸の制限に達したりすることが回避されます。

注意:すべてのRoboDKポストプロセッサは、デフォルトでrobodk.pyモジュールにリンクしています。このモジュールには、多くのロボットコントローラのポーズからオイラー角に変換するための便利なツールが含まれています。ロボットコントローラに対応する表記を使用します。詳細については、参照フレーム セクションと robodk.py モジュール。

注意:複数のロボットメーカーが同じオイラー角表記を使用できます。たとえば、ファナックとモトマンはどちらも同じXを使用しています➔Y➔Z表記、ストーブリ、およびMecademicは同じXを使用します➔Y '➔Z ''表記など