単振子の解析
この例では、単振子の動的応答を解析する方法を説明します。回転の測定、減衰の追加、および回転ジョイントのトルクの適用を行う方法を確認できます。マルチボディ ダイナミクスのシミュレーションの詳細については、マルチボディ ダイナミクスを参照してください。運動出力を指定して MATLAB® コマンドを使用することで、ジョイントの一連の位相プロットを作成できます。
まず、単純な振子のモデル化で単純な振子モデルを作成します。このモデルに力とトルクを追加することで、振子を、減衰のない自由な状態から減衰と駆動のある状態へと段階的に変更していきます。適用する力とトルクには、以下が含まれます。
重力 (Fg) — すべてのボディに対し、その質量に正比例して働くグローバルな力。加速度ベクトル g として指定します。このベクトルは、Mechanism Configuration ブロックを使用して指定します。
ジョイントの減衰 (Fb) — 振子とジョイント固定具の間の内部トルク。線形減衰係数としてパラメーター化します。このパラメーターは、振子をジョイント固定具に接続する Revolute Joint ブロックを使用して指定します。
作動トルク (FA) — 振子とジョイント固定具間の駆動トルク。振子をジョイント固定具に接続する Revolute Joint ブロックを使用して Simscape™ 物理量信号として直接指定します。
振子運動検出情報の出力
まず、SimplePendulum
モデルを更新して位置と速度のデータを出力し、そのデータを MATLAB ベース ワークスペースに出力します。
チュートリアル単純な振子のモデル化で作成した
SimplePendulum
モデルを開きます。Revolute Joint ブロックのダイアログ ボックスの [Z Revolute Primitive (Rz)] 、 [Sensing] セクションで、次のパラメーターを選択します。
Position
Velocity
このブロックには、[q] および [w] の 2 つの物理量信号端子が追加表示されており、ワールド座標系に対する振子の角度位置と角速度をそれぞれ出力します。
次のブロックをモデルに追加します。これらのブロックを使用して、ジョイントの位置と速度を MATLAB ベース ワークスペースに出力します。
ライブラリ ブロック 数 [Simscape] 、 [Utilities] PS-Simulink Converter 2 [Simulink] 、 [Sinks] To Workspace 2 To Workspace ブロックのダイアログ ボックスの [変数名] パラメーターを、
q
とw
に変更します。これらの変数により、To Workspace ブロックがシミュレーション中に出力するジョイントの変数を特定しやすくなります。位置は Revolute Joint ブロックの端子 [q] から出力され、速度は Revolute Joint ブロックの端子 [w] から出力されます。変数名からキーワードout
を削除するには、Simulink® ツールストリップの [モデル化] タブで [モデル設定] をクリックし、[データのインポート/エクスポート] を選択して [単一のシミュレーション出力] パラメーターの選択を解除します。次の図のようにブロックを接続します。変数名
q
をもつ To Workspace ブロックが PS-Simulink Converter ブロックを介して Revolute Joint ブロックの端子 [q] に接続し、変数名w
をもつ To Workspace ブロックが Revolute Joint ブロックの端子 [w] に接続していることを確認してください。両方の PS-Simulink Converter ブロックの [ベクトル形式] パラメーターの値を
[1 次元配列]
に変更します。端子 [q] および端子 [w] に接続された PS-Simulink Converter ブロックで、[出力信号単位] パラメーターをそれぞれ[deg]
および[deg/s]
に設定します。モデルに
SimplePendulumAnalysis
のような別の名前を付けて保存します。
非減衰振子の解析
シミュレーションを実行します。Mechanics Explorer が開き、単純な振子モデルの 3D アニメーションが表示されます。
MATLAB コマンド プロンプトで次のコードを入力し、ジョイントの位置と速度を時間に対してプロットします。
次の図は結果のプロットを示しています。figure hold on plot(q) plot(w)
MATLAB コマンド プロンプトで次のコードを入力し、ジョイントの角速度を角度位置に対してプロットします。
結果は開始位置が水平面に対し 0 度に対応している、ジョイントの位相プロットになります。figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')
さまざまな開始角度を使用して、モデルをシミュレートしてみましょう。[Z Revolute Primitive (Rz)] 、 [State Targets] セクションの [Specify Position Target] で、Revolute Joint ブロックのダイアログ ボックスの [Value] パラメーターを指定します。次の図は、開始角度が
-80
、-40
、0
、40
、および80
deg
の複合位相プロットを示しています。
減衰振子の解析
Revolute Joint ブロックのダイアログ ボックスで、[Z Revolute Primitive (Rz)] 、 [Internal Mechanics] 、 [Damping Coefficient] を
8e-5
(N*m)/(deg/s) に設定します。減衰係数によって運動中にエネルギーが散逸し、その結果、振子の振動振幅が徐々に減少します。[Z Revolute Primitive (Rz)] 、 [State Targets] 、 [Specify Position Target] 、 [Value] が
0
deg
に設定されていることを確認します。シミュレーションを実行します。
ジョイントの位置と速度を時間に対しプロットします。これを行うには、MATLAB コマンド プロンプトで次のコードを入力します。
次の図は結果のプロットを示しています。減衰のため、振子の振動が時間とともに小さくなることに注意してください。減衰値を大きくすると振子が減衰過剰になり、振動は消滅します。figure hold on plot(q) plot(w)
ジョイントの位相プロットを作成します。これを行うには、MATLAB コマンド プロンプトで次のコードを入力します。
figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')
さまざまな開始角度を使用して、モデルをシミュレートしてみましょう。[Specify Position Target] の [Z Revolute Primitive (Rz)] 、 [State Targets] セクションで、Revolute Joint ブロックのダイアログ ボックスの [Value] パラメーターを指定します。次の図は、開始角度が
-80
、-40
、0
、40
、および80
deg
の複合位相プロットを示しています。
減衰と駆動のある振子の解析
Revolute Joint ブロックのダイアログ ボックスの [Actuation] セクションで、[Torque] パラメーターを
[Provided by Input]
に設定します。このブロックには物理量信号の入力端子 [t] が表示されており、これを使用してジョイントの作動トルクを指定できます。次のブロックをモデルに追加します。
ライブラリ ブロック [Simscape] 、 [Utilities] Simulink-PS Converter [Simulink] 、 [Sources] Sine Wave Sine Wave ブロックは、周期的なトルク入力を Simulink 信号として提供します。Simulink-PS Converter ブロックは、Simulink 信号を、Simscape Multibody™ ブロックと互換性のある物理量信号に変換します。
次の図のようにブロックを接続します。
Sine Wave ブロックのダイアログ ボックスで、[Amplitude] パラメーターを
0.06
に設定します。Simulink-PS Converter ブロックで、[入力信号の単位] パラメーターをN*m
に設定します。-0.06
N*m
から0.06
N*m
の間で振動する作動トルクをジョイントに適用します。Revolute Joint ブロックのダイアログ ボックスの [Z Revolute Primitive (Rz)] 、 [State Targets] セクションの [Specify Position Target] で、[Value] パラメーターを
0
deg
に設定します。シミュレーションを実行します。
ジョイントの位置と速度を時間に対しプロットします。これを行うには、MATLAB コマンド プロンプトで次のコードを入力します。
figure hold on plot(q) plot(w)
ジョイントの位相プロットを作成します。これを行うには、MATLAB コマンド プロンプトで次のコードを入力します。
figure plot(q.data, w.data) xlabel('θ (deg)') ylabel('ω (deg/s)')
参考
PS-Simulink Converter | Revolute Joint | To Workspace