MV-2051:MotionSolveとComposeによる周波数応答解析

このチュートリアルでは、MotionSolveを使用してマルチボディモデルを等価な状態空間形式に変換し、対応するマトリクスを取得する方法、これらの状態空間マトリクスを使用して Altair Compose 内でマルチボディモデルの等価な LTI システムを構築する方法、および Bode PlotダイアグラムでLTI システムの周波数応答解析を行う方法を学びます。

演習では、mv_hv_hg\mbd_modeling\linearにあるSimplifiedTwoSpring_LTI_START.mdlファイルを使用します。

これはチュートリアル - MV-2050:安定性と振動解析のための線形解析から続くチュートリアルです。

制御システムの設計は、線形時不変システム(LTIシステム)にのみ適用可能な伝達関数などの数学的ツールを使用することで、計算がより簡単になります。線形システムの出力は、入力の重ね合わせとして表現されます。広範囲の物理システムは、LTIモデルによって非常に正確に近似することができます。

線形時不変(LTI)システムは、以下のように記述されます:

ここで、A、B、CおよびDは状態マトリクス、xは状態ベクトル、uは入力ベクトル、yは出力ベクトルです。

MotionSolveは、線形解析によって与えられた入力と出力のセットに対する状態マトリクスを計算することで、マルチボディシステムを線形化することができます。状態は、MotionSolveによって自動的に選択されます。

周波数応答の概念と技術は、制御システムの設計と解析において重要な役割を果たします。周波数応答法では、入力信号の周波数をある範囲で変化させて、その応答を調べます。

このチュートリアルでは、MotionSolveを使って、マルチボディモデルを等価な状態空間形式に変換し、対応するA、B、C、Dマトリクスを取得する方法を学びます。これらの状態空間マトリクスはさらに、AltairのCompose内でマルチボディモデルの等価LTIシステムを構築するために使用されます。次に、Composeを用いて、LTI システムの周波数応答解析を行い、ボード線図を作成します。

次に、Composeに用意されているさまざまなツールを使って制御システムの設計を行うことができますが、これはこのチュートリアルの範囲外です。

モデルを開いて確認する

  1. MotionViewの新しいセッションを開始します。
  2. Standardツールバーの、Open Modelをクリックします。
  3. Open Modelダイアログで、SimplifiedTwoSpring_LTI_START.mdlファイルを自身の作業ディレクトリ<working directory>から選択します。
  4. 簡素化されたモデルを確認します。
    このモデルには以下が含まれます:
    1. サスペンションとバスボディを表す2つのボディ。
    2. バス、サスペンション、路面をつなぐ2本のばね。


    Figure 1. 外乱のない簡易化バスモデル
    ここで、路面からの外乱を受けたときのシステムの応答性(つまり、バスの車体変位)を向上させるために、サスペンション質量に作用する仮想的な力(コントローラーから得られる)を考えます。このようなシステムの入力と出力を示す簡単なブロック図を以下に示します。


    Figure 2. プラント入力 - 制御力


    Figure 3. 入力と出力を示すプラントのブロック図
  5. モデルには、以下の解析が含まれます:
    1. 力とモーションで構成される過渡的な解析。
    2. モーションで構成された線形解析。

    次のステップでは、入力の単位値に対応するプラントの出力を特定するために、過渡解析を行います。

過渡解析 – 1次モードでの応答

チュートリアルのMV-2050では、このシステムの1次モードは1.63Hz(~10.24rad/s)とされていました。このステップでは、Suspension Bodyに10.24rad/sの強制周波数で単位力を加えたときの、このシステムの応答(言い換えればBusの変位)を確認します。

  1. 力を確認します。


    Figure 4. 1次モードの強制周波数における過渡解析モデル
  2. 現在ロックされているRoadでの変位モーション(プラントへの外乱)を確認します。
  3. モデルを実行します。
    1. Runパネルに移動します。
    2. XML ファイルの名前を SimplifiedTwoSpring_Trans.xmlに変更します。
    3. Simulation typeにStatic+Linearを設定します。
    4. AnalysisにTransient_At_FirstModeを設定します。
  4. HyperGraphで結果を確認し、BusBodyの変位出力を垂直方向(Z軸)にプロットします。


    Figure 5. 出力応答のプロット設定


    Figure 6. 過渡シミュレーションのBusBodyの変位の大きさ
