Variable

Model ElementVariableは、MotionSolveで代数状態を定義します。

クラス名

Variable

説明

変数は次の3つの方法で定義できます:
  • MotionSolve式で定義されたシステムの状態と時間の陽関数または陰関数。
  • コンパイル済みのDLLで定義されたシステムの状態と時間の陽関数または陰関数。
  • ユーザー定義のスクリプトで定義されたシステムの状態と時間の陽関数または陰関数。

Variablesは非常に用途が広いため、マルチボディシステムのモデル化において、さまざまな用途に適用できます。これらは、シミュレーションで注目する信号の作成に使用されます。その後信号は、力の定義、テストデータへの補間のための独立変数の作成、一般的な制御要素への入力の定義、および複雑な出力信号の作成に使用されます。

属性の概要

名前 プロパティ コマンドで変更可能か 設計可能か
id Int ()    
label Str ()  
ic Double () FDのみ
implicit Bool (False)   FDのみ
auto_balance Enum ("DEFAULT UNCONDITIONAL DISABLED PENALTY", default="DEFAULT")    
penalty Double (default=None) FDのみ
penalty1 Double (default=None) FDのみ
function Function ("VARSUB")  
routine Routine ()    

使用法

変数の3つのバリアントを以下に示します。
# Defined in a MotionSolve expression
Variable (function=expressionString, optional_attributes)

# Defined in a compiled user subroutine
Variable (function=userString, routine=string, optional_attributes)

# Defined in a Python function
Variable (function=userString, routine=functionPointer, optional_attributes)

属性

function
有効なMotionSolve式を定義する文字列。
VARIABLEを定義するMotionSolve式を指定します。任意の有効な実行時MotionSolve式を入力として指定できます。
function属性は必須です。
コンパイルされたDLLで定義されたシステムの状態と時間の陽関数または陰関数
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Variableが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
文字列
ユーザーサブルーチンの代替名を指定します。この名前は、“∷”で区切られた情報の2つの部分で構成されます。1つ目は、ユーザー定義のVariableの応答を計算する関数を含む共有ライブラリへのパス名です。2つ目は、計算を実行する共有ライブラリ内の関数の名前です。
例: routine="/staff/Altair/engine.dllmyVariable"
  • "/staff/Altair/engine.dllはDLLです。
  • "myVariable"は、計算を実行するこのDLL内の関数です。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでVARSUBになります。
ユーザー作成Pythonスクリプトで定義されたシステムの状態と時間の陽関数または陰関数
function
有効なユーザー関数MotionSolve式を定義する文字列。
データファイルから、Variableが定義されるユーザー定義のサブルーチンに渡されるパラメータのリスト。
function属性は必須です。
routine
Python内の呼び出し可能な関数へのポインタ
例:routine=myVariable
  • myVariableは、モデルが存在する場所ならどこからでも呼び出すことが可能なPython関数またはメソッドです。
