ジョイントの拘束力の測定
Simscape™ Multibody™ モデルでは、ジョイント ブロックを使用して、ジョイント プリミティブを駆動する作動力と作動トルクを測定できます。また、ジョイント全体に働く合計力と拘束力も測定できます。
この例では、Weld Joint ブロックを使用して、ボディを一体として保持する時変内力を測定する方法を示します。図に示すように、遠位リンクの 2 つのパーツが溶接ジョイントで接続され、2 つのパーツ間の相対運動が拘束されています。遠位リンクの内力は、溶接ジョイントに働く拘束力と等しくなります。この例では、二重振子モデルを使用します。このモデルの作成方法の詳細については、開ループ連鎖のモデル化を参照してください。
次の図に、溶接ジョイントに働く拘束力を示します。縦方向の拘束力は、溶接ジョイントの座標系の x 軸と一致しています。横方向の拘束力は、y 軸と一致しています。二重振子モデルの運動は xy 平面を維持するため、z 軸方向の拘束力は無視できます。
Weld Joint ブロックを使用して、follower 座標系が base 座標系に及ぼす拘束力、あるいは base 座標系が follower 座標系に及ぼす拘束力を測定できます。これらの力は、大きさは同じですが方向が逆になります。この例では、follower 座標系が base 座標系に及ぼす拘束力を Weld Joint ブロックで測定します。
測定された拘束力を解決するための座標系も指定できます。解決する座標系は、base 座標系と follower 座標系のどちらでもかまいません。6-DOF Joint ブロックなどの特定のジョイント ブロックでは、base 座標系と follower 座標系に異なる向きをもたせることが可能です。それにより、同じ測定が、解決する座標系の選択によって異なる結果になります。
モデルへの Weld Joint ブロックの追加
二重振子モデルを開くには、MATLAB® コマンド プロンプトで「
openExample("sm/DocDoublePendulumModelExample")
」と入力します。Binary Link A1
サブシステムの左下隅にある矢印をクリックして、サブシステムの内容を表示します。Weld Joint ブロックを追加し、ブロック間を図に示すように接続します。
拘束力の測定と出力
Weld Joint ブロックのダイアログ ボックスで、[Constraint Force] を選択します。ブロックに fc というラベルの付いた物理量信号出力端子が表示されます。
Connection Port ブロックをサブシステムに追加し、ブロックに
Conn3
という名前を付けて、ブロック間を図に示すように接続します。最上位モデルに戻ります。次のブロックをモデルに追加します。
ライブラリ ブロック [Simscape] 、 [Utilities] PS-Simulink Converter [Simulink] 、 [Sinks] To Workspace 次の図のようにブロックを接続します。
次のブロック パラメーターを指定します。
ブロック ダイアログ ボックスのパラメーター 値 PS-Simulink Converter ベクトル形式 1 次元配列
Output signal unit mN
To Workspace 変数名 fcf_weld
減衰の指定
それぞれの Revolute Joint ブロックのダイアログ ボックスで、[Internal Mechanics] 、 [Damping Coefficient] を 1e-5 N*m/(deg/s)
に設定します。減衰係数を使用すると、運動中のエネルギー散逸をモデル化して、二重振子モデルがやがて静止するようにできます。
モデルのシミュレーション
[モデル化] タブで、[モデル設定] をクリックします。
[コンフィギュレーション パラメーター] ウィンドウの左側のペインで、[ソルバー] をクリックし、[ソルバー] を
[ode15s(stiff/NDF)]
に設定します。これは、物理モデル用の推奨されるソルバーです。[ソルバーの詳細] を展開し、[最大ステップ サイズ] パラメーターを
0.001
s
に設定します。シミュレーションを実行します。Mechanics Explorer に、モデルの動的な表示が開きます。[Mechanics Explorers] タブで、[Isometric View] ボタンをクリックして、等角投影の視点から二重振子を表示します。
拘束力のプロット
MATLAB コマンド プロンプトで、次のプロット コマンドを入力します。
figure; plot3(fcf_weld.time, fcf_weld.data(:,1), fcf_weld.data(:,2),... '.', 'MarkerSize', 1, 'Color', 'r'); grid on; xlabel('T, s'); ylabel('F_{C,X}, mN'); zlabel('F_{C,Y}, mN');