Scilab/Xcosによる制御系シミュレーションの手引き scilab_mod

による現代制御理論に基づく
制御系シミュレーションの手引き
多田 和也(兵庫県立大学)
目次
第
章
第
章
第
章
第
章
第
章
はじめに
と
について
について
のインストール
を用いたシミュレーション
次システムを使って
の操作法を覚える
シミュレーション結果について考える
操作法の続き
次システムにおける状態フィードバック制御
次システムにおけるサーボ系
による制御系設計演習
次システムのシミュレーション
次システムにおける状態フィードバック制御
オブザーバ
第 章 はじめに
この文書はフリーの数値計算ソフトウェアである
(サイラボ)
を使って線形システム
の現代制御理論の基本的な内容を学習するための補助教材として作成した。参考文献
のように,
を用いてシミュレーションを行いつつ制御理論を学習する,という形式の書物もこれまで
に発行されているが,
を全面的に使用した書物はあまり見当たらないようである。本文書は
を用いて学部レベルの現代制御理論の学習上に現れるモデルをシミュレーションする手順を,
現代制御理論のことはある程度知っているのだけれどもこのソフトウェアに対する知識が無い,と
いう人に伝えるのが主要な目的であり,理論の解説も
い。現代制御理論そのものについては参考文献
全体についての解説も意図していな
などの教科書を参照されたい。
制御工学の学習をしているときに,教科書に載っているものよりほんの少しでも複雑なシステム
について手計算で解を求めようとすると,結構面倒くさい思いをすることは,しばしば経験する
ことである。そしてそれが今日の制御工学の学習にとって本当に必要な苦労かどうかは,いささか
疑問である。高性能のパソコンを個人的に所有することが当たり前となった現在,
を使うこ
とによってお金をかけずとも誰でもそのような計算を自分のパソコンに実行させることができる。
は
ベースのものが多いので,近い将来にスマートフォンやタブレットでも
が簡単に使えるようになるであろう。
制御対象にある工夫を施したとき,いかなる結果が得られるか即座にシミュレーションで確認で
きれば非常に便利である。たとえばサーボ系について,限られた時間内に手計算を使って説明しよ
うとすると,定常値のみを用いた議論をするのが関の山であるが,シミュレーションを行えばどの
ような過渡応答となるのかが一目で理解できる。一方で,よく指摘されることながら,基礎知識の
ない者がこのようなツールを使うと,見た目だけは何事かを成し遂げたようであっても「明らかな
間違いを気づけない/理解できない」という問題が生じる可能性があることには常に注意すべきで
ある。
筆者自身「超」のつく
ビギナーであり,この文書は自らの学習メモでしかないが,せっか
く作ったので公開することにした。いささかくどいほど順を追って操作法を述べたこのような文書
は,ヘビーユーザーになってしまうと,アホらしくて作る気にならないのではないだろうか。図は
スクリーンショットをぺたぺた貼り付けただけで単なるメモ書きの範疇を超えない。そうした前提
の上でさえ,冗長な部分や思い込みによる誤り,そして不足している記述も多々あることと思われ
る。気づいた点については,適宜アップデートできれば,と考えている。
この文書はフリーの文書プロセッサ
を用いて作成した。
といい
といい,この
ようなレベルのソフトウェアを作り上げ,無償で提供される方々のボランティア精神に驚嘆すると
ともに感謝の念を禁じえない。
第 章
と
について
プロ用の制御系解析・設計ツールとして
回路シミュレータとして著名な
が有名であるが,非常に高価である。電気・電子
同様,
のコアの計算プログラムである
もともと大学研究者らによって開発されたフリーのソフトウェアである。
は
は,
フランス国立情報学自動制御研究所 で
開発・メンテナンスされている
グラムを
ライクなフリーのソフトウェアである。このようなプロ
クローンとも呼び,他に
などが知られている。
について
ベースのグラフィカルなシミュレーションツールとして
がある。これは
と
は異なったプログラムであり,以前は別個にインストールする必要があった。しかしながら,現在
最新の
では(もう少し前のバージョンでも)
内に
というラフィカルなシ
ミュレーションツールが用意されている。
のインストール
のインストールは,
図
へアクセスすることにより簡単にでき
る。この手のソフトウェアの細かインストール手順は頻繁に変わることが多いので,ここでは詳し
く述べない。ダウンロードしたインストーラを起動すると,後は特に考える必要もなく,素直にク
リックしていけばインストールできるはずである。
図
のホームページ
(
年
月)
第 章
を用いたシミュレーション
次システムを使って
の操作法を覚える
を用いることで,グラフィカルにシステムのシミュレーションを行うことができる。
を起動後,図
に示すようにメニューバーの「アプリケーション」から
図
デフォルトの状態で
のが
右側の
を起動すると図
を起動する。
の起動
のようにウインドウが2個開く。左側に示したも
で使用できる部品のリストであるパレットブラウザである。このパレットブラウザから
のウインドウでドラッグ&ドロップにより部品を配置する。
図
非常に簡単な例として,次のような
起動直後の画面
次システムのシミュレーションを行ってみよう。
第
章
を用いたシミュレーション
(例題
)次の
次システムの単位ステップ応答をシミュレーションせよ。
ただし,
とする。
まずシミュレーション全体のクロックを置く。図
に示すようにパレットブラウザの「信号源」
」をマウス左クリックにより選択・ドラッグし,
→「
のウインドウ上にドロップし
て配置する。
図
「
同じ調子で「汎用ブロック」→「
」,
「出力/表示」→「
」及び「
」,
「数値計算」→「
のように配置する。複数必要な「
」は,
トすればよい。また,下にある「
「
」を置く
」,
「数値計算」→「
」を
ウインドウズ上に図
ウインドウ上のものをコピー&ペース
」はデフォルトのものをマウス左クリックで指定し,
」のコマンドで反転させることができる。
図
ブロックの配置
第
章
を用いたシミュレーション
各ブロックについている黒い三角印が信号の入出力端子である。図
に示すように接続したい
端子の片方をマウス左クリックし,ボタンを押したまま他方の端子までドラッグすれば,信号線が
接続される。
図
信号を分岐させたい場合には,図
配線の仕方
に示すように既に引いてある配線上の分岐させたいところ
でマウス左クリックすれば,信号を引き出すことができる。また配線の向きを変えたい場合には,
その場所でマウスのボタンを離せばよい。
図
この要領で図
のように配線する。
配線の分岐
第
章
を用いたシミュレーション
図
次に,
「
配線が完了した状態
」のパラメータを設定する。図
に示すように,設定したいブロックをマ
ウス右クリックすると現れるメニューから,
「ブロックパラメータ」を選択する。
図
ブロックパラメータの呼び出し
その時呼び出される次のダイアログで値を
に設定する。「
」についても同様の手順
で値を設定する。
図
また,図
「
に示すように「
」ブロックパラメータの設定
」の「初期化時間」を にする。積分器である「
」の初期値も同様に設定可能であるが,ここでは使用しない。
第
章
を用いたシミュレーション
図
例題
「
」ブロックパラメータの設定
をシミュレーションするモデルは図
図
図
に示すように,
を選び,
「積分終了時間」を
例題
のようになる。
のモデル
のメニューバーから「シミュレーション」→「パラメーター設定」
に設定する。
図
パラメーター設定
第
章
図
を用いたシミュレーション
に示すように,
のメニューバーから「シミュレーション」→「開始」を選ぶことに
より,シミュレーションが始まる。
図
しばらく待つと,図
シミュレーションの開始
に示すように,実行結果がグラフィック・ウインドウに表示される。
図
例題
のシミュレーション結果
縦軸にしろ横軸にしろ,なんとも中途半端感がぬぐえない図である。グラフィック・ウインドウ
の「編集」→「軸プロパティ」を選ぶと,軸を変更することができる。時間軸である横軸が長すぎ
るので,図
のように
クパラメータ内の「
軸の「
」の右端を
に設定する。「
」のブロッ
」の項目からあらかじめ設定しておくことも可能である。
第
章
を用いたシミュレーション
図
グラフ軸設定ダイアログ
軸(縦軸)についても同様に設定できる。なお,
「
及び「
」のブロックパラメータ内の「
」の項目からあらかじめ設定しておくことも可能である。図
」
に整形後のシミュ
レーション結果を示す。
図
例題
この問題は簡単に解析解が求められ,
は
に漸近しており,時定数は
以上のように,
のシミュレーション結果 整形後
となる。グラフに示された解
であることが読み取られ,結果が妥当であることが確認できる。
の操作は直感的に可能である。詳しくは,参考文献
などの書物やイン
第
章
を用いたシミュレーション
ターネット上の情報を参照されたい。この本では
は
例に限って言えば,
を使って解説されているが,ここで扱う
と同様に取り扱える。両者の関係について,
は
の
後継であるとか,コードとしては無関係であるとか,インターネット上で色々な情報が飛び交って
いるのを見たことがあるが,詳しくは知らない。
シミュレーション結果について考える
ところで,このシステムの過渡的な挙動を決定しているのは式
の
である。つまり,システ
ムのの単位ステップ応答は, や が何であれ,
(なにがしかの定数)
の形となっている。もし
この場合は出力
がどこか遠く(
は時間とともに
定であるという。今回は
として同じ
が得られる。
とした時の例題
とか
の符号)
であったとしたらどうなるだろうか?たとえば
ようにシミュレーションをしてみると図
図
(
のシミュレーション結果
に向かって限りなく大きくなっている。このように出力
とか)へ向かって行ってしまい収拾がつかなくなるシステムを不安
であったので,
は図
に示すようにある値で定常状態を迎
えることになる。このようなシステムを安定であるという。以上のように
の符号はシステムの
安定/不安定を決定するという,非常に重要な意味を持つ。
システムの安定/不安定についてさらに考えるためには,システムに初期値
力を
とした状態を考える方が都合がよい。その際の
の解は,
だけ与えて,入
第
章
を用いたシミュレーション
となる。
の場合は,
で
となる。これは何か
でない初期値を与えられたとき,十
分時間が経てば原点付近に復帰するシステムであるということである。よく使われるイメージは,
すり鉢上の凹の面のどこかに置いたボールが,斜面に沿って底に落ち着いていく,というものであ
る。あるいは,起き上がりこぼしややじろべえのようなものを思い浮かべてもよい。逆に,
の場合は,
で
となる。これは逆に凸の面のどこかにおいたボールが,斜面に沿っ
て遠くへ行ってしまう,というイメージである。では,
のときはどうであろうか?遠くへ
行ってしまうという訳ではないので不安定とは言い難いが,しかし,値が
のままである。つ
まり,どこかに安定するポイントがあるというわけではない。このようなシステムは「安定限界」
や「リアプノフの意味で安定」であるというような言葉も割り当てられているが,実際的な意味で
は安定とはみなされない。
それではシステムが安定であったとして, の絶対値はどのような意味を持つのであろうか?こ
れは定常値に近づく速さを決定している。つまり, の絶対値が大きければ大きいほど,より短い
時間で定常値に近づいていく。そこで, の絶対値の逆数のことを時定数と呼び,しばしば
す。また,重要な意味を持つ
で表
のことを「システムの固有値」と呼ぶ。システムの固有値はまた,
古典制御理論でいうところの「極」と同じ意味を持つ。
それで初等的な現代制御理論で教わることは結局なにか?ということを考えると,ごく単純には,
「システムの固有値を望みのとおりに変えるわざ」であるといえる。後でみるように, 次システ
ムでは非常に簡単にこのことは達成される。
ここで終われば話は簡単なのだが,世の中 次システムばかりではない。というか 次以上のシ
ステムがほとんどである。 次以上のシステムでは
はスカラー,つまり単なる数値
ではなく
行列
次の時
次の時
で表される。 次のシステムの場合は固有値は
個しかないのであるが,
字が並ぶ。あきらかに過剰である。 次のシステムの場合は固有値は
の中身には
の中身には
個も数
個しかないのであるが,
個も数字が並ぶので,もっと過剰である。(自由度がある,とも表現できるかもしれ
ない。)このことは,同じ固有値(=時間的な挙動)を持つシステムに,いくらでも多様な
り当てられるということである。あるいは,ぱっと見た感じでは全く異なる
を持つシステムで
あっても,時間的な挙動の本質は同じ,ということがあるということである。そして
次の時
が割
第
章
を用いたシミュレーション
次の時
といった形に固有値
をあぶり出すわざが線形代数でいう対角化という計算技法であり,
これを含めて都合のよいような形に行列を変換するための計算技術が相似変換である。 次以上の
システムを扱うためにはこれらの線形代数学の知識が必要である理由がおわかりだろうか?
操作法の続き
引き続き,このシステムを用いて状態フィードバック制御についてシミュレーションを行う。積
分器がたくさん並ぶとごちゃごちゃして見にくくなる。そこで,このシステムを一つのブロックに
まとめて,すっきり見やすい形にしておきたい。図
システムを選択した後,右クリックすると図
のようにマウス左クリック&ドラッグで
のように現れるメニューから「スーパーブロッ
ク」に変換することができる。
図
ブロックの選択
第
章
を用いたシミュレーション
図
図
スーパーブロックへの変換
に示すように,スーパーブロックに変換される。
図
スーパーブロック
スーパーブロックをマウス左ダブルクリックすると,中のモデルを見ることができる。元の全
体像に戻るためには,ウインドウの背景部分をマウス右クリックすると図
ニューから「親ダイアグラムを表示」を選べばよい。
のように現れるメ
第
章
を用いたシミュレーション
図
親ダイアグラムの表示
モデルにコメントを付ける手順を以下に記す。まず,背景の適当な部分をマウス左ダブルクリッ
クすると図
に示すように「 」という文字列が入ったコメントのボックスができる。文字列
をダブルクリックして選択することで,内容を変更することができる。
コメントの作成
コメントを付けた例題
図
のモデル
コメントの作成手順
グラフに出力とともに目標値も表示させた方が,何が起こっているのか見やすいであろう。この
ためような目的にマルチプレクサを使用することできる。図
に示すように,目標値と出力を
第
章
を用いたシミュレーション
「汎用ブロック」→「
」で選択できるマルチプレクサで結合し,配線しなおす。
図
マルチプレクサの追加
次システムにおける状態フィードバック制御
以上の準備をもとに, 次システムにおける状態フィードバック制御のシミュレーションを行っ
ていこう。本当は 次システムでは「状態」フィードバックなどと仰々しく言う必要はないのであ
るが,分かり切っているようなことを現代制御理論の用語を使って捉えなおすことにより,現代制
御理論の教科書に漂う「とりつきにくさ」を回避するのに役立つのではないかと考える。
(例題
)例題
クゲイン
の制御対象システムに対し,全体の固有値が
を定め,シミュレーション結果を示せ。なお,状態変数
となるような状態フィードバッ
の初期値を
とすること。
制御対象は 次システムであり,可制御性を持っている。これはつまり,唯一の状態変数である
に対して入力
が直接接続されており,
可能ということである。たとえば,
であれば,当たり前のことながら
によって
の状態を自在に変更することが
から加算点につながる間にあるゲイン(現在は )がもし
に
は全く関与することができない。このような状態
を可制御ではないとか,不可制御であるという。具体的な例でいえば,普通,自転車のブレーキ・
レバーは何らかの方法,たとえば(というかほとんど)ワイヤーでブレーキ本体と接続されてい
る。それだからブレーキ・レバーを握ることでブレーキを動かすことができるのである。これが可
制御ということである。整備不良の自転車ではこのワイヤーが切れることがままある。こうなると
いくらブレーキ・レバーを動かしてもブレーキを働かせることはできない。これが不可制御である
ということである。
可制御なシステムに対しては,状態フィードバック制御を施すことにより,つまり制御対象への
入力
を
とすることによってシステムの固有値(時定数の逆数)を自在に変更することが可能である。式
を式
に代入すると
第
章
を用いたシミュレーション
となる。この固有値を
とするためには,この方程式が
とならなくてはならない。このことから,
と求められる。
これをシミュレートするのであるが,さきほどスーパーブロックとした制御対象システムには状
態変数
が出力されていないので,この出力端子を取り付けよう。スーパーブロックをマウス左
ダブルクリックで開き,
「 」の出力端子をコピー&ペーストした後,それをマウス左ダブルクリッ
クして端子番号を「 」にしておく。その後,状態変数である
た,状態変数
「
は積分器「
」を
よりこの端子に配線を引く。ま
」の出力である。ブロックパラメータからその初期値
としておこう。変更後の「制御対象」スーパーブロックを図
図
「制御対象」スーパーブロックの変更
親ブロックに戻ると,今まで引いていた配線が途切れているのでこれを修正し,図
に状態フィードバックを施したシステムのモデルを作成する。この段階では,出力
ではなく,原点である
のよう
を目標値
に収束させるシステムとなっていることに注意されたい。
図
実行させた結果は図
に示す。
状態フィードバック制御(原点復帰)
に示すとおりとなる。なお,親ブロックに戻ってから実行しなければ
ならないので注意されたい。また,ファイルの保存も親ブロックに戻って行わないと,全体が保存
第
章
を用いたシミュレーション
されない。
からずっと
である線が目標値で,初期値
点に収束しているものが出力
である。図
から固有値の逆数である時定数
で見られた時定数
で原
よりも応答が速くなっ
ていることが分かる。このように状態フィードバック制御により応答性を改善することができる。
図
状態フィードバック制御(原点復帰)の実行結果
しかしながら,このままでは「おき上がりこぼし」あるいは「やじろべえ」のように原点復帰し
かできないので,あまりというか殆どうれしくない。考えてみれば目標値とシステムが接続されて
いないので当たり前の話であるが。そうではなく,出力
をある目標値に収束させるようなシス
テムを実現したい。それにはもうひと工夫必要である。天下り的に答えをいってしまうが,それに
は目標値に何らかのゲインを乗じたものを
(例題
出力
)例題
を目標値
これを例題
に加えるとよい。そこで,そのゲインを求めよう。
のシステムに対し,制御対象への入力信号
に収束させることができる。このような入力ゲイン
とすることで
を求めよ。
の式に代入すると
状態フィードバック制御を施したこのシステムは漸近安定であるので,時間 を無限大とした定
常状態では状態変数の微分値は
となる。これより,
となることがわかる。出力
の定常値は
である。いま,
としたいのであるから,
と求められる。このような入力ゲイン
第
章
を用いたシミュレーション
を設定したのが,次の図
である。配線を変更している途中でエラーが出る場合があるが,そ
の際にはそのブロックから引き出している配線を全て削除してやり直すとうまくいく場合がある。
図
実行させた結果は図
状態フィードバック制御(入力ゲインつき)
に示すとおりとなる。めでたく
が目標値である
に収束している
ことが確認できる。目標値をいろいろ変えてみても,やはり出力の定常値が目標値に一致すること
を確認できるであろう。
図
状態フィードバック制御(入力ゲインつき)の実行結果
さて,これでメデタシメデタシ,一見落着,かと思うかもしれないが,実はこのシステムには大
きな弱点がある。つまり,このシステムは
に外乱として一定値が加わったり,システム方程式
の定数が経時変化した場合に,出力の定常値が直接影響を受けてしまうのである。たとえば,シス
テム方程式が経時変化により
ると,図
のように変化したとしてみ
の様に目標値と出力の定常値が異なる,という結果が得られる。
第
章
を用いたシミュレーション
図
次に,図
システム行列が変化した場合の実行結果
のように外乱として
に
で起動する単位ステップ関数を加えた場合を考
えよう。パレットブラウザから「信号源」→「
」を選び,制御対象のスーパー
ブロックに加える。
図
「
「制御対象」スーパーブロックへの外乱の追加
」のブロックパラメータを図
のように設定する。
第
章
を用いたシミュレーション
図
「
」ブロックパラメータの設定
この変更を加えた後,親ブロックに戻り,シミュレーションを実行すると図
が得られる。
が一度目標値である
に達して定常状態となった後,
のような結果
で加わった外乱によ
り定常値が増加することが確認できる。
図
このように,図
外乱が重畳した場合の実行結果
に示したシステムは,目標値に出力を合わせる,という目的は何とか満た
すものであるが,いかにも色々な影響を受けやすく,到底頑健であるとはいえない。これを改良し
たシステムが,サーボ系である。残念ながらサーボ系は次数を上げることによって頑健性を確保す
る方法であるので, 次システムに最も簡易な
型のサーボ系を構成しただけでも, 次システム
になってしまう。
次システムにおけるサーボ系
節の最後に述べたような欠点を除いたシステムがサーボ系である。すなわち,サーボ系は外
乱の重畳やシステムの微小な変化があった場合でも,定常誤差なく目標値に出力が追従する頑健性
第
章
を用いたシミュレーション
の高いシステムである。
(例題
)例題
のシステムに対し,システム全体の固有値が (重根)であるような
型の
サーボ系を構成せよ。
内部モデル原理を使った
型のサーボ系を構成すると,図
のようになる。ただし,コン
テキスト設定をせずにこの図のまま入力しようとすると,エラーが出て
「
あるいは
」に設定できないので注意する。エラーを避けるために,まず
から「シミュレーション」→「コンテキスト設定」を開き,図
してから,図
のメニューバー
,
と入力
のモデルを描く。
図
例題
図
に対する
型サーボ系のモデル
コンテキスト設定
上に示したモデルから,制御対象への入力信号
となる。ここで
のように仮に
を計数器
は
は内部モデルにより追加された状態変数で
ある。制御対象
第
章
を用いたシミュレーション
のシステム方程式
に対し,この
も含んだシステム方程式を拡大系と呼び,以下の通りとなる。
制御対象への入力
もこのような行列の形を用いて書くと
となる。
ここで
とおくと,このサーボ系の設計は,システム行列
ドバックゲインベクトル
と入力行列
を用いて所望の固有値に設定する,という問題に帰着する。この問題
は手計算で解くことも難しくはないが,ここでは
系はもはや
を持つシステムを,状態フィー
を用いて解を求めることにしよう。拡大
次システムではないので,ぱっと見た感じで可制御かどうかはわからない。第
章
で述べたように,これを判定するために可制御性行列というものを作り,その行列式の値を評価す
る必要がある。これが であればアウトで,固有値を自在に設定することはできない。そして「固
有値を設定」するということを「極配置」するという用語で表すのが一般的である。拡大系を定義
し,その可制御性行列
とするように
図
を設定する,という
の行列式の値を求めて可制御性を調べ,固有値を
のリストを図
に示す。
のようにメニューバーの「アプリケーション」から専用のエディタソフトである
を起動する。
の重根
第
章
を用いたシミュレーション
図
図
の起動
のリストを入力し,適当な名前(たとえば「 次 型サーボ系
のように
コンソールのメニューバーから「ファイル」→「実行」を選び,このファイルを選
択して実行する。第
章にもう少し詳しい説明がしてある。
図
図
実行結果を図
」)で保存する。図
に示す。
例題
ファイルの実行
を解く
リスト
第
章
を用いたシミュレーション
図
この結果から,
,
図
の実行結果
とすればよいことがわかった。この値をコンテキスト設定に入
力し,シミュレーションを実行すると図
に示すように目標値である
に収束する応答が得ら
れる。
図
例題
ここで,たとえばシステムの方程式を例題
のシミュレーション結果
の最後に示したのと同様に経年変化により
と変化し,さらに
で起動する単位ステップ関数状の外乱
が加わった場合を考える。蛇足かと思われるがこのときの「制御対象」のスーパーブロックの中身
第
章
を図
を用いたシミュレーション
に一応示しておく。外乱の設定は
図
「制御対象」スーパーブロックの定数変更と外乱の追加
この場合のシミュレーション結果は次の図
は図
節の末尾に示したものと同一とする。
のようである。まず
において,過渡応答
とは若干異なっているものの,出力の定常値が目標値に一致しており,定常偏差なく制
御できていることがわかる。さらに
で外乱が加わった直後は出力が増加しているものの,そ
の後目標値に定常誤差なく追従していく様子がわかる。
図
型サーボ系におけるシステムの定数変化と外乱の影響
型のサーボ系は目標値が一定値である場合にはこのようにシステムの微小な変化や外乱の影響
を蒙った場合でも定常誤差なく追従するが,ランプ関数のような入力に対しては定常誤差が残って
しまう。これをシミュレートするために図
源」→「
「
に示すように目標値をパレットブラウザの「信号
」から選択して差し替える。もちろん,制御対象の各係数の値は元に戻しておく。
」のブロックパラメータを図
のように設定する。目標値を
で表すこととする
第
章
と,
を用いたシミュレーション
となる。
図
図
シミュレーション結果は図
図
「
目標値関数の差し替え
」ブロックパラメータの設定
のようになる。定常誤差が残っていることが確認できる。
型サーボ系へランプ関数の目標値を与えた結果
第
章
を用いたシミュレーション
をラプラス変換すると
である。すなわちランプ関数は固有値 (重根)を持つ形の
関数であるので,これに定常誤差なく追従するためには 型のサーボ系とする必要がある。次の例
題でこの問題に取り組む前に,図
に示すように,先ほど作ったモデルのうち,内部モデルの
部分をスーパーブロックとしておこう。
図
(例題
)例題
内部モデルのスーパーブロック化
のシステムに対し,システム全体の固有値が (三重根)であるような
のサーボ系を構成せよ。
型のサーボ系とするためには,内部モデルのスーパーブロックを図
よい。あらかじめ親ブロックの「コンテキスト設定」で
と
にダミーの数値を入れて定義す
るのを忘れないようにする。これを怠るとエラーが出る。
図
この図から,
に示すようにすれば
型の「内部モデル」スーパーブロック
型
第
章
を用いたシミュレーション
であるので,拡大系の各行列は,
となることを確認されたい。参考文献
にも同種の問題が取り上げられているが,
の割り振りが逆になっている。気になる方は読み替えていただきたい。
を計算する
プログラムのリストは図
図
実行結果を図
に示す。
例題
に示すとおりである。
を解く
リスト
と
第
章
を用いたシミュレーション
図
このように,
,
,
図
の実行結果
と設定すればよいことがわかる。これらの値をコンテキス
ト設定により設定し,シミュレートした結果を図
に示す。期待通り,ランプ関数である目標
値に対して定常誤差なく追従していることがわかる。
図
型サーボ系へランプ関数の目標値を与えた結果
それでは追従性を上げるために,むやみに積分器を追加すればよい,というものなのだろうか?
第
章
を用いたシミュレーション
これを考えるために,たとえば 型のサーボ系の単位ステップ応答をシミュレートしてみると,図
のようになる。 型サーボの場合に比べてオーバーシュートが大きくなるなど,過渡応答特性
は劣ったものとなっていることがわかる。もし定値制御しか行わないのであれば 型のサーボ系を
構成する必要はなく,場合によっては悪影響を及ぼす恐れがあることがわかる。
図
型サーボ系の単位ステップ応答
第 章
による制御系設計演習
次のような
モータを模した 次システムの問題を,
を使って解いてみよう。このよう
なシステムは制御工学の教科書の例題などで頻繁に現れる。
(例題
)システム
において,
のとき,
システムの可制御性行列及び可観測性行列を求めて可制御性と可観測性を調べよ。
固有値が (重根)となるような状態フィードバックゲインベクトル
上記の
ン
を定めよ。
を使って状態フィードバック制御を施した時,目標値に一致させるための入力ゲイ
を求めよ。
オブザーバゲインベクトル
を求めよ。
この例題は手計算でも簡単に答えを求めることができるので,
に頼る前にまずは自分で解
いてみられたい。
解けたら,
タ
」)で保存する。
を使って図
のリストを入力し,適当な名前(たとえば「 次
モー
第
章
による制御系設計演習
図
例題
を解く
リスト
このリストについて若干の説明を箇条書きで以下に記すが,詳しくは,参考文献
などの書物
やインターネット上の情報を参照されたい。ただし,この本では少し古いバージョンを使っている
ので,細かな点で最新バージョンとは異なるところがある。
では,
言語のような変数の型宣言は必要ない。
行列は と で囲まれた形で表記される。一行の中の要素はスペースまたはカンマで区切り,
行と行の間はセミコロンで区切る。
なので
と
なる。
行末を単に改行にすると結果がコンソールに表示されるが,セミコロンにすると表示され
ない。
行列
の行列式の値を求めるコマンド
行列
の逆行列を求めるコマンド
…
の値が設定される。(極配置)
に
の固有値が
…となるような
第
章
による制御系設計演習
オブザーバゲインベクトル
の計算について少し詳しく述べておく。まず極配置法による状態フィー
の計算がどんなものだったのかを思い出しておこう。それ
ドバックゲインベクトル
は,与えられたシステムの行列を
とするとき,指定された固有値
を満たすように
と
に対して
を定めることであった。
そしてこの計算を
で行うためには,たった1行
と記述すればよいのである。
一方,オブザーバゲインベクトル
とするとき,指定された固有値
となるような
の計算は,
と
に対して
を求めることである。これは上で見た
ものと行列の形を合わせるために
と
の計算と非常によく似ている。式
の転置をとって乗じてみると
となるが,これを
と比較するとちょうど転置の関係にあることが分かる。以上のことから,
の
第
章
による制御系設計演習
を満たすようにオブザーバゲインベクトルの転置
この計算を
を定めればよいことがわかる。
で行うためには,
’
’
と記述すればよい。
その後,
を転置して
を得ればよいことになる。ここでは
の行列の場合について少し
詳しく記述したが,ちょっと考えれば分かるように
は一般に成り立つ関係であるの
で,高次のシステムの場合でも同じコマンドで計算できる。図
のように
コンソールのメ
ニューバーから「ファイル」→「実行」を選び,このファイルを選択して実行する。
図
出力は図
ファイルの実行
のようになる。自分で求めた結果と比較されたい。
第
章
による制御系設計演習
図
例題
の実行結果
ここで終わってはあまりご利益を感じないかもしれない。しかしながら,実際の
モータのシ
ステム方程式に表れる定数は,ここで出てきたような「 」とか「 」などではない。また,この
モデルでは 次のシステムとするために電機子のリアクタンスを無視している。いずれも,授業あ
るいは学習の進行を妨げるほど計算を面倒にしないための方便である。また,入力行列
が複数の
以外の要素を持つような問題に遭遇した場合, を手計算で求めようとすると「何かの嫌がらせ
かしら?」と思うほど非常に面倒な思いをする。これらの問題は
を使用することで解消さ
れる。何しろ,少々面倒な行列でも,高次のシステムでも
とコマンドを打ち込むだけで計算してくれるのだから。
チンパンジーの知能は高く,米国在住であった
ちゃんは現地の手話も理解したそうであ
第
章
による制御系設計演習
る。日本では箕面のお猿さんが人間から強奪したお金で自動販売機を操作してジュースを買う,と
いうお笑いネタがあるほど賢い動物であるという。マニュアル通りにパソコンを操作するだけな
ら,チンパンジーやお猿さんを訓練してもやってくれるかもしれない。ただし,自分が何をやって
いるのか?ということを理解して行う者と,そうでない者とでは大きな違いがある。後者,すなわ
ちチンパンジーやお猿さんの仲間になりたくなければ,例題
のようなごく基本的な問題が何を
意味しているのかを理解し,手計算で解くことができる程度の知識を持つことは必要であろう。
第 章
次システムのシミュレーション
次システムにおける状態フィードバック制御
例題
で扱った
モータを模した
次システムのシミュレーションを行ってみよう。制御対
象をいちいち積分器を明示して表すと大変面倒である。
表されたシステムを表現するために「
デルは図
」というブロックが用意されている。これを用いてモ
のように描くことができる。「
ム」→「
では行列を用いてシステム方程式で
」で指定できる。また「
」は,パレットブラウザ内の「連続時間システ
」に入力している制御対象への入力
を引き出し
てグラフ表示に使用しようとするとエラーが出てしまったため,複製してある。(筆者は
」が複数ある場合
ギナー故,このような方法しか思いつかなかった。)この例のように「
は,ブロックパラメータ内の「
ある。また,
「
」に
ビ
」によって名称を指定しておくと便利で
や
という文字を入力する前に,
ミュレーション」→「コンテキスト設定」を選択し,図
のメニューバーから「シ
のようなコンテキストを設定する。こ
れを先にしておかないと,エラーが出る。
図
第
次
モータのシミュレーションモデル
章では1次システムの例では別途
力したが,ここではコンテキスト設定中に
行う。
コンソールで求めた定数をコンテキスト設定に入
プログラムを直接入力し,シミュレーションを
第
章
次システムのシミュレーション
図
図
制御対象のシステムを表す「
クパラメータを図
を入力する前に行うコンテキスト設定
」ブロックを右クリックすると現れるメニューから,ブロッ
のように設定する。繰り返すが,この作業の先だって「コンテキスト設定」
をしておくこと。
図
ここで
の出力である
は
制御対象「
と同じ形の単位行列を,
は と同じ形のゼロ行列を表す。
「
はスカラーではなく, と同じ次数のベクトルであり,ここでは
はゼロ行列であるので, は式
力ベクトル
」ブロックパラメータの設定
を乗じて式
でいうところの
は単位行列,
であることに注意すること。後ほど
でいうところのスカラ出力
」
に出
を取り出している。
メニューバーにある「シミュレーション」→「開始」を選択し,シミュレーションを実行すると,
図
のような結果が得られる。これらのグラフでは,見やすいように軸を変更している。出力
が目標値である に収束していることが分かる。また,このときの制御対象への入力信号
を図
に示す。
第
章
次システムのシミュレーション
図
図
次
次
モータのシミュレーション結果(目標値と出力
モータのシミュレーション結果(制御対象への入力信号
)
)
システムの固有値の絶対値をより大きくすることで,より速く目標値に収束させることができる
だろう。実際,固有値を
としてみた例を図
れている。しかしながら,制御対象への入力信号
に示す。たしかに,より速く目標値に制御さ
の最大値は図
に示すように図
に比べ
て極めて大きく,場合によっては非現実的なものとなるであろう。このように,固有値を自由に設
定できるということは制御系の設計において非常に大きな意味を持つが,それではどのような固有
値を設定すべきなのか?という問題はこの段階では依然残っていることに注意が必要である。
第
章
図
図
次システムのシミュレーション
固有値を変更した
固有値を変更した
次
次
モータのシミュレーション結果(目標値と出力
モータのシミュレーション結果(制御対象への入力信号
)
)
オブザーバ
状態フィードバック制御では,状態ベクトルの構成要素である状態変数を全て使うことになるの
で,それらを観測するためのセンサーが状態変数の数だけ必要である。たとえば
モータの場合
だと,位置を測定するポテンショメータと速度を計測するタコメータが必要になる。当然このよう
なセンサーにはお金がかかるので,センサーの数を減らしてコストを下げたいとか,そもそもそん
な状態変数を計測するセンサーなんて世の中にないんですけど,といった要求や苦情がでてくる。
オブザーバ(状態観測器)は,そのような要求に「計算技術で答えましょう,あなたは出力
を
第
章
次システムのシミュレーション
測定するセンサだけご用意ください」,と答えてくれる道案内役である。高性能の電子回路素子が
安価に手に入るようになった現在,これを使わない手は無い,といえよう。
オブザーバの発想の原点は,制御対象であるシステム(この中に含まれる状態変数は物理量であ
り,電圧や電流だけではなく,圧力や温度や水位や熱量や回転数や位置などの場合もある。それを
センサで取り込んで電圧などの使いやすい物理量に変換し,コンピュータが使いたければアナログ
/デジタル変換をかけてメモリ上の数値にする。)と同じ挙動を示すモデル・システム(ふつうは
コンピュータ内のプログラムだがオペアンプなどを使った電子回路でもよい。前者ではメモリ上の
数値で,また後者では電圧で状態変数が再現される。)を用意し,状態変数を計算によって推定す
る,というものである。しかしここで一つ困った問題が起こる。つまり,センサをけちった報いと
して,ふつうは,制御対象であるシステムの状態変数の初期値が正確には分からない,ということ
である。これにより,状態変数そのものとモデル・システムによる推定値には誤差が生じる。
システム
に対して状態変数を推定するためのモデル・システムを
としよう。式
から式
を差し引いたものが推定誤差
の従う方程式である。
この解は
となる。これは,推定誤差の縮まり方を決める固有値と,制御対象のシステムの固有値が等しいこ
とを示している。制御対象のシステムのが安定であれば当初の推定誤差はシステムの固有値に従っ
て縮まることを示しているが,その速さを決めることはできない。そもそも制御対象のシステムが
安定でなければ,縮まりすらしない,ということである。
ためしに,コンテキスト設定でシステム行列を
してみる。それから,図
のように配線をする。
以外は同じとする。初期値について,制御対象は
ておく。
と書き換えて制御対象を不安定に
のブロックパラメータは図
と初期値
,モデル・システムは
とし
第
章
次システムのシミュレーション
図
モデル・システムを含めた不安定な
シミュレーションした結果を図に示す。
で
次システムのシミュレーションモデル
や
は,状態フィードバック制御により安定化しているが,
といった値から始まる状態変数自体
で
であったモデル・システムの出
力のグラフは枠外にはみ出してしまい,到底「推定値」の名に値するものではないことがわかる。
図
図
のシミュレーション結果(状態変数とその推定値?)
そこで,この推定誤差を指定した固有値で縮める工夫をしたものが,オブザーバと呼ばれるもの
である。状態変数全ての推定値を出力するようなものを特に,同一次元オブザーバという。アイデ
アはこうである。式
をなんとかして
の形にできないか?ということである。 が入るのは誤差修正の手段として
るためである。
(状態フィードバック制御のところで聞いたような話である。)ここで
バゲインベクトルであり,2次系システムの場合,
を活用す
はオブザー
第
章
次システムのシミュレーション
で表され,設計者が決めることができる。もしこのようにできれば,設計者が決めた固有値を式
に持たせることができる,というわけである。
式
の従う方程式は,
であるが,これを変形していくと
となる。これに式
と式
を代入すると,
と,オブザーバを表す方程式が得られる。これはもちろん実現可能である。
め方については第
を使った
の決
章に記述した。
同一次元オブザーバのシミュレーションを行ってみよう。まず図
に示すように,コンテキス
ト設定にオブザーバゲインベクトルの計算を追加する。オブザーバの固有値は (重根)とする。
図
次に図
オブザーバを含めたコンテキスト設定
のようにモデルにオブザーバを追加する。このモデルはオブザーバの挙動を見るた
めだけのものなので「見てるだけオブザーバ」と名付けておこう。状態フィードバック制御には状
第
章
次システムのシミュレーション
態ベクトル
を用いており,オブザーバは状態ベクトルを推定しているだけで制御に寄与させ
ていないことに注意しよう。
図
「見てるだけオブザーバ」を含めた
オブザーバとして示してある「
ここで,式
次
モータのシミュレーションモデル
」ブロックのブロックパラメータを図
のようにする。
の一部が
と表現されていることに注意しよう。
図
「
」ブロックパラメータの設定
制御対象の初期値とオブザーバの初期値が同じであると,グラフが重なってしまう。そもそもオ
第
章
次システムのシミュレーション
ブザーバは制御対象の初期値が何か分からない状態でも設定した固有値に従って推定誤差を縮め
てくれるというのが「売り」である。そこで,オブザーバの挙動を見るために,制御対象の初期値
を
と,オブザーバの初期値
ションしてみる。状態変数とその推定値のグラフは図
とは異なるものにしてシミュレー
のようになる。初期値が
のものがオ
ブザーバによる推定値であり,そうでないものが状態変数である。
図
状態変数とその推定値
このように,状態変数とその推定値の誤差が
には殆ど無くなっていることが分かる。先
ほど行ったシミュレーションから,このシステムでは出力
が目標値に一致するのは
程
度であるので,この推定値を用いて状態フィードバック制御を施しても大きな問題は生じないと考
えられる。そこで,図
の矢印で示すように配線を変更し,オブザーバによる推定値を用いて
状態フィードバック制御を施してみる。
図
オブザーバを含めた
次
モータのシミュレーションモデル
第
章
次システムのシミュレーション
シミュレーションの実行結果を図
に示す。状態変数そのものを用いた場合と遜色ない制御
が行われていることが分かる。
図
オブザーバを用いた状態フィードバック制御の結果(出力
制御対象への入力信号
は図
)
の通りとなる。状態変数そのものを用いた場合よりも速く
制御されており,制御対象への入力信号の値も小さくなっているが,これはここで選んだ初期値に
よってたまたまもたらされた結果と言える。
図
オブザーバを用いた状態フィードバック制御の結果(制御対象への入力信号
このときの状態変数とオブザーバによる状態変数の推定値は図
)
のとおりである。初期値が
のものがオブザーバによる推定値であり,そうでないものが状態変数である。
第
章
図
次システムのシミュレーション
遅いオブザーバを用いた状態フィードバック制御の結果(状態変数とその推定値)
一般に,オブザーバの固有値は状態フィードバックゲインを定める時に指定する固有値(状態
フィードバック制御により実現される固有値)よりも,その絶対値が大きい場合に所望の動作が得
られる。教科書
にもそう書いてあるが本当だろうか?試しにオブザーバの固有値を
の重
根としてみた結果を以下に示す。これは固有値の絶対値が小さく時定数が大きいので「遅いオブ
ザーバ」と名付けられるだろう。図
に示すように状態変数の推定が正確にできているとは言
えず,また図
は
に示すように出力
でもまだ目標値に達していない。この時点では,
道案内役である状態変数の推定値がまだ道に迷っている状態なので,これは当然の結果である。
図
遅いオブザーバを用いた状態フィードバック制御の結果(状態変数とその推定値)
第
章
次システムのシミュレーション
図
遅いオブザーバを用いた状態フィードバック制御の結果(出力
)
関連図書
橋本,石井,小林,大山「
で学ぶシステム制御の基礎」オーム社,
中野,美田「制御基礎理論―古典から現代まで」昭晃堂,
江口,大屋「はじめて学ぶ現代制御の基礎」東京電機大学出版局,
橋本,石井「
で学ぶシミュレーションの基礎」オーム社,