次のステップでは、線形解析を行って状態空間マトリクスを求め、それをもとにこのシステムの等価LTIシステムを構築します。

線形解析 - プラント入力

このステップでは、プラント(u)の入力を設定します。Suspension Massに制御力を与えます。

  1. ブラウザでLinearを右クリックして、Activate > Selected onlyを選択することで、モデルのLinear Analysisを有効にします。
    Note: 解析で既存のモーションを確認します。外乱は、過渡状況を避けるために、現在ロックされているRoadの変位運動(つまり、変位ゼロ)としてモデル化されます。


    Figure 7.
  2. コントローラーからプラントへの入力を取得するためにLinear Analysis解析内にSolverVariableを追加します。
    1. Project Browserから、Linear解析を右クリックし、Add > Control Entity > SolverVariableを選択します。または、Project BrowserLinear解析を選択した後、Control Entityツールバーのを右クリックします)。
      Add SolverVariableダイアログが表示されます。


      Figure 8. プラントの入力ポートを表すSolverVariableの追加
    2. LabelをFromController_SuspForceに変更します。定義をデフォルトのままにしておきます。
  3. Linear Analysis解析にSolver Arrayを追加し、プラントへの入力を定義します。
    1. Project Browserから、Linear解析を右クリックし、Add > Control Entity > SolverArrayを選択します。または、Project BrowserLinear解析を選択した後、Control Entityツールバーのを右クリックします)。
      Add SolverArrayダイアログが表示されます。


      Figure 9. プラントを入力するためのSolverArrayの追加
    2. LabelをPlant_Inputに変更し、OKをクリックします。
    3. パネルから、ドロップダウンメニューでArray typeをPlant Inputに変更します。
    4. SolverVariableコレクターを使用して、SolverVariableにFromController_SuspForceを選択します。
    5. Use in linearizationチェックボックスをアクティブにします。


      Figure 10. プラント入力の詳細
  4. 力を追加する。
    1. Project Browserから、Linear解析を右クリックし、Add > Force Entity > Forceを選択します。または、Project BrowserLinear解析を選択した後、Force Entityツールバーのを右クリックします)。

      Add Forceダイアログが表示されます。

    2. LabelをActiveSuspension_ControlForceに変更し、OKをクリックします。
    3. パネルからSuspensionMassをBodyとして選択します。
      Note: Bodyコレクターをダブルクリックして、Advancedエンティティセレクターダイアログを起動し、Only show entities within valid scopeオプションをオフにして、Analysisの外側にあるSuspensionMassボディを選択できるようにします。
    4. 力を与えるポイントとしてSuspensionMassCGを選びます。
    5. Tran Propertiesタブで、FzをExpressionに変更し、`{sv_fromcontroller_suspforce.VARVAL}`に設定します。
      Note: この式の作成には、Expression Builderを使用できます。


      Figure 11. 力の定義
    ソルバー変数で定義されたコントローラーからの入力は、式で記述されたForceエンティティによって使用されます。

線形解析 - プラント出力

このステップでは、プラント(y)の出力を設定します。ソルバー変数とソルバー配列は、上記のステップ#3と同様の方法で線形解析に追加されます。

  1. プラントからの出力を格納するソルバー変数を、FromPlant_BusDisplacement というラベルを与えて追加します。
  2. TypeをExpressionに変更し、その値を`DZ({b_busbody.cm.idstring})`に設定します。


    Figure 12. BusBodyの変位を指定するSolverVariableの編集
  3. プラントへの出力を定義するために、Plant_Outputというラベルを持つソルバー配列を追加します。
    1. ドロップダウンメニューでArray typeをPlant Outputに変更します。
    2. SolverVariableコレクターを使用して、SolverVariableにFromPlant_BusDisplacementを選択します。
    3. Use in linearizationチェックボックスをアクティブにします。


      Figure 13. プラント出力の詳細
  4. モデルをSimplifiedTwoSpring_LTI.mdlとして保存します。

