Motion: Joint Based

Model ElementMotion_Jointは、ジョイント内の自由度におけるモーション入力を定義します。

説明

この入力では、次の3つのタイプのジョイントのみを使用できます:
  • 並進ジョイント(並進運動)
  • 回転ジョイント(回転運動のみ)
  • 円筒ジョイント(回転運動か並進運動のいずれか)
  • 点-曲線間(パラメトリック曲線運動)

モーション特性に関する式を定義します。この式は、変位、速度、または加速度を定義するために使用できます。式は通常時間の関数です。システム状態に依存するモーションの式を作成する場合は、コメント8をご参照ください。

並進運動は、次のいずれかの方法で定義します:
  • DZ(I,J,J) - 式 = 0: 並進変位運動の場合
  • VZ(I,J,J,J) - 式 = 0: 並進速度運動の場合
  • ACCZ(I,J,J,J) - 式 = 0: 並進加速度運動の場合
回転運動は、次のいずれかの方法で定義します:
  • AZ(I,J) - 式 = 0: 回転変位運動の場合
  • WZ(I,J,J) - 式 = 0: 回転速度運動の場合
  • WDTZ(I,J,J,J) - 式 = 0: 回転加速度運動の場合
パラメトリック曲線運動は、次のいずれかの方法で定義します:
  • 曲線に沿って移動した距離 = 変位運動に関する式
  • 曲線に沿って移動した速度 = 速度運動に関する式
  • 曲線に沿って移動した加速度 = 加速度運動に関する式

上記において、Iはジョイントのi_marker_idJ j_marker_idです。ソフトウェアで方程式の状態依存の項が定義され、ユーザーが式、モーションのタイプ、および入力を指定するジョイントを定義します。

並進運動では、j_marker_idのz軸によって、モーションの正の方向が定義されます。i_marker_idの原点はこのラインに沿って移動します。変位ゼロでは、2つのマーカーの原点は一致します。

回転運動では、i_marker_idは、共通のz軸の周りを回転します。正のモーションにより、反時計回りが生じます。

パラメトリック曲線運動では、距離がパラメトリック曲線上の初期点位置から測定されます。この距離は、パラメータUが増加するときは曲線の方向に沿って正で、反対方向に沿って負になります。

反力が各Motion_Jointと関連付けられます。この反力により、要求されたモーションを適用するために必要な力またはトルクがシステムに伝えられます。

式が時間の関数である場合、エネルギーはシステムに追加されるか、システムから削除されます。モーション入力は、無限の力またはトルク容量を持つアクチュエータまたはモーターとみなすことができます。

提供する式は、MotionSolve式またはユーザー定義サブルーチンを使用して指定できます。

フォーマット:式ベースのモーション

<Motion_Joint
       id            = "integer"
     [ label         = "string" ]       
       joint_id      = "integer"
       motion_type   = { "T" | "R" | "P" }
   {   
       val_type      = "D"
       
       val_type      = "V"
       ic_disp       = "real"
       
       val_type      = "A"
       ic_disp       = "real"
       ic_vel        = "real"
   }
   {   
       type          = "EXPRESSION"
       expr          = "motionsolve_expression"
   
       | type        = "USERSUB"
       usrsub_dll_name         = "valid_path_name"
       usrsub_param_string     = "USER( [[par_1 [, ...][,par_n]] )"
       usrsub_fnc_name         = "custome_fnc_name"

       | type        = "USERSUB"
       script_name             = valid_path_name
       interpreter             = "PYTHON" | "MATLAB"
       usrsub_param_string     = "USER( [[par_1 [, ...][,par_n]] )"
       usrsub_fnc_name         = "custom_fnc_name"   
   } 
</Motion_Joint> 

フォーマット:プラント入力ベースのモーション

<Motion_Joint
       id            = "integer"
     [ label         = "string" ]       
       joint_id      = "integer"
       motion_type   = { "T" | "R" | "P" }
       type          = "PLANT_INPUT"
       pinput_id     = "integer"
       val_index     = "integer"
</Motion_Joint>

属性

