重要な機械要素の一つである、クランク‐スライダ機構のシミュレーションモデルを作成してみましょう。このシミュレーションモデルでは、いくつかの新しいジョイント(“clamp”、“in line”、“prismatic”、“axial rotation”)を使用します。また、時間依存の入力を与える“drive caller”、そして“force”要素が登場します。
図1に示すようなクランク‐スライダ機構のシミュレーションモデルを作成します。クランクとコンロッドの長さ、スライダのオフセット量、および各部品の質量が設計変数であると仮定し、これら設計変数の値を自由に変えてシミュレーションが行えるように入力ファイルを作成します。
シミュレーションモデル全体の設計図を図2に示します。クランクの回転中心をグローバル座標系の原点とし、Z = 0 の平面内に図に示すような配置でモデルを作成します。クランクとコンロッドのnodeはそれぞれの重心(中心)位置へ置きます。クランクとコンロッドの接続点に、図に示す向きでreference「Ref_Conrod」を定義しておけば、コンロッドのnode「Node_Conrod」およびコンロッドとスライダの接続点を簡潔に定義できるので便利です。
このモデルでは4種類の新しいジョイント要素を使用します。
この内、“clamp”、“in line”、および“prismatic”について以下で説明します。“axial rotation”については次項で説明します。
このジョイントは、1つのnodeの全6自由度を拘束し、任意の位置および姿勢でグローバル座標系に固定します。clampを定義する基本的なステートメントの型は次のようになります。
joint: <label>, clamp, <node>, <absolute position>, <absolute orientation matrix>;
このジョイントは、1つ目のnodeに固定された直線上に、2つ目のnodeを拘束します。in lineを定義する基本的なステートメントの型は次のようになります。
joint: <label>, in line, <node 1>, <relative line position>, <relative orientation>, <node 2>, [ offset, <relative offset> ];
node2(または<relative offset>分だけオフセットした点)は、<relative line position>を通り<relative orientation>で定まる z 方向に平行な直線上に拘束されます。
このジョイントは、2つのnodeの相対姿勢を拘束します。つまり、一方のnodeは他方のnodeに対して常に姿勢を一定に保ちながら移動します。相対位置は拘束されません。prismaticを定義する基本的なステートメントの型は次のようになります。
joint: <label>, prismatic, <node 1>, [ hinge, <relative orientation matrix 1> ], <node 2>, [ hinge, <relative orientation matrix 2> ];
“hinge”で初期のジョイントの向きを定めることができます。2つのhingeの向きは一致する必要があります。
本例題のクランク‐スライダ機構のシミュレーションモデルにおいて、スライダは、向きを一定に保ちつつ、X軸に平行な直線上を移動するように拘束します。これは、prismaticジョイントとin lineジョイントによってスライダをグローバル座標系に拘束することで実現できます。
まず、グローバル座標系に固定されたnodeが1つ必要となるのでこれを定義します。staticなstructural node「Node_Ground」を原点に定義し、これをClampジョイントでグローバル座標系に固定します。
set: integer Node_Ground = 1; structural: Node_Ground, static, 0., 0., 0., # absolute position eye, # absolute orientation null, # absolute velocity null; # absolute angular velocity
set: integer JoClamp_Ground = 1; joint: JoClamp_Ground, clamp, Node_Ground, null, # absolute position eye; # absolute orientation
次に、この「Node_Ground」に対して、「Node_Slider」をin lineジョイントで直線上に拘束し、さらにprismaticジョイントで向きを拘束します。
set: integer JoInlin_Ground_Slider = 5; set: integer JoPrism_Ground_Slider = 6; joint: JoInlin_Ground_Slider, in line, Node_Ground, 0., Offset_Slider, 0., # relative line position 1, 0., 0., -1., 3, 1., 0., 0., # relative orientation Node_Slider; joint: JoPrism_Ground_Slider, prismatic, Node_Ground, Node_Slider;
クランクとコンロッドの拘束は2重剛体振り子の場合とほぼ同じです。1つ違うのは、revolute pinの代わりに“axial rotation”を使う点です。axial rotationは、revolute hingeと同等な拘束に加え角速度を与えることができるジョイントです。axial rotationについては次項で詳しく説明します。
コンロッドとスライダはどのように接続すれば良いでしょうか?構造上は、一見、revolute hingeで接続すれば良いように思いますが、実はrevolute hingeで接続することはできません。その理由は、“過拘束”になってしまうからです。過拘束は、既に拘束されている自由度をさらに別のジョイントで拘束しようとすると起こります。コンロッドとスライダはどちらも既に z 平面上に拘束されているので、ここでさらにrevolute hingeで両者を同一平面上に拘束しようとすると、過拘束になってしまうのです。過拘束になるとMBDynは計算をすることが出来ません。過拘束にならないようにコンロッドとスライダを接続するには、in lineジョイントを用います。接続点において、コンロッドに固定され z 軸に平行な直線上に「Node_Slider」を拘束します。
set: integer JoInlin_Conrod_Slider = 4; joint: JoInlin_Conrod_Slider, in line, Node_Conrod, Length_Conrod/2., 0., 0., # relative line position eye, # relative orientation Node_Slider;