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ファイルを選択します。
  4. 簡素化されたモデルを確認します。
    モデルには以下が含まれます:
    1. サスペンションとバスボディを表す2つのボディ。
    2. バス、サスペンション、および路面をつなぐ2本のばね。


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


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


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

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

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

チュートリアルのMV-2050では、このシステムの1次モードが1.63Hz(~10.24rad/s以下)とされました。このステップでは、Suspension Bodyに10.24rad/sの単位力を加えたときの、このシステムの応答(つまり、Busの変位)を確認します。

  1. 力を確認します。


    図 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軸)変位出力をプロットします。


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


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

線形解析 - プラント入力

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

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


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


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


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


      図 10. プラント入力の詳細
  4. 力を追加します。
    1. Projectブラウザで、Linear解析を右クリックしてAdd > Force Entity > Forceを選択します。またはProjectブラウザLinear解析を選択してからForce Entityツールバーでを右クリックします。

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

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


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

線形解析 - プラント出力

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

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


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


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

線形解析の設定と実行

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


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


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


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


    図 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つの状態が導き出されます。



    図 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]');
    


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


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


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