MV-7013:Composeのサブルーチンを用いたMotionSolveによる倒立振子制御
本チュートリアルでは、MotionView、MotionSolve、およびComposeを使って倒立振子を安定化させる制御システムを設計する方法について学習します。
目標は、極配置法を使ったレギュレータを設計することです。倒立振子のMDLモデルファイルは用意されています。
- 開ループシステムの安定性をチェック
- MotionSolve線形解析を使って、線形化されたシステムのマトリクスA、B、CおよびDをエクスポート
- Composeを使ってコントローラーを設計
- MotionViewでコントローラをインプリメント
- MotionSolve線形解析を使って、閉ループシステムの安定性をチェック
- モデルに外乱力を追加し、MotionSolveでシミュレーションを実行
下の図はスライダー上の典型的な倒立振子です。システムは、自由度2を有し、4つの状態変数が存在します。垂直に立った振子の位置は不安定です。目標は、このコンフィギュレーションを安定させるレギュレータを設計することです。

図 1. 倒立振り子モデル
目標を達成するために、完全な状態のフィードバック制御法則を見つけます。制御の入力は、全体X軸に沿ってスライダーにかかる力です。プラントの出力は、振子の全体Y軸周りの回転角度です。
最初に、[installation_directory]\tutorials\hwdesktop\mv_hv_hg\mbd_modeling\motionsolveにあるinv_pendu.mdlを、MotionViewに読み込み、作業ディレクトリに保存します。モデルのトポロジーを見てみると、本演習に必要なものはすべて、モデルに含まれていることが分かります。ただし、実行するタスクによっては、特定のエンティティをアクティブまたは非アクティブにする必要があります。
参考資料:Feedback Control of Dynamic Systems, G. G. Franklin, J. D. Powell, and A. Emami-Naeini, Third Edition, Addison Wesley.
開ループモデルの安定性のチェック
固有値を計算し、倒立振子の釣り合い状態の安定性を確認します。
線形化されたモデルの取得
一般的に、制御システムの設計における最初のステップは、状態空間形式のシステムの線形モデルを得ることです。
ẋ = Ax+Bu
y = Cx+Du
ここで、A、B、CおよびDは状態マトリクス、xは状態ベクトル、uは入力ベクトル、yは出力ベクトルです。A、B、C、Dの各マトリクスは、(ソルバーが)選択した状態、入力、出力に依存します。ここでは、入力と出力のみを定義する必要があります。
Composeでの制御システムの設計
制御システムの設計に関する詳しい解説は、本チュートリアルでは割愛します。しかし、倒立振子を安定させるための極配置(参考資料[1] 参照)を使ったレギュレータ設計手順について、短く説明します。詳細は、制御の標準テキストおよびComposeドキュメンテーションをご参照ください。
- 完全状態フィードバック制御則 u = − k ∗ xを使用します。ここで、uは制御入力、kはゲインベクトル、xは状態ベクトルです。
- ここで、必要な極配置がベクトルPに保管されることを前提とすると、極配置法を使ってkを計算することができます。
- inv_pendu_state_matrices.omlというスクリプトを読み込み、実行して、状態空間行列をCompose作業領域に読み込みます。
- 極Pを3Hzに配置する場合、 コマンドウィンドウに次のように入力します:
p = 2*pi*3 * [ -1 -1 -1 -1 ] ; k = acker( A , B , p )
- Compose acker関数は、次のような処理や結果をもたらします:
k = [Matrix] 1 x 4 -15020.22034 -12.86975 -2806.23453 -2.74083
MotionViewでの制御力のインプリメント
制御力は、u = − k ∗ xです。モデルには、Control Force Variable - CLという名のソルバー変数が含まれます。GFOSUBを使用してユーザー定義のComposeスクリプトでフォースエンティティを置き換えます。GFOSUBは、m_sysfncを介してシステムの状態にアクセスします。