Constraint: Primitive

Model ElementConstraint_Jprimを使用して、相対的な並進運動または回転運動が可能となる条件を指定することで、2つのボディ間の自由度を除去します。

説明

Constraint_JprimConstraint_Jointと異なる点は、前者では、後者のように具体的な物理的実現ができない数学的拘束が指定されることです。

フォーマット

<Constraint_Jprim
    id           = "integer"
  [ label        = "string" ]    
    i_marker_id  = "integer"
    j_marker_id  = "integer"
    type         = {                    
                    "ATPOINT"
                    "INLINE"
                    "INPLANE"
                    "ORIENTATION"
                    "PARALLEL_AXES"
                    "PERPENDICULAR"
                    }
  [ is_virtual   = {"FALSE" | "TRUE"} ]
/>

属性

id
要素識別番号(整数 > 0)。これは、すべてのConstraint_Jprim要素の中で一意の番号です。このパラメータは必須です。
label
Constraint_Jprim要素の名前。これは文字列です。
i_marker_id
1つ目のボディ上の結合を定義するReference_Markerを指定します。ボディは、剛体、弾性体、またはポイントボディのいずれかです。このパラメータは必須です。
j_marker_id
1つ目のボディ上の結合を定義するReference_Markerを指定します。ボディは、剛体、弾性体、またはポイントボディのいずれかです。このパラメータは必須です。
type
i_marker_idj_marker_idの間の拘束のタイプを指定します。は、次のいずれかにできます:
  • "ATPOINT"
  • "INLINE"
  • "INPLANE"
  • "ORIENTATION"
  • "PARALLEL_AXES"
  • "PERPENDICULAR"

このパラメータは必須です。

これらのプリミティブタイプの詳細については、コメントをご参照ください。

is_virtual
仮想拘束なのか通常の拘束なのかを定義します。is_virtualTRUEに設定されている場合、拘束は仮想拘束として実装されます。is_virtualFALSEに設定されている場合、拘束は通常の代数拘束として実装されます。このパラメータは省略可能です。デフォルトはFALSEです。仮想ジョイントの詳細については、Constraint: Jointコメント22をご参照ください。

以下は、INPLANEタイプのConstraint_Jprimの実装です。

<Constraint_Jprim
     id                  = "301001"
     type                = "INPLANE"
     i_marker_id         = "30102021"
     j_marker_id         = "30103020"
/>

