Force: Two Body Scalar

Model ElementForce_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          = "PYTHON" | "MATLAB"
     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
ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。

次の例は、回転ジョイント内の単純な摩擦モデルを、このコンポーネントを使用してモデル化する方法を示しています。

最初の静的摩擦モデルは、レオナルドダビンチによって開発されました。摩擦力は荷重に比例し、運動の向きと反対で、接触面積とは無関係です。クーロン(1785)は、このモデルをさらに発展させ、そのモデルで説明された摩擦現象は、クーロン摩擦として知られるようになりました。

クーロン摩擦モデルを下の図1aに示します。ただし、このモデルは、速度ゼロで無限の勾配(不連続性)となるため、数値的に実装することは困難です。一般的には、ジョイントでの相対滑りが遷移値Vsより小さい場合、この無限勾配をステップ関数を使用して近似します。これを図1bに示します。ここでの目的は、図1bの摩擦モデルをモデル化することです。



図 1. クーロン摩擦モデルと平滑化されたクーロン摩擦モデル
この例では、次のように想定します:
  • 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で簡単に実装できます。
  • ジョイントでの反トルクの摩擦力寄与は、この例では無視しています。これは、回転ジョイント内でのジョイント軸および軸長に沿った横力の分布を想定することで、組み入れることができます。
  • 軸力によって生じる摩擦力はモデル化されていません。これは、ジョイントの内半径と外半径間の環形状での軸力の分布を想定することで、組み入れることができます。

コメント

  1. i_marker_idは、Force_Scalar_TwoBodyの作用点として指定されます。 j_marker_idは反作用点です。
  2. 並進の作用反作用Force_Scalar_TwoBodyでは、i_marker_idの力の方向は、j_marker_idからi_marker_idへの単位ベクトルで定義されます。j_marker_id上の力は、大きさが同じで向きが逆です。


    図 2. 作用反作用の並進Force_Scalar_TwoBodyReference_MarkerJからReference_MarkerIへのラインに沿って力が働きます。
  3. 並進の作用のみのForce_Scalar_TwoBodyでは、i_marker_idの力の方向は、下の図に示すj_marker_idのz軸に沿った単位ベクトルで定義されます。 j_marker_idを含むボディに対する反力はありません。


    図 3. 作用のみの並進Force_Scalar_TwoBodyReference_MarkerIでの力は、Reference_MarkerJのz軸に沿って働きます。
  4. 回転の作用反作用Force_Scalar_TwoBodyでは、トルクの方向は、j_marker_idのz軸で定義されます。i_marker_id j_marker_idのz軸は、常に平行である必要があります。


    図 4. 作用反作用の回転Force_Scalar_TwoBody。トルクは常に、Reference_MarkerJのz軸に沿って働きます。
  5. 回転の作用のみのForce_Scalar_TwoBodyでも、トルクの方向は、j_marker_idのz軸で定義されます。j_marker_idを含むボディに対する反トルクはありません。


    図 5. 作用のみの回転Force_Scalar_TwoBody。トルクは常に、Reference_MarkerJのz軸に沿って働きます。
  6. 力およびトルクの式(またはユーザーサブルーチン)は、滑らかである必要があり、微分可能であることが望まれます。これにより、数値的な手法で効果的に力を処理することができます。
  7. VX()VY()VZ()などの速度を使用して減衰力を計算する場合、適切な参照フレームで時間微分を取るようにしてください。
  8. Force_Scalar_TwoBodyは、すべてのタイプのボディ(Body_RigidBody_Flexible、およびBody_Point)に作用できます。