Variable
Model ElementVariableは、MotionSolveで代数状態を定義します。
クラス名
Variable
説明
- 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 () |
使用法
# 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式を定義する文字列。
- function
- 有効なユーザー関数MotionSolve式を定義する文字列。
- routine
- 文字列
- function
- 有効なユーザー関数MotionSolve式を定義する文字列。
- routine
- Python内の呼び出し可能な関数へのポインタ
- id
- 整数
- label
- 文字列
例
- 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)
- 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)
- 暗黙的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:モーターのサイズを指定するジョイントに適用されるトルクを確認します。
varXとvarYは、それぞれ、ジョイントJ1とJ2でトルクを適用する2つのVariableです。それらの値は、関数VARVAL(varX.id)およびVARVAL(varY.id)を呼び出すことで確認できます。これらはモーターの“サイズ”を設定するために使用できます。
- 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])
- 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")
- 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")
コメント
- プロパティの概要、使用理由、および拡張方法については、プロパティをご参照ください。
- Variableの詳細については、Reference: Variableをご参照ください。