id
要素識別番号(整数 > 0)。この番号は、すべてのMotion_Joint要素の中で一意です。
label
Motion_Joint要素の名前。
joint_id
モーション入力が適用されるジョイントのIDを指定します。
motion_type
適用されるモーションのタイプを指定します。モーションタイプは、並進("T")、回転("R")、またはパラメトリック曲線("P")です。"T"、"R"、または"P"のいずれかを指定します。並進ジョイント上のモーションは常にタイプ“T”です。回転ジョイント上のモーションは常にタイプ“R”です。円筒ジョイント上のモーションはいずれかのタイプにできますが、両方にはできません。点-曲線間のモーションは、常に、曲線に対して接線方向です。
val_type
モーションが変位入力(D)、速度入力(V)、または加速度入力(A)のうちどれを適用するかを指定します。“D”、“V”、または“A”から1つの値を選択する必要があります。
ic_disp
val_type = "V"またはval_type = "A"の場合、必要な変位の初期条件を指定します。
ic_vel
val_type = "A"の場合、必要な速度の初期条件を指定します。
type
EXPRESSION”、“USERSUB”、または“PLANT_INPUT”のいずれかを選択します。モーションの定義方法を指定します。EXPRESSIONオプションは、モーションの値が実行時に評価できるMotionSolveの式であることを指定します。USERSUBオプションは、モーションの値がユーザー定義のサブルーチンで指定されることを示します。パラメータ“usrsub_param_string”および“usrsub_dll_name”は、このユーザー定義サブルーチンに関する詳細情報を提供するために使用されます。PLANT_INPUTオプションは、モーションがプラント入力として使用されることを示します。“val_index”が適用レベルを定義し、“pinput_id”がControl_PlantInputを参照します。
expr
モーション値を定義する式を定義します。このパラメータは、type = EXPRESSIONである場合にのみ使用します。任意の有効な実行時MotionSolve式を入力として指定できます。
usrsub_dll_name
ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンMOTSUBを読み込みます。
usrsub_param_string
データファイルからユーザー定義のMOTSUBに渡されるパラメータのリスト。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。
usrsub_fnc_name
ユーザーサブルーチンMOTSUBの代替名を指定します。
script_name
usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
interpreter
ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABPYTHON、またはCOMPOSEです。
val_index
位置、速度、および加速度のレベルで、拘束の同時適用を定義します。
“3”
モーションは、位置レベルでのみ適用されます。
“2”
モーションは、位置と速度のレベルで同時に適用されます。
“1”
モーションは、位置、速度、および加速度のレベルで同時に適用されます。Motion: Marker Basedをご参照ください。
pinput_id
モーション入力が適用されるControl_PlantInput IDを指定します。

最初の例では、モーション入力として実験データをシステムに供給する方法を示します。

自動車のハンドリングシミュレーションは、多くの場合、半解析的なシミュレーション手法を使用して実施されます。テストされる車両には、走行中のステアリングホイール角を測定するためのセンサーが取り付けられています。車両は性能試験場を走行します。ドライバは、実際のステアリング状況をシミュレートする、さまざまな操作を実行できます。このデータは、時間の関数として収集されます。

実験データは、ノイズや高周波成分を除去するよう、“クリーニング”されます。次に、車両ハンドリングスタディに適した車両モデルが、MotionSolveで作成されます。実験データがMotionSolveSPLINEとしてモデル化され、ステアリング入力として車両の解析モデルに提供されます。シミュレーションの際、ハンドリングの評価に必要な車両の挙動が収集されます。

“クリーニング”された後、ステアリング入力は図1に示すようなものになります:



図 1. 実験で測定されたステアリング入力

ステアリング入力のMotion_Jointは、次のようになります:

<Motion_Joint
     id                  = "1"
     joint_id            = "301"
     motion_type         = "R"
     val_type            = "D"
     type                = "EXPRESSION"
     expr                = "CUBSPL(Time, 0, 301001)" >
</Motion_Marker>

2つ目の例は、Motion_Jointを使用して、ウォームとホイールのモーションのメカニズムを指定する方法を示します。下の図は、このメカニズムを示しています。

図 2. ウォームホイールメカニズム

ウォームギアは、200回転 / 秒の一定速度のモーターにより駆動されます。ギア比により、ホイールはウォームに比べて遅くなります。これは、ドライブまたは持ち上げ装置の一部を理想的に形成する、減速システムです。Constraint_Joint 101は、ウォームギアシャフトとハウジング間の回転ジョイントを定義します。この回転ジョイント上のMotion_Jointは、モーターをシミュレートします。モーション定義は次のようになります:

