本項から新しい例題に入ります。前の例題に引き続き、剛体が一つだけの非常に簡単なモデルを考えます。前の例題では並進運動を扱いましたが、今度の例題では回転運動を扱います。
無重力の空間内に、図1に示すような直方体のブロックを考えます。質量はM = 1.0kg、辺の長さはLx = 15cm、Ly = 5cm、Lz = 30cmとします。このブロックに様々な初期角速度を与えた時のブロックの回転運動をシミュレーションします。
ブロックの重心を原点とし、x、y、z軸が初期時刻におけるLx、Ly、Lzにそれぞれ平行な静止座標系を考え、これをグローバル座標系とします。ブロックの慣性主軸は、初期時刻においてグローバル座標系のx、y、z軸と一致し、主慣性モーメントは次の式で求められます。
質量Mと辺の長さLx、Ly、Lzの数値を代入すると、Ixx = 7.7e-3 (kg m2)、Iyy = 9.4e-3 (kg m2)、Izz = 2.1e-3 (kg m2) となり、Iyy > Ixx > Izz であることが分かります。
例題2のブロックの回転運動をMBDynで解析するための、入力ファイルの記述例を下のコード1に示します。
# free_rotating_block.mbd begin: data; problem: initial value; end: data; begin: initial value; initial time: 0.; final time: 5.; time step: 1.e-2; max iterations: 10; tolerance: 1.e-6; end: initial value; begin: control data; structural nodes: 1; rigid bodies: 1; end: control data; # Design Variables set: real M = 1.; # [kg] Mass set: real Lx = 0.15; # [m] Width set: real Ly = 0.05; # [m] Thickness set: real Lz = 0.3; # [m] Height set: real Wx0 = 0.; # [rad/s] Initial angular velocity along x axis set: real Wy0 = 0.; # [rad/s] Initial angular velocity along y axis set: real Wz0 = 5.; # [rad/s] Initial angular velocity along z axis set: real Ixx = 1./12.*M*(Ly^2+Lz^2); # [kgm^2] Moment of inertia about x axis set: real Iyy = 1./12.*M*(Lz^2+Lx^2); # [kgm^2] Moment of inertia about y axis set: real Izz = 1./12.*M*(Lx^2+Ly^2); # [kgm^2] Moment of inertia about z axis # Node Labels set: integer Node_Block = 1; # Body Labels set: integer Body_Block = 1; begin: nodes; structural: Node_Block, dynamic, 0., 0., 0., # absolute position eye, # absolute orientation null, # absolute velocity Wx0, Wy0, Wz0; # absolute angular velocity end: nodes; begin: elements; body: Body_Block, Node_Block, M, # mass null, # relative center of mass diag, Ixx, Iyy, Izz; # inertia matrix end: elements;
まず注目していただきたいのは、ブロックの慣性行列(inertia matrix)の定義の仕方です。これは3段階で行われています。まずM、Lx、Ly、Lzを設計変数として定義し、次にこれらの変数を用いて主慣性モーメントIxx、Iyy、Izzを式によって求めています(ここでもsetカードが用いられます)。そして最後にIxx、Iyy、Izzを用いて、body「Body_Block」の慣性行列を定義しています。ここで「Body_Block」の慣性行列の記述は
diag, Ixx, Iyy, Izz
となっていますが、「diag」はそれに続く3つの数値を対角成分とする対角行列(diagonal matrix)を表すキーワードです。尚、一般の慣性行列は対称行列(symmetric matrix)なので、キーワード「sym」を用いて定義できます。(第12項参照)
次に注目していただきたいのは、node「Node_Block」の初期角速度が、変数Wx0、Wy0、Wz0で定義されている点です。このシミュレーションモデルは、様々な初期角速度でシミュレーションすることが前提となっているので、このように初期角速度を変数にしておくと便利なのです。
では、次の3ケースについてシミュレーションを行って見ましょう。
シミュレーション結果のアニメーションを動画1〜3に示します。ケース1はz軸に対応する慣性主軸周りに回転し、ケース2はx軸に対応する慣性主軸周りに回転します。ケース3はより一般的な回転運動をします。