Constraint: CVCV
Model ElementConstraint_CVCVは、高次対偶拘束を定義します。この拘束の内容は、一方のボディに固定された3D曲線が、もう一方のボディに固定された3D曲線上を転がってスライドするというものです。これらの曲線は、固有の接触ポイントと、その接触ポイントにおける共通接線を有している必要があります。
フォーマット
<Constraint_CVCV
id = "integer"
[ label = "string" ]
i_marker_id = "integer"
i_curve_id = "integer"
[ i_disp_x0 = "real" ]
[ i_disp_y0 = "real" ]
[ i_disp_z0 = "real" ]
[ i_vel0 = "real" ]
j_marker_id = "integer"
j_curve_id = "integer"
[ j_disp_x0 = "real" ]
[ j_disp_y0 = "real" ]
[ j_disp_z0 = "real" ]
[ j_vel0 = "real" ]
[ is_no_slip = "real" ] >
</Constraint_CVCV>
属性
- id
- 要素識別番号(整数 > 0)。これは、すべてのConstraint_CVCV要素の中で一意の番号です。
- label
- Constraint_CVCV要素の名前。
- i_marker_id
- i_curveのポイントが定義される座標系を定義するReference_Markerを指定します。これにより、この曲線が“エッチング”されるボディも暗黙的に定義されます。この曲線はこのボディと共に動きます。
- i_curve_id
- 曲線定義を含むReference_ParamcurveのIDを指定します。
- i_disp_x0, i_disp_y0, i_disp_z0
-
この3つのパラメータによって、入力コンフィギュレーションにおけるi_curve上の接触ポイントの位置が、i_marker_id座標系で指定されます。
これら3つのパラメータはセットで扱われます。3つすべてを指定するか、いずれも指定しないかのどちらかです。
これらのパラメータは省略可能です。
- i_vel0
- 接触ポイントの滑り速度を指定します。この速度は、i_marker_idの原点に結合された観測視点から測定されます。i_vel0のデフォルト値は0.0です。省略した場合、システム拘束条件が満たされるように、MotionSolveによってこの値が変更されることがあります。
- j_marker_id
- j_curveのポイントが定義される座標系を定義するReference_Markerを指定します。これにより、この曲線が“エッチング”されるボディも暗黙的に定義されます。この曲線はこのボディと共に動きます。
- j_curve_id
- 曲線定義を含むReference_ParamcurveのIDを指定します。
- j_disp_x0, j_disp_y0, j_disp_z0
-
この3つのパラメータによって、入力コンフィギュレーションにおけるj_curve上の接触ポイントの位置が、j_marker_id座標系で指定されます。
これら3つのパラメータはセットで扱われます。3つすべてを指定するか、いずれも指定しないかのどちらかです。
これらのパラメータは省略可能です。
- j_vel0
-
接触ポイントの滑り速度を指定します。この速度は、i_marker_idの原点に結合された観測視点から測定されます。これは、地面上の観測視点から測定されるものとは異なります。
j_vel0のデフォルト値は0.0です。省略した場合、指定されない場合のシステム拘束条件が満たされるように、MotionSolveによってこの値が変更されることがあります。
- is_no_slip
-
2つの曲線が相互に滑ったりスライドしたりできるかどうかを指定します。この属性を"TRUE"に設定した場合、2つの曲線間で滑りは発生しません(すなわち、追加の自由度は除去されます)。
is_no_slipのデフォルト値は"FALSE"です。
例
次の図は、Constraint_CVCVを使用してモデル化されたシンプルなカムフォロワーシステムを示しています。このシステムは、カムフォロワーの接触挙動を定義します。カムCがピボットの周りを回転すると、曲線間の拘束によりフォロワーが上下運動します。フォロワーFはシャフトSに固定されているため、シャフトSも上下運動します。このようにして、カムの回転運動がシャフトの並進運動に変換されます。カムの外形によって、出力シャフトのモーションが決まります。
カムCの外形を定義する曲線ポイントは、Reference_Marker I(id = 1023)の座標系で定義されます。曲線ポイントは、idが123であるReference_Paramcurveオブジェクトを使用して定義されます。
カム曲線上とフォロワー曲線上の接触ポイントの初期推測は通常役に立ちます。これにより、高次対偶接触の初期コンフィギュレーションが定義されます。カム曲線上の接触ポイント位置は、Iの座標系で[1.466, 5.66, 0]とします。フォロワー曲線上の接触ポイント位置は、Jの座標系で[-0.122, 0.852, 0]とします。
Constraint_CVCVオブジェクトは、次のように定義できます:
<Constraint_CVCV
id = "1"
i_marker_id = "1023"
i_curve_id = "123"
i_disp_x0 = "1.466"
i_disp_y0 = "5.66"
i_disp_z0 = "0."
j_marker_id = "2046"
j curve_id = "246"
j disp_x0 = "-0.122"
j disp_y0 = "0.852"
j disp_z0 = "0." >
</Constraint_CVCV>
コメント
- 曲線間の拘束は、2つのパート間の接触ポイントがシステムの運動時に変化するカムをモデル化するのに便利です。ただし、モデルの物理特性に基づけば一方の曲線が他方の曲線からリフトオフする必要がある状況であっても、これらの曲線は常に接触したままとなります。
- リフトオフが発生すべきであったかどうかは、拘束力を調べることで確認できます。リフトオフをモデル化するには、Force_ContactまたはForce_TwoBody要素を使用します。
- 曲線間の拘束によって、システムから3つの自由度が取り除かれます。1つの拘束によって、接触ポイントにおける2本の曲線の接線が常に平行になるように保たれます。この拘束によって、接触ポイントにおける共通接線に垂直な任意の軸を中心にしてボディが互いの周りを回転することが妨げられます。他の2つの拘束によって、接触ポイントにおける共通接線に垂直な平面内の並進運動が妨げられます。
- 1つ目の曲線のボディが空間内に固定されている場合、2つ目の曲線は、1つ目の曲線に沿ったスライド、1つ目の曲線上の転がり、接触ポイントにおける共通接線の周りの回転の3通りの動きが可能です。
- 曲線間の拘束によって、これらの曲線が同一平面上にあることは強制されません。いずれか一方が3D曲線であっても、両方が3D曲線であってもかまいません。これらの曲線は、接触ポイントにおける共通接線の周りを回転できるため、両方の曲線が平面曲線である場合でも、これらの曲線はその平面外で動くことができます。
- Constraint_CVCVでは、開いた曲線と閉じた曲線の両方がサポートされています。
- 開いた曲線には、明確に定義された空間範囲があります。この曲線は、αmin <= α <= αmaxという範囲でのみ定義されます(αは曲線パラメータ)。曲線間の拘束を適用しているときは、MotionSolveはこの範囲外の解を見つけることができます。接触ポイントがαの範囲内に常に収まるように、この曲線の端部で適切な力を定義する必要があります。
- Constraint_CVCV内の曲線は、凸曲線であっても非凸曲線であってもかまいません。凸曲線とは、直線と2箇所で交差する曲線です。凸曲線と非凸曲線の例を以下の図に示します。 凸曲線と非凸曲線の図の左側にあるグレーの閉じた曲線は、凸曲線の例です。どのような直線も、この曲線とは2箇所で交差します。対照的に、この図の右側の開いた曲線は非凸曲線です。この形状と3箇所以上で交差する直線を描くことができます。
図 2. 凸曲線と非凸曲線
図 3. 単一接触と複数接触
非凸曲線の場合は、上図の右側のように複数接触が可能になります。ただし、複数接触が必ず生じるというわけではありません。単一接触と複数接触の図の左側では、曲線の1つが明らかに非凸曲線であるにもかかわらず、1つの接触ポイントしかありません。したがって、非凸曲線の使用時は、シミュレーション中に常に1つの接触ポイントのみが存在するように注意する必要があります。
- Constraint_CVCVに属している拘束の1つが余剰であると宣言されている場合は、モデルが正しいかどうか疑ってください。このような拘束は、想定外の挙動をもたらし、モデルが正しく構築されていないことを示しています。
- MotionSolveでは、接触ポイントの位置を正確に特定するための初期検索が実行されます。i_disp_x0、i_disp_y0、i_disp_z0、j_disp_x0、j_disp_y0、j_disp_z0の各属性は必須ではありませんが、これらがわかっている場合は指定することをお勧めします。