Constraint: Coupler

Model ElementCOUPLERは、2つまたは3つのジョイントの自由度間の代数的な関係を定義します。

説明

この拘束要素は、理想化された平歯車、ラックアンドピニオンギア、および作動装置を、ジョイントセット内の変位同士を関連付ける単純な拘束としてモデル化するために使用できます。

フォーマット

<Constraint_Coupler
     id                     =  "integer"
   [ label                  =  "string" ]
     joint1_id              =  "integer"
     freedom_1              =  { "T" | "R" }
     joint2_id              =  "integer"
     freedom_2              =  { "T" | "R" }
   [
     joint3_id              =  "integer"
     freedom_3              =  { "T" | "R" }
   ]
   {
        coefficients        =  "double, double [, double]"
   |
        usrsub_dll_name     =  "valid_path_name"
        usrsub_param_string =  "USER ( [[par_1][, ...][, par_n]] )" 
        usrsub_fnc_name     =  "custom_fnc_name" >
   |
        script_name         =  valid_path_name
        interpreter         =  "PYTHON" | "MATLAB"
        usrsub_param_string =  "USER( [[par_1][, ...][, par_n]] )"
        usrsub_fnc_name     =  "custom_fnc_name"
   }
   [ is_virtual          = {"FALSE" | "TRUE"} ]
</Constraint_Coupler>

属性

id
要素識別番号(整数 > 0)。これは、すべてのConstraint_Coupler要素の中で一意の番号です。
label
Constraint_Coupler要素の名前。
joint1_id
拘束関係を定義するために使用される自由度を有する1つ目のジョイントのIDを指定します。 1
freedom_1
1つ目のジョイントに使用されている自由度タイプを定義します。並進ジョイントと回転ジョイントについては、自由度タイプは明らかです。円筒ジョイントについては、自由度タイプを指定する必要があります。

"T"は、ジョイントの並進自由度が使用されることを指定します。

"R"は、ジョイントの回転自由度が使用されることを指定します。

joint2_id
拘束関係を定義するために使用される自由度を有する2つ目のジョイントのIDを指定します。 1
freedom_2
2つ目のジョイントに使用されている自由度タイプを定義します。並進ジョイントと回転ジョイントについては、選択肢は明らかです。円筒ジョイントについては、自由度タイプを指定する必要があります。

"T"は、ジョイントの並進自由度が使用されることを指定します。

"R"は、ジョイントの回転自由度が使用されることを指定します。

joint3_id
拘束関係を定義するために使用される自由度を有する3つ目のジョイントのIDを指定します。joint3_idはオプションのパラメータです。指定しない場合は、2つのジョイント自由度のみが指定されていると見なされます。 1
freedom_3
3つ目のジョイントに使用されている自由度タイプを定義します。並進ジョイントと回転ジョイントについては、選択肢は明らかです。円筒ジョイントについては、自由度タイプを指定する必要があります。

"T"は、ジョイントの並進自由度が使用されることを指定します。

"R"は、ジョイントの回転自由度が使用されることを指定します。

coefficients
これにより、カプラーに関連付けられた拘束を定義するときに使用されるスケールファクターが定義されます。 1

2つのジョイントのみを使用してカプラー拘束を指定する場合、ratioには2つの実数値が与えられます。3つのジョイントを使用する場合、ratioには3つの実数値を指定する必要があります。

usrsub_param_string
データファイルからユーザー定義のサブルーチンCOUSUBCOUXX、およびCOUXX2に渡されるパラメータのリスト。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。この属性は、すべてのタイプのユーザーサブルーチンおよびスクリプトに共通です。
usrsub_dll_name
ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンCOUSUBCOUXX、およびCOUXX2を読み込みます。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。
usrsub_fnc_name
ユーザーサブルーチンCOUSUBの代替名を指定します。
script_name
usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
interpreter
ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
is_virtual
仮想拘束なのか通常の拘束なのかを定義します。is_virtualTRUEに設定されている場合、拘束は仮想拘束として実装されます。is_virtualFALSEに設定されている場合、拘束は通常の代数拘束として実装されます。このパラメータは省略可能です。デフォルトはFALSEです。仮想ジョイントの詳細については、Constraint: Jointコメント22をご参照ください。

次の図は、直角ベベルギアペアを示しています。ピッチ半径がR1のベベルギアAは、回転ジョイント1によって地面に結合されています。このギアは、固定軸の周りを回転できます。ピッチ半径がR2のベベルギアCは、回転ジョイント2によって地面に結合されており、固定軸の周りを回転できます。

注目するのは、2つの回転ジョイントの回転の連結など、ベベルギアセットの全体的な効果の定義です。2つのギア間の接触で発生する歯の力については注目しません。また、ギアの噛み合わせは完璧であり、バックラッシュ、歯のたわみ、偏心などの製造欠陥はないものとします。

ギアAの回転をθ1、ギアCの回転をθ2とします。これら2つの回転量を次の代数的関係によって関連付けることができます:(1)

R11 + R22 = 0

R1 = 10mm、R2 = 15mmの場合、式 1の効果を捕捉するために、Constraint_Couplerは次のように定義できます:
図 1. Constraint_Couplerの一般的な使用法
<Constraint_Coupler
     id              = "1"
     joint1_id       = "1"
     freedom_1       = "R"
     joint2_id       = "2"
     freedom_1       = "R"
     coefficients    = "10.0,15.0"
