Scilab/Xcosのデモを動かしながら「制御」を学ぼうと素人老人の野望。前回はバンバン制御でした。これは素人老人にも分かりやすかったかも。ONとOFFだけだし。今回は「基本制御器」です。「基本」というからにはわかりやすいんじゃね?基本というわりには一気に高度化?素人老人はついていけませぬ。先が思いやられる?
※「ブロックを積みながら」投稿順 index はこちら
※動作確認にはWindows 11の パソコン(64bit)上にインストールしたScilabの以下バージョンを使用しています。
Scilab 2024.0.0
今回練習してみるデモ
実を言えば、前回がバンバン制御だったので、今回は伝達関数使ったPID制御くらいにとどめて欲しかったんであります。しかし「基本制御器」開いたらば、状態空間システム使ったフローでした。連続、線形なのでいいだろ~?3変数なので行列もちょっと大きめ。もうちっとステップ踏んでほしかったのう。
まあフィードバックループがあって、くるくる回ることと末尾で誤差を計算してそれを表示しているのは素人老人にも分かります。しかし、中ほどにはSuper Blockが2つ。肝心なものはこの中に押し込められてるみたいです。
しかし、一番大事なところは Context 設定の画面でしたぜ。
開けば、行列ABCDが並んでおります。状態空間モデルで使われる係数なんでありましょう。変数は3つあるみたいね。何だか具体的なことは分からんけど。
しかし ppol って関数でKとLという核心的なものどもを計算しているけれどもこれは何?HELPファイルから1か所引用させていただきます。
K=ppol(A,B,poles) は, A-B*Kの固有値がpolesとなるような mxn 次のゲイン行列 K を返します. (A,B) は可制御である必要があります. polesが複素数の場合,共役の組で指定する必要があります. (A,C)の出力注入ゲイン F は 以下のように得られます: Ft=ppol(A’,C’,poles); F=Ft’
この説明よんでもナンジャラホイだな~。も少し「手前」のところをGoogleの生成AI、Gemini様に教えてもらったところが以下に。
極を制御できればいろいろ出来るんだと。
実際にContextで定義されているABCDは以下のようです(やっぱり4角に並べないと行列な感じがしない。。。)
計算は出来るが、意味はサッパリだな。
フローの中の左下のSuper Blockの中身を調べてみたところが以下に。
どうもこちらは制御対象の「状態空間システム」みたいだね。
こちら側こそが、制御器(どうも各変数をゼロに近づけようとするのが今回のお題みたい)の実体でありそうっす。ABCDの各値の実際はこんな感じ。
なお乱数ジェネレータの設定が以下に。これもテク使っているぜよ。
デモの実行
黒、緑、赤の順に3変数(何なのか具体的なことは分からんけど、線形システムの変数ということで)デス。各変数を0に近づけようと制御器がフィードバックをかけてくるので徐々に落ち着いてくる。ホントか?