コメント

  1. Constraint_Jprimは、モデル内の2つのボディ間の一連のホロノミックな拘束を定義します。これらの拘束では、2つの結合されたボディは特定方向の相対運動のみが可能です。他のすべての方向の運動は禁止されます。
  2. 最も一般的な形では、拘束には変位、速度、および時間を含めることができます。Constraint_Jprim要素の特徴は、変位のみが含まれるという点です。これらの拘束関係に、速度や時間は明示的に含まれません。したがって、これらの拘束関係によってシステムのエネルギーが追加されたり除去されたりすることはありません。
  3. 内部の反力や反モーメントは、Constraint_Jprim内の各拘束に関連付けられています。この内部反作用によって、コネクター内で指定されたボディの相対運動が拘束を満たすことが保証されます。Constraint_Jprim内の反力にアクセスするには、JPRIM()関数式を使用します。

    プリミティブの各Reference_Markerにおける内部の反力と反モーメントは、ニュートンの運動の第三法則に従います。図 1に示すように、これらは、互いに打ち消し合うような大きさと方向で作用します。



    図 1. Constraint_Jprim内の内部の力とトルクの釣り合い
  4. モデル内の拘束は“過剰指定”できます。この場合は、システムは過拘束されていると表現され、これらの拘束は“余剰”と呼ばれます。次の図 2に示しているフレームに結合されたドアについて考えてみましょう。


    図 2. 余剰に拘束されたシンプルなシステム

    ドアとフレームはどちらも剛体と見なされます。3つのヒンジによってドアがフレームに結合されることで、ドアは開閉が可能となります。これらのヒンジは回転ジョイントとしてモデル化されます。この理想化では、ヒンジは無質量の剛体と見なされます。各ヒンジによって、拘束:ジョイント拘束:PTCVで赤い矢印で示された軸の周りでドアとフレームの間の回転が可能になります。

    この理想化では、以下のことに留意する必要があります:
    • これらのヒンジの軸は完全に同一線上にある必要があります。そうでない場合、ドアは開閉できません。
    • 本当に必要なのは1つのヒンジのみです。他の2つは“余剰”です。

      このようなシステムが与えられると、MotionSolveは、過拘束を検知し、2つのヒンジに相当するものをモデルから除去して、正しいモーションが予測されるようにシステムを解析します。

      2つのヒンジが解析プロセスから除去されると、それらの反力はゼロに設定されます。明らかに、これは想定外の挙動です。現実には、3つのヒンジすべてが反力と反トルクを有しています。これは、システムの理想化に関する問題です。2つのボディ(ドアとフレーム)の少なくとも1つが弾性化されると、各ヒンジでより現実的な反作用が見られます。

  5. type = "ATPOINT"

    これは、Body-2上のReference_Markerの原点が、Body-1に配置されたReference_Markerの原点と常に重なり合うことを要求する拘束プリミティブです。あらゆる回転が可能ですが、並進は一切できません。 図 3 は、ATPOINT拘束プリミティブの概略図を示しています。



    図 3. ATPOINT拘束プリミティブの概略図
  6. type = "Inline"

    これは、Body-1上のReference_Markerの原点が、Body-2に配置されたReference_Markerのz軸に沿って並進することを要求する拘束プリミティブです。すべての回転が可能です。 図 4 は、INLINEプリミティブの概略図を示しています。



    図 4. INLINEプリミティブの概略図

    このインラインプリミティブは、2つの並進自由度を拘束します。これによって、Body-2上のReference_Markerのx軸とy軸に沿った並進が妨げられます。

  7. type = "INPLANE"

    これは、Body-1上のReference_Marker(下図のI)の原点が、J Reference_Markerの原点とz軸によって定義されるXY平面内に留まるようにすることを要求する拘束プリミティブです。 図 5 は、INPLANEプリミティブの概略図を示しています。



    図 5. INPLANEプリミティブの概略図

    INPLANEプリミティブは、1つの並進自由度を拘束します。これによって、Body-2上のReference_Marker Jのz軸に沿った並進が妨げられます。すべての回転が可能です。

  8. type = "ORIENTATION"

    図 6 は、ORIENTATIONプリミティブの概略図を示しています。これは、Body-1上のReference_Marker(下図のI)の向きが、Body-2上のReference_Marker(下図のJ)の向きと常に同じになるようにすることを要求します。



    図 6. ORIENTATIONプリミティブ

    ORIENTATIONプリミティブは、3つの自由度(すべて回転自由度)を除去します。Body-2に対するBody-1の3つすべての並進が可能です。

  9. type = "PARALLEL_AXES"
    図 7 は、PARALLEL_AXESプリミティブの概略図を示しています。このプリミティブは、Reference_Marker(下図のI)のz軸が、Body-2上のReference_Marker(下図のJ)のz軸に常に平行になるように、Body-1を拘束します。


    図 7. PARALLEL_AXESプリミティブ

    PARALLEL_AXISプリミティブは、2つの回転自由度を除去します。Body-1の回転は、J Reference_Markerのz軸の周りについてのみ可能です。並進については3つすべて可能です。

  10. type = "PERPENDICULAR"

    図 8 は、PERPENDICULAR_AXESプリミティブの概略図を示しています。このプリミティブは、Reference_Marker(下図のI)のz軸が、Body-2上のReference_Marker(下図のJ)のz軸に常にPERPENDICULARになるように、Body-1を拘束します。



    図 8. PERPENDICULAR_AXESプリミティブ

    PERPENDICULAR_AXISプリミティブは、1つの自由度を除去します。Body-1の回転は、I Reference_Markerのz軸の周りとJ Reference_Markerのz軸の周りについてのみ可能です。並進については3つすべて可能です。