Force: Two Body Scalar
モデル要素Force_Scalar_TwoBodyは、2つのReference_Marker間で作用する力またはトルクを定義します。
説明
力またはトルクは、大きさと方向によって表現されます。方向は事前に定義されます(詳細についてはコメント2~6をご参照ください)。大きさは、関数式、ユーザー定義サブルーチン、Pythonスクリプト、またはMATLABスクリプトを使用して定義できます。任意のシステム状態および時間の関数にできます。
フォーマット
<Force_Scalar_TwoBody
id = "integer"
label = "Name of Force"
i_marker_id = "integer"
j_marker_id = "integer"
is_action_only = "TRUE | FALSE"
type = { "FORCE" | "TORQUE" }
{
val = "real"
|
val_expression = "motionsolve_expression"
|
usrsub_dll_name = "valid_path_name"
usrsub_param_string = "USER( [[par_1 [, ...][,par_n]] )"
usrsub_fnc_name = "fnc_name"
|
script_name = "valid_path_name"
interpreter = "string"
usrsub_param_string = "USER( [[par_1 [, ...][,par_n]] )"
usrsub_fnc_name = "fnc_name"
}
/>
属性
- id
- 要素識別番号(整数 > 0)。この番号は、すべてのForce_Scalar_TwoBody要素の中で一意です。一意にモデリング要素を識別します。
- label
- Force_Scalar_TwoBody要素の名前。
- i_marker_id
- 力が適用されるReference_Markerを指定します。これは力の作用点として指定されます。
- j_marker_id
- 同じ大きさで反対向きの反力が適用されるReference_Markerを指定します。
- is_action_only
- ブール変数。“TRUE”または“FALSE”を選択します。
- “TRUE”
- この要素は力 / トルクをIマーカーに適用しますが、Jマーカーに反力 / トルクを適用することはありません。
- "FALSE"
- この要素は力 / トルクをIマーカーに適用し、反力 / トルクをJマーカーに適用します。
デフォルト値はFALSEです。
- type
- 定義するForce_Scalar_TwoBodyのタイプを指定します。“FORCE”または“TORQUE”を選択します。
- "FORCE"
- この要素によって、2つのReference_Marker間に力が適用されます。トルクは適用されません。
- "TORQUE"
- この要素によって、2つのReference_Marker間にトルクが適用されます。力は適用されません。
- val
- 定数値の力の大きさを指定します。
- val_expression
- XML入力ファイルの関数式として力ベクトルの大きさを指定します。
- usrsub_param_string
- データファイルからユーザー定義のサブルーチンSFOSUBに渡されるパラメータのリスト。この属性は、すべてのタイプのユーザーサブルーチンおよびスクリプトに共通です。
- usrsub_dll_name
- ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンを読み込みます。
- usrsub_fnc_name
- ユーザーサブルーチンSFOSUBの代替名を指定します。
- script_name
- usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
- interpreter
- ユーザースクリプトが記述されたインタープリタ型言語を指定します(例: "PYTHON")。有効なインタプリタ言語の選択肢については、 User-Written Subroutinesを参照してください。
例
次の例は、回転ジョイント内の単純な摩擦モデルを、このコンポーネントを使用してモデル化する方法を示しています。
最初の静的摩擦モデルは、レオナルドダビンチによって開発されました。摩擦力は荷重に比例し、運動の向きと反対で、接触面積とは無関係です。クーロン(1785)は、このモデルをさらに発展させ、そのモデルで説明された摩擦現象は、クーロン摩擦として知られるようになりました。
クーロン摩擦モデルを下の図1aに示します。ただし、このモデルは、速度ゼロで無限の勾配(不連続性)となるため、数値的に実装することは困難です。一般的には、ジョイントでの相対滑りが遷移値Vsより小さい場合、この無限勾配をステップ関数を使用して近似します。これを図1bに示します。ここでの目的は、図1bの摩擦モデルをモデル化することです。
この例では、次のように想定します:
- joint_id = 7
- i_marker_id = 71; BODY1_ID = 7
- j_marker_id = 81; BODY2_ID = 8
- ジョイントの半径 = 0.44m
- µs = 0.3
- Vsub = 0.01 m/s
- 径方向のプリロード = 1167N
ジョイントでの垂直抗力は、次のように計算できます:
- Fx = JOINT(7, 2, 0, 81)
- Fy = JOINT(7, 3, 0, 81)
- Fn = SQRT (JOINT(7, 2, 0, 81)**2 + JOINT(7, 3, 0, 81)**2) + 1167
ジョイントでの滑り速度は、次のように計算できます:
- 滑り速度 = 0.44*WZ(71,81,81)
平滑化された摩擦係数は、次のように計算できます:
- m = STEP (0.044*WZ(71,81,81), -0.01, 0.3, 0.01, -0.3)
平滑化されたクーロン摩擦力は、次のとおりです:
- Ff = Fn * STEP (0.044*WZ(71,81,81), -0.01, 0.3, 0.01, -0.3)
このシナリオのForce_Scalar_TwoBodyモデリング要素は次のとおりです:
<Force_Scalar_TwoBody
id = "7"
type = "TORQUE"
i_marker_id = "71"
j_marker_id = "81"
val_expression = "(SQRT(JOINT(7, 2, 0, 71)**2 + JOINT(7, 3, 0, 71)**2) + 1167)*STEP(0.044*WZ(71,72,72),-0.01,0.3,0.01,-0.3)"
/>
このモデルでは、次の点に注目してください:
- この単純なモデルでは、スティクション、速度による摩擦の変化(ストライベック効果)、およびヒステリシスを考慮しません。
- スティクション、ヒステリシス、および摩擦補償のモデル化の詳細については、次の文献で推奨される実装をご参照ください:“Friction Models and Friction Compensation”、H. Olsson、K.J.Åström、C. Canudas de Wit、M. GäfvertおよびP. Lischinsky、1997年これらは、MotionSolveで簡単に実装できます。
- ジョイントでの反トルクの摩擦力寄与は、この例では無視しています。これは、回転ジョイント内でのジョイント軸および軸長に沿った横力の分布を想定することで、組み入れることができます。
- 軸力によって生じる摩擦力はモデル化されていません。これは、ジョイントの内半径と外半径間の環形状での軸力の分布を想定することで、組み入れることができます。
コメント
- i_marker_idは、Force_Scalar_TwoBodyの作用点として指定されます。 j_marker_idは反作用点です。
- 並進の作用反作用Force_Scalar_TwoBodyでは、i_marker_idの力の方向は、j_marker_idからi_marker_idへの単位ベクトルで定義されます。j_marker_id上の力は、大きさが同じで向きが逆です。
図 2. 作用反作用の並進Force_Scalar_TwoBody。Reference_MarkerJからReference_MarkerIへのラインに沿って力が働きます。
- 並進の作用のみのForce_Scalar_TwoBodyでは、i_marker_idの力の方向は、下の図に示すj_marker_idのz軸に沿った単位ベクトルで定義されます。 j_marker_idを含むボディに対する反力はありません。
図 3. 作用のみの並進Force_Scalar_TwoBody。Reference_MarkerIでの力は、Reference_MarkerJのz軸に沿って働きます。
- 回転の作用反作用Force_Scalar_TwoBodyでは、トルクの方向は、j_marker_idのz軸で定義されます。i_marker_id とj_marker_idのz軸は、常に平行である必要があります。
図 4. 作用反作用の回転Force_Scalar_TwoBody。トルクは常に、Reference_MarkerJのz軸に沿って働きます。
- 回転の作用のみのForce_Scalar_TwoBodyでも、トルクの方向は、j_marker_idのz軸で定義されます。j_marker_idを含むボディに対する反トルクはありません。
図 5. 作用のみの回転Force_Scalar_TwoBody。トルクは常に、Reference_MarkerJのz軸に沿って働きます。
- 力およびトルクの式(またはユーザーサブルーチン)は、滑らかである必要があり、微分可能であることが望まれます。これにより、数値的な手法で効果的に力を処理することができます。
- VX()、VY()、VZ()などの速度を使用して減衰力を計算する場合、適切な参照フレームで時間微分を取るようにしてください。
- Force_Scalar_TwoBodyは、すべてのタイプのボディ(Body_Rigid、Body_Flexible、およびBody_Point)に作用できます。