MV-7004:MotionSolveとMATLABを用いた倒立振子の制御
本チュートリアルでは、MotionViewとMotionSolveを使って倒立振子を安定化させる制御システムを設計する方法について学習します。
目標は、極配置法を使ったレギュレータを設計することです。倒立振子のMDLモデルファイルは用意されています。
- 開ループシステムの安定性をチェック
- MotionSolve線形解析を使って、線形化されたシステムのマトリックスA、B、CおよびDをエクスポート
- MATLABを使ってコントローラを設計
- MotionViewでコントローラをインプリメント
- MotionSolve線形解析を使って、閉ループシステムの安定性をチェック
- モデルに外乱力を追加し、MotionSolveでシミュレーションを実行

図 1. 倒立振り子モデル
目標を達成するためには、完全な状態のフィードバック制御法則を見つける必要があります。制御の入力は、全体X軸に沿ってスライダーにかかる力です。プラントの出力は、振子の全体Y軸周りの回転角度です。
mbd_modeling\motionsolveフォルダーにあるファイルinv_pendu.mdlをMotionViewに読み込んで開始します。モデルのトポロジーを見てみると、本演習に必要なものはすべて、モデルに含まれていることが分かります。ただし、実行するタスクによっては、特定のエンティティをアクティブまたは非アクティブにする必要があるかもしれません。
開ループモデルの安定性のチェック
固有値を計算し、倒立振子の釣り合い状態の安定性を確認します。
線形化されたモデルの取得
ここで、、、およびは状態マトリックス、は状態ベクトル、は入力ベクトル、は出力ベクトルです。A、B、CおよびDマトリックスは、状態、入力および出力選択に依存します。状態はMotionSolveによって自動的に選択され、選択された状態は、出力ファイルの1つにレポートされます。ここでは、入力と出力のみを定義する必要があります。
MATLABでの制御システムの設計
制御システムの設計に関する詳しい解説は、本ドキュメントでは割愛します。しかし、倒立振子を安定させるための極配置(参考資料[1]参照)を使ったレギュレータ設計手順については、短く説明します。詳細は、制御の標準テキストおよびMATLABドキュメンテーションをご参照ください。
これは、システムが完全な状態制御可能(参考資料[1]および[2]参照)であるか、MATLABを使って簡単に検証できます。完全な状態のフィードバック制御法則 を使用します。ここで、は制御入力、はゲインベクトル、は状態ベクトルです。ここで、希望する極配置がベクトルに保管されることを前提とすると、極配置法を使ってを計算することができます。[-20 –20 –20 –20] (rad/s)における希望の極について、MATLABでのAcker関数から下記が得られます: k=1e3[-2.4186 -0.0163 -0.070 -0.0033].
MotionViewでの制御力のインプリメント
`-1e3*(-2.4186*AY({b_pendu.cm.idstring})-0.0163*DX({b_pendu.cm.idstring}),-0.070*WY({b_pendu.cm.idstring})-0.0033*VX({b_pendu.cm.idstring}))`
これは単に、ゲインベクトル(k)および状態ベクトル(x)要素間のドット積です。このソルバー変数は、Control Force - CLという名の力を定義するために使用されます。
力Control Force - CLが非アクティブとなっている場合はアクティブにします。
閉ループシステムの安定性のチェック
外乱力の追加とシミュレーションの実行
参考資料
Feedback Control of Dynamic Systems, G. G. Franklin, J. D. Powell, and A. Emami-Naeini, Third Edition, Addison Wesley.