</Constraint_Coupler>
2つ目の例は、Constraint_Couplerを使用してラックアンドピニオンシステムをモデル化する方法を示しています。次の図は、ラックアンドピニオン式のステアリングシステムを示しています。ピニオンギアPは、回転ジョイント41によってハウジング(非表示)に結合されています。このジョイントによって、紙の平面に対して垂直な固定軸の周りをピニオンが回転できるようになります。ラックRは、並進ジョイント51上で左から右にスライドします。
図 2. Constraint_Couplerとしてモデル化されたラックアンドピニオンシステム

ピニオンギアの半径は30mm、システムの長さ単位はmmであるとします。このシナリオを定義するConstraint_Couplerは、次のように記述できます:

<Constraint_Coupler
     id              = "2"
     joint1_id       = "51"
     freedom_1       = "T"
     joint2_id       = "41"
     freedom_2       = "R"
     coefficients    = "1.0,30.0"
</Constraint_Coupler >

次の図は、Constraint_Couplerの3つ目の例を示しています。この場合、2つのジョイントの並進が連成されます。この図は、自動車修理工場でよく使用される油圧ジャッキの概略図です。この油圧プレスは、大きく異なる直径D1とD2を持つ相互に結合された2つのシリンダーで構成されています。2つのピストンによって容積が密閉されており、プレスの密閉容積は非圧縮性の流体で満たされています。

左側のシリンダーの直径は右側のシリンダーより小さくなっています(D2 >> D1)。修理対象の自動車が、右側のピストンに剛結合されたプラットフォーム上に配置されます。
図 3. Constraint_Couplerを使用してモデル化された油圧ジャッキ

左側のシリンダーの面積はA1 = πD12/4です。

右側のシリンダーの面積はA2 = πD22/4です。

左側のシリンダーに力F1がかけられることで、このシリンダーが距離L1だけ移動するとします。注目するのは、自動車の変位L2と押し上げ力F2の計算です。

この流体は非圧縮性であるため、左側のピストンの運動によって容積 = L1*A1が変位します。流体容積は維持されるため、これによって右側のピストンが押し上げられます。右側のシリンダーの容積はL2*A2だけ増大します。

この非圧縮性条件により、次の式が導かれます:(2)

L1*A1 + L2*A2 = 0

式 2の運動学的関係が与えられると、MotionSolveは、仮想仕事の原理によりF1とF2の関係を自動的に計算します。

以下のように想定します:
  • D1 = 5.08mm(例: A1 = 20.1885mm2
  • D2 = 50.8mm(例: A2 = 2018.85mm2
  • 左側のピストンは並進ジョイント123上にある
  • 右側のピストンは並進ジョイント456上にある

式 4を記述するConstraint_Couplerステートメントは次のとおりです:

<Constraint_Coupler
     id              = "5"
     joint1_id       = "123"
     freedom_1       = "T"
     joint2_id       = "456"
     freedom_2       = "T"
     coefficients    = "20.1885,2018.85"
</Constraint_Coupler
>

コメント

  1. Constraint_Couplerは、代数的拘束を定義します。この拘束は線形であっても非線形であってもかまいません。この拘束の線形形式は次のとおりです: (3)
    s 1 M 1 + s 2 M 2 [ + s 3 M 3 ] = 0
    上記の式 3では、M1M2、およびM3は、選択されたジョイントの選択された自由度の座標値です。IkJkConstraint_Joint kのIマーカーとJマーカーである場合、Mkは以下を意味します:
    • 回転ジョイント: AZ(Ik,Jk)
    • 並進ジョイント: DZ(Ik,Jk,Jk)
    • 円筒ジョイント:DZ(Ik,Jk,Jk) if FREEDOM_K = "T" AZ(Ik,Jk)(FREEDOM_K = "R"の場合)

    式 3に2つのジョイントのみが含まれている場合は、s1s2を指定する必要があります。これらは、ratioで指定される1つ目と2つ目の値です。

    式(6)に3つのジョイントが含まれている場合は、s1、s2、s3を指定する必要があります。S1は、ratioで指定される1つ目の値です。S2は、ratioで指定される2つ目の値です。S3は、ratioで指定される3つ目の値です。

  2. Constraint_Couplerは、非線形関係の指定にも使用できます。この場合、運動学的関係は次のように表すことができます:(4)
    G 1 ( M 1 ) + G 2 ( M 2 ) [ + G 3 ( M 3 ) ] = 0

    ユーザー定義のサブルーチンCOUSUBを使用して、式 4の方程式を指定します。上記に加えて、MotionSolveでは、M1、M2、M3に関して、式 4の1次偏導関数を指定することも必要です。このデータは、ユーザー定義サブルーチンCOUXXMotionSolveに渡されます。同様に、2次偏導関数は、3つ目のユーザー定義サブルーチンCOUXX2で返されます。M1、M2、M3は、引数としてこれらのユーザー定義サブルーチンに渡されます。

  3. 非線形Constraint_Couplerが定義されている場合、式 4(ユーザー定義サブルーチンCOUSUBで定義)は、2回微分可能である必要があります。