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
- データファイルからユーザー定義のサブルーチンCOUSUB、COUXX、およびCOUXX2に渡されるパラメータのリスト。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。この属性は、すべてのタイプのユーザーサブルーチンおよびスクリプトに共通です。
- usrsub_dll_name
- ユーザーサブルーチンを含むDLLまたは共有ライブラリのパスと名前を指定します。MotionSolveはこの情報を使用して、実行時にDLL内のユーザーサブルーチンCOUSUB、COUXX、およびCOUXX2を読み込みます。このキーワードは、type = USERSUBが選択されている場合にのみ使用します。
- usrsub_fnc_name
- ユーザーサブルーチンCOUSUBの代替名を指定します。
- script_name
- usrsub_fnc_nameで指定されたルーチンを含むユーザー作成スクリプトのパスと名前を指定します。
- interpreter
- ユーザースクリプトが記述されたインタープリタ型言語を指定します。有効な選択肢は、MATLABまたはPYTHONです。
- is_virtual
- 仮想拘束なのか通常の拘束なのかを定義します。is_virtualがTRUEに設定されている場合、拘束は仮想拘束として実装されます。is_virtualがFALSEに設定されている場合、拘束は通常の代数拘束として実装されます。このパラメータは省略可能です。デフォルトはFALSEです。仮想ジョイントの詳細については、Constraint: Jointのコメント22をご参照ください。
例
次の図は、直角ベベルギアペアを示しています。ピッチ半径がR1のベベルギアAは、回転ジョイント1によって地面に結合されています。このギアは、固定軸の周りを回転できます。ピッチ半径がR2のベベルギアCは、回転ジョイント2によって地面に結合されており、固定軸の周りを回転できます。
注目するのは、2つの回転ジョイントの回転の連結など、ベベルギアセットの全体的な効果の定義です。2つのギア間の接触で発生する歯の力については注目しません。また、ギアの噛み合わせは完璧であり、バックラッシュ、歯のたわみ、偏心などの製造欠陥はないものとします。
R1*θ1 + R2*θ2 = 0

<Constraint_Coupler
id = "1"
joint1_id = "1"
freedom_1 = "R"
joint2_id = "2"
freedom_1 = "R"
coefficients = "10.0,15.0"
</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つのピストンによって容積が密閉されており、プレスの密閉容積は非圧縮性の流体で満たされています。

左側のシリンダーの面積はA1 = πD12/4です。
右側のシリンダーの面積はA2 = πD22/4です。
左側のシリンダーに力F1がかけられることで、このシリンダーが距離L1だけ移動するとします。注目するのは、自動車の変位L2と押し上げ力F2の計算です。
この流体は非圧縮性であるため、左側のピストンの運動によって容積 = L1*A1が変位します。流体容積は維持されるため、これによって右側のピストンが押し上げられます。右側のシリンダーの容積はL2*A2だけ増大します。
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
>
コメント
- Constraint_Couplerは、代数的拘束を定義します。この拘束は線形であっても非線形であってもかまいません。この拘束の線形形式は次のとおりです:
(3) 上記の式 3では、M1、M2、およびM3は、選択されたジョイントの選択された自由度の座標値です。IkとJkがConstraint_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つのジョイントのみが含まれている場合は、s1とs2を指定する必要があります。これらは、ratioで指定される1つ目と2つ目の値です。
式(6)に3つのジョイントが含まれている場合は、s1、s2、s3を指定する必要があります。S1は、ratioで指定される1つ目の値です。S2は、ratioで指定される2つ目の値です。S3は、ratioで指定される3つ目の値です。
- Constraint_Couplerは、非線形関係の指定にも使用できます。この場合、運動学的関係は次のように表すことができます:
(4) ユーザー定義のサブルーチンCOUSUBを使用して、式 4の方程式を指定します。上記に加えて、MotionSolveでは、M1、M2、M3に関して、式 4の1次偏導関数を指定することも必要です。このデータは、ユーザー定義サブルーチンCOUXXでMotionSolveに渡されます。同様に、2次偏導関数は、3つ目のユーザー定義サブルーチンCOUXX2で返されます。M1、M2、M3は、引数としてこれらのユーザー定義サブルーチンに渡されます。
- 非線形Constraint_Couplerが定義されている場合、式 4(ユーザー定義サブルーチンCOUSUBで定義)は、2回微分可能である必要があります。