<Motion_Joint
     id                  = "2"
     joint_id            = "101"
     motion_type         = "R"
     val_type            = "D"
     type                = "EXPRESSION"
     expr                = "200*2*PI*Time" >
</Motion_Joint>

コメント

  1. Motion_Jointには、変位領域、速度領域、加速度領域にそれぞれ1つずつ、合計3つの拘束が追加されます。
    • 変位拘束が指定されている場合、速度と加速度の拘束は、変位拘束を解析的に微分することによって得られます。
    • 速度拘束がユーザーによって指定された場合、変位拘束は速度拘束を数値的に積分することによって、加速度拘束は速度拘束を解析的に微分することによって得られます。
    • 加速度拘束が指定された場合、速度拘束は加速度拘束を数値的に積分することによって、変位拘束は速度拘束を数値的に積分することによって得られます。
  2. 微分は、入力シグナル内のノイズを増幅する傾向があります。したがって、入力として提供されるすべての式と実験データは滑らかであるようにすることが重要です。より正確には、これらは、連続な1次および2次時間導関数を持つ必要があります。実験データの補間では、AKISPL()による補間方法は避けてください。AKISPL()は、良好な1次および2次導関数を計算しません。代わりにCUBSPL()を使用してください。
  3. 積分は、入力シグナル内のノイズを削減する傾向があります。したがって、運動入力方程式として補間された実験データまたは表形式のデータを与える際に、速度の入力の使用が適切です。
  4. できる限りポイントの数が少ないカーブを定義します。3次曲線内に補間ポイント数が極端に多いと、曲線自体が滑らかに見えても、1次導関数に"揺れ"が、2次導関数に"激しい揺れ"が生じます。
  5. モーションの初期速度が、それに影響するボディの初期速度に一致することを確実にします。例えば、初期静的状態からシミュレーションが開始される場合、入力するモーションの初速はゼロであることを確認する必要があります。モーションの入力は、ボディおよびジョイントの初速度と一致しない場合にそれを無効とします。
  6. 速度の入力を使用することを決定した場合、位置は、Param_Transient要素に指定された積分誤差に対してのみ満たされる点にご留意ください。同様に、加速度の入力については、速度と位置のみが、指定された積分誤差に対し満足されます。したがって、解析的なソリューションからは多少逸れるかもしれません。これは、数値積分に基づいたあらゆる手法の限界です。
  7. モーションの拘束による反力 / トルクの時刻歴を確認することは役に立ちます。この履歴により、指定したモーションを達成するためにどれだけの反力/トルクが必要かを知ることができます。それが現実的であるかどうかは、ユーザーが確認します。さらに、モーションを適用されるフォースに置き換え、制御則を加味すると、物理的に、より意味をなすようになる場合があります。動解析におけるモーションは、コンプライアンスの余地のない"ハード"な拘束として扱われる点に留意する必要があります。
  8. DSTIFF積分器を使用している場合、モーションは、時間またはその他の状態の関数として定義できます。

    ただし、VSTIFF、MSTIFF、またはABAMが使用される場合は、モーションは時間の関数のみです。モーションを状態の関数として定義するには、要求しているシステムデータにタイムラグを適用した後、以下に示すようにこれを平滑化する必要があります。

    • Motion_Jointを使用して、2つのReference_Marker 100と200の間で検知された半径方向速度に基づく変位を適用するとします。この場合、ユーザーサブルーチンをコード化し、以下を実装する必要があります:

      EXPR(Tk+1) = VR(100,200) (Tkで評価)、

      Tk+1- Tk は、システムのサンプリング周期です。

      EXPR(Tk+1)は一定であることに注意してください。ただし、これは速度VR()がサンプリングされると必ず変化します。この実装は、サンプリングされる値が連続的でないため適切ではありません。以前にサンプリングした値で曲線をフィットさせ、曲線を外挿して滑らかな値を提供する必要があります。これを以下に記号で示します:
      EXPR(Tk+1) = CUBIC(VR(100,200)|Tk, VR(100,200)|Tk-1, VR(100,200)|Tk-2)