属性routineは省略可能です。
指定しない場合、routineはデフォルトでVARSUBになります。
オプション属性 - すべてのバリアントに使用できます。
id
整数
要素識別番号を指定します。この番号は、モデル内のすべてのVariableオブジェクトの中で一意にする必要があります。
この属性は省略可能です。MotionSolveは、IDが指定されていない場合、自動的にこれを作成します。
値の範囲:id > 0
label
文字列
Variableオブジェクトの名前を指定します。
この属性は省略可能です。指定しない場合は、MotionSolveが代わりにラベルを作成します。

  1. 1つの式で剛体の運動エネルギーを計算します。

    この例では、EXPRESSIONベースのReference_Variableを使用して、剛体の運動エネルギーを計算する方法を示します。下の例で、Reference_VariableのIDは3070です。1011は、質量4kg、主慣性モーメントIxx=0.006Kgm2、Iyy=0.005Kgm2、およびIzz=0.004Kgm2の剛体の質量中心を定義するMARKERです。Reference_Variable 3070は、剛体の総運動エネルギーです。

    この例は、EXPRESSIONベースのVARIABLEの使用方法を示しています。
    translationalKE = "0.5*(4*vm(1011)**2"
    rotationalKE    ="0.006*wx(1011)**2+0.005*wy(1011)**2+0.004*wz(1011)**2)"
    KE              = translationalKE " + " rotationalKE
    totalKE = Variable (function=KE)
  2. 1つのPythonスクリプトで剛体の運動エネルギーを計算します。
    これは、同じ例をXMLで記述したセクションで解いたものです。
    # Define the VARSUB, written in Python
    def VARSUB(id, time, par, npar, dflag, iflag):
    
        # Get information from the par array
        icm  = par[0]
        mass = par[1]
        ixx  = par[2]
        iyy  = par[3]
        izz  = par[4]
    
        # get the translational and rotational velocity states
        vm   = VM   (icm)
        w    = WXYZ (icm)
    
        # Calculate the kinetic energy
        if iflag:
            totalKE = 0.0
        else:
            totalKE = 0.5 * (mass*vm**2+ ixx*w[0]**2+ iyy*w[1]**2+ izz*w[2]**2)
    
    
        return totalKE
    
    # Define the Variable
    expr = "User ({id}, 4, 0.006, 0.005, 0.004)".format(id=mrkr3070.id)
    Variable (function=expr)
  3. 暗黙的VARIABLEを使用してロボットを駆動します。

    詳しい説明については、XMLシンタックスの例3をご参照ください。ここで、Pythonの実装について説明します。

    ステップ1:マーカー11のモーションを定義する2つの代数拘束を定義します。
    varX = Variable (function="DX(2011)-cubspl(time, 0, 1)", implicit=True,
    autobalance="DISABLED", label="X-path of end effector")
    varY = Variable (function="DY(2011)-cubspl(time, 0, 2)",implicit=True,
    autobalance="DISABLED", label="Y-path of end effector"))

    ステップ2:ジョイントJ1とJ2にトルクとして内力を適用します。

    ジョイントJ1はIマーカー=33、Jマーカー=44、ジョイントJ2はIマーカー=55、Jマーカー=66で定義されるとします。
    expr1   ="VARVAL({vid})".format(vid=varX.id)
    torque1 = Sforce (i=marker33, j=marker44, type="ROTATION", function=expr1)
    
    expr2   ="VARVAL({vid})".format(vid=varY.id)
    torque2 = Sforce (i=marker55, j=marker66, type="ROTATION", function=expr2)

    ステップ3:モーターのサイズを指定するジョイントに適用されるトルクを確認します。

    varXvarYは、それぞれ、ジョイントJ1とJ2でトルクを適用する2つのVariableです。それらの値は、関数VARVAL(varX.id)およびVARVAL(varY.id)を呼び出すことで確認できます。これらはモーターの“サイズ”を設定するために使用できます。

  4. Variableを使用してMATLABと通信します。

    詳しい説明については、XMLシンタックスの例4をご参照ください。ここで、Pythonの実装について説明します。

    プラント出力は次のように定義できます:
    # Define VARIABLE-12
    expr1 ="AY({i}, {j})".format(i=m6565.id, j=m7676.id)
    var12 = Variable (function=expr1)
    
    # Define VARIABLE-13
    expr2 ="WY({i}, {j})".format(i=m6565.id, j=m7676.id)
    var13 = Variable (function=expr2)
    
    # Define the Plant Output
    plantOutput = Poutput (variables=[var12, var13])
  5. Variableを使用してモデル内の非線形の関係を定義します。

    詳しい説明については、XMLシンタックスの例5をご参照ください。ここで、Pythonの実装について説明します。

    ステアリングホイール上の回転ジョイントが、Iマーカー=m6565およびJマーカー=m7676で定義されるとします。ステアリング角とステアリングギア比を定義する変数を以下に示します。
    # Define the steering angle
    expr1 ="RTOD*ABS(AZ({i}, {j})".format(i=m6565.id, j=m7676.id)
    var1  = Variable (function=expr1, label="Steering gear angle in degrees")
    
    # Define the steering gear ratio
    expr2 ="step (varval({v}), 100, 1000, 150, 1500".format(v=var1.id)
    var2  = Variable (function=expr2, label="Steering gear ratio")
  6. Variableを使用して“ソフト”拘束を定義します。
    詳しい説明については、XMLシンタックスの例6をご参照ください。ここで、Pythonの実装について説明します。
    # Compute the violation from the "set point" for the angle and penalize it
    expr ="theta({i},{j})-60D".format(i=markerI.id, j=markerJ.id)
    var  = Variable (function=expr, penalty=1000, penalty1=10, label="control force")
    Force_Penaltyでは、より自然にソフト拘束を定義できます。
    # Compute the violation from the "set point" for the angle and penalize it
    expr ="theta({i},{j})-60D".format(i=markerI.id, j=markerJ.id)
    controlForce  = Pforce (function=expr, penalty=1000, penalty=10, 
    auto_balance="PENALTY", label="control force")

コメント

  1. プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
  2. Variableの詳細については、Reference: Variableをご参照ください。