線形解析の設定と実行

  1. 解析タイプを設定します。
    1. Runパネルに移動します。
    2. XMLファイルの名前を SimplifiedTwoSpring_LTI.xmlに変更します。
    3. Simulation typeにStatic+Linearを設定します。
    4. AnalysisにLinearを設定します。


    Figure 14. Runパネルの設定
  2. シミュレーションの設定を指定します。
    1. Simulation Settingsボタンをクリックします。
    2. ダイアログからLinearタブを選択します。
    3. Generate State Space MatrixグループのAltair Compose/Activate OMLチェックボックスを選択します。
    4. Eigen values and vectors (.eig)オプションのチェックを外します。


    Figure 15. Simulation Settings
  3. 出力オプションを設定します。
    1. Output Optionsボタンをクリックします。
    2. GeneralタブからWrite debug infoのチェックボックスを選択します。
      これにより、MotionSolveによって選択した状態がソルバーのログウィンドウにリストアップされます。


      Figure 16. 出力オプション
    3. AnalysisにTransient_At_FirstModeを設定します。
  4. Runボタンをクリックし、シミュレーションを開始します。
  5. 実行が完了したら、ソルバーウィンドウにて、システムの状態を定義するためにMotionSolveによって選択された2つの独立した座標(つまり、BusBodyとSuspensionMassそれぞれのZにおける並進)を確認します。


    Figure 17. ソルバーログウィンドウ
  6. runディレクトリを確認し、MotionSolveによって書き出された、A、B、C、DのマトリクスからなるComposeスクリプトSimplifiedTwoSpring_LTI.omlを確認します。

Composeでの周波数応答解析

このステップでは、MotionSolveの状態空間モデルを使用して、Composeで周波数応答解析を行います。なお、実行中、様々な周波数の入力信号がLTIシステムに与えられると、その特性により、周波数自体は同じままで、出力信号の大きさと位相が変化します。

  1. Altair Composeを開き、をクリックしてomlスクリプトSimplifiedTwoSpring_LTI.omlを開きます。
    1. A、B、C、Dのマトリクスを確認します。
    2. システムに記載されている4つの状態を確認してください。

      MotionSolve ソルバーウィンドウに記載されているように、独立した各座標から、displacement とvelocityという2つの状態が導き出されます。



    Figure 18. OMLファイルの確認
  2. 以下のコードをコピー&ペーストしてください:
    %Construct a state-space model 
    SYS=ss(A, B, C, D);
    
    %Construct a transfer function model
    %SM_TF=tf(SYS);
    
    %Plot a Bode Diagram
    %bode(SYS,R);
    
    %Create a row vector with logarithmically spaced 1000 elements for defining Frequency on X axis
    R=logspace(-1, 3, 1000);
    
    %Obtain magnitude and phase response of system using Bode Diagram
    [mag,phase]=bode(SYS,R);
    
    %Set up first plot to show magnitude vs frequency using subplot function
    subplot(2, 1, 1);
    %Set the title for the plot
    title('Frequency Response Plot');
    hold on;
    grid;
    %Plot 'mag' in 2D axes with log scale 'R'
    semilogx(R,mag);
    %Annotate the x and y axes
    hx=xlabel('Frequency [rad/s]');
    hy=ylabel('Magnitude: BusBody Disp [mm] / Control Force [N]');
    
    %Set up second plot to show phase vs frequency using subplot function
    subplot(2, 1, 2);
    hold on;
    grid;
    %Plot 'phase' in 2D axes with log scale 'R'
    semilogx(R,phase);
    %Annotate the x and y axes
    hx=xlabel('Frequency [rad/s]');
    hy=ylabel('Phase [deg]');
    


    Figure 19. 挿入コードの位置
    Note: 行頭の'%'記号はコメントを表します。コメントを確認し、詳細はComposeのドキュメントを参照してください。伝達関数の作成は、このチュートリアルでは必要ないので、コメントアウトされています。また、DefaultのBode線図機能は、このアプリケーションに適していないデシベルスケールを使用するため、ここでは使用しません。
  3. Start ボタンをクリックして、スクリプトを実行します。
  4. Variableブラウザに変数が作成されるのを確認します。


    Figure 20. Variableブラウザ
  5. 入力信号の大きさと位相の変化を、周波数範囲でのシステム応答として表した図を確認します。
    Note: システムの固有振動数に相当する10.24 rad/s(1.63Hz)と59.44 rad/s(9.46Hz)の2つのピークが観測されました。


    Figure 21. 周波数応答プロット
    ボード線図から、最初のモード(10.24rad/s)での単位力あたりのBusBody変位の振幅は、約0.098mmであることがわかります。この近似線形化モデルの出力は、ステップ2で実施したMotionSolveの過渡解析で得られたものに非常に近いものです。この線形化されたモデルを使って、Composeを使った制御システムの設計を行うことができます。