いま対象が物理的な釣り合いの状態にあるとき,何らかの原因でこれが乱されたとしよう。このとき,対象に働きかけて,元の物理的な釣り合いの状態に速やかに戻すことは,最も基本的な制御目的として知られている。もし,対象自身に復元力が備わっていて,元の状態に戻ろうとする性質があれば,対象は「安定」(正確には「漸近安定」)と呼ばれる。このことを状態方程式$\dot{x}=Ax+Bu$から,どのように調べるかが,本章のテーマである。
そのために,まず状態方程式を解くことから始める。その解は,与えられた入力のもとでの状態の時間的振る舞い,すなわち「時間応答」を表している。これは,「零入力応答」と「零状態応答」の和として表される。ここで,零入力応答とは,入力を零すなわち$u=0$として,初期状態$x(0)\ne0$から出発して得られる時間応答であり,零状態応答とは,初期状態$x(0)=0$のもとで適当な入力が与えられるときの時間応答である。対象が物理的な釣り合いの状態にあって,これが何らかの原因で乱されたときの時間的振る舞いは,零入力応答に対応する。そこで,1次系$\dot{x}=ax$に対しては,$a<0$ならば安定である,また,$n$次系$\dot{x}=Ax$に対しては,「正方行列$A$の固有値の実部がすべて負であるならば安定」と判定すればよいことを学ぶ。 一方,零状態応答の中で重要なのは「インパルス応答」と呼ばれるもので,これが与えられると,どのような入力が与えられても,たたみこみ積分を行って出力が求まることを理解してほしい。 |
投稿者「cacsd」のアーカイブ
1. 物理法則から状態方程式を導く
私たちが制御したい対象が物である場合,その振る舞いは物理法則により記述される。一般に,動的な振る舞いを表す物理法則は微分方程式で表される。微分方程式というと尻込みする人もいるかもしれないが,最初は,ニュートンの運動第2法則![]() さて,制御を行うには対象の動的な振る舞い(状態変数の時間変化)を観測することが必要であり,そのためにセンサが用いられる。ここで,現実には,すべての状態変数にセンサを配置できるわけではなく,通常は状態変数の一部がセンサにより観測される。センサにより観測される変数と状態変数の間の関係式を,制御対象の「出力方程式」と呼ぶ。 本章では,動的な振る舞いが連立線形微分方程式で記述されるいくつかの制御対象に対して,状態方程式と出力方程式をペアにした「状態空間表現」を求める。これを図示した「ブロック線図」は,計算機シミュレーションを行う際にも有用である。 |
1.1 状態空間表現の導出例
1.1.1 ペースメーカ
高齢化社会の到来に伴い,より優れた福祉・医療機器の開発が工学分野の大きなテーマの一つとなっている。図1.1に示すのは,心臓のペースメーカの簡単な原理図である。これは,まず左側の閉回路でコンデンサへの充電を行い,つぎにスイッチを切り替えてできる右側の閉回路で放電を行うという動作を周期的に繰り返すことにより,心臓のペースメーカの役割を果たそうとするものである。ここでは,状態方程式を導く最初の例として,このようなRC回路における充電と放電について考える。
そのために,キルヒホッフの電圧則より,左側閉回路と右側閉回路の回路方程式を考えると,それぞれ (1) (2) となる。ここで, (3) 状態方程式(3)を図1.2のように図示し,これを状態方程式に基づくブロック線図と呼ぶ。この描き方のポイントは,式(3)の右辺を表すのに加え合わせ記号○を用いることと,また 同様に,式(2)から得られる状態方程式は (4) であり,これによるブロック線図は図1.3のように示される。 (5) と与えられることはよいであろう(式(4)に代入して確かめよ)。状態方程式(4)は入力変数をもたないが,状態変数の初期値によって,状態変数の時間的振る舞いが現れる。この意味で,1次系(4)は シミュレーション1.1 式(5)で表されるコンデンサ電圧 (6) によって近似計算しなさい。 |
*系はsystemの訳語。ここでは「××システム」を簡潔に「××系」と書く。
**本書では,時間応答のコンピュータによるシミュレーション(simulation)の欄を設けた。最終的には時間応答の数学的理解が大切であるが,まずは,なぜそのような時間的振る舞いが現れるのかを物理的イメージをもって考えながら,典型的な時間応答に親しみをもってほしい。なお,本書の数値計算については演習問題の【4】を参照のこと。
1.1.2 教室のドア
教室で物の動きを実感できるものに,図1.5に示すようなばねとダンパ![]() ![]() 図1.5 緩衝装置をつけたドア このドアの運動は回転運動であるが,話しをわかりやすくするため,図1.6に示すような等価な直線運動として調べてみよう。その出発点は,ニュートンの運動第2法則 (7) である。ここで, (8) のように表すことができる。ここで,ダンパが第1項の力を,ばねが第2項の力を与える。 (9) を得る。 (10) (11) のような1階の連立線形微分方程式で表される。これらを行列表示すると (12) のような状態方程式を得る (13) を得るセンサはあるが,ドアの速度を計測するセンサはないものとする。このとき, (14) 以上から,ドアに対して,状態方程式(12)と出力方程式(14)からなる2次系(second-order system)としての状態空間表現を得た。 シミュレーション 式(12)において,
|
*ばねとダンパの特性値を調整するためのねじを回すことにより行われる。
**本書では,のように書いて,△を○で定義・表記する(△は○に等しいとする)。
1.1.3 直流モータ
代表的なアクチュエータとしてモータがある。例えば図1.9に示すのは,ロボットアームを駆動する直流モータである。 ![]() 図1.9 直流モータ このモデルは図1.10のように表される。 ![]() 図1.10 直流モータのモデル このとき,つぎが成り立つ。 (15) (16) ここで,式(15)は機械系としての運動方程式であるが,電流による発生トルクの項 (17) (18) (19) のような状態方程式を得る。状態方程式(19)は二つの入力変数 (20) となる。このように,直流モータに対して,状態方程式(19)と出力方程式(20)からなる3次系(third-order system)としての状態空間表現を得た。つぎに一つのシミュレーション例を示す。 (21) で与えられ,上の例では (22) これから (23) (24) は直流モータの機械的時定数と呼ばれている。上の例で計算してみると (25) 式(19)と比較すると,状態空間表現の次数を1だけ減らしたことになる。 低次元化の過程を図1.12~図1.14に示しておく。 |
*式(18)は,式(19)のように物理パラメータどうしの演算を含まず,それらの変動の影響を考察するのに便利な形式であり,ディスクリプタ形式の状態方程式と呼ばれる。
**ここでは,2.1.3項で学ぶ時定数の知識を前提にしている。
1.2 状態空間表現へのモデリング
前節で述べた内容は,モデリング(modeling)という枠組でとらえられる。これは,何らかの対象に対して,目的に応じた科学的分析を通してそのモデルを得ようとするものである。私たちが扱う対象は,入力と出力をもつ動的システム![]() ![]() ![]() 本書では,状態空間表現を次式のように書く。 (26) (27) ここで, |
*動的システムは,微分方程式・差分方程式のどちらで記述されるかによって連続時間系・離散時間系,重ね合わせの原理が成り立つか否かによって線形系・非線形系,常微分方程式か偏微分方程式かによって集中定数系・分布定数系,係数パラメータの時間依存性によって時変系・時不変系,入出力が確率過程であるか否かによって決定系・確率系などに分類される。
**非線形系の場合の取り扱いは7章で述べる。1~6章までは線形時不変系のみを扱う。
***他の数理モデルとして伝達関数表現がある。状態空間表現と伝達関数表現の間の相互関係については8章で述べる。
****他のアプローチとして,入力と出力の時系列データからモデリングを行うシステム同定がある。
1.3 状態空間表現の座標変換
状態空間表現を見やすくする一つの手段として,座標変換(coordinate transformation)があるので,これについて説明しよう。 いま, ![]() (28) (29) に対して,つぎの座標変換を行いたい。 (30) (31) に注意して (32) %すなわち (33) (34) となる。この結果を,参照しやすいようにつぎにまとめておく。 定理1.1 (35) (36) (37) 例題1.1 直流モータの状態方程式(25)において, (38) である。これに対して,座標変換 (39) を行うと,新しい状態方程式は (40) となることを示しなさい。 解答 座標変換後の (41) (42) のように得られる。 ここで,2次系の状態方程式が,二つの1次系の状態方程式 (43) に分離されており,入力から状態変数への影響の考察をしやすくなっていることに注意してほしい。 |
1.4 状態空間表現の直列結合
制御対象の状態空間表現を求める際に,図1.15に示すように,二つの部分システムの状態空間表現を求めておいて,これらを直列結合(serial connection)する場合がある。このときの結合システムの状態空間表現を求めることを考える。
まず,その結果を定理の形で示そう。 (44) (45) (46) (47) に対して, (48) (49) のように得られる。 証明 (50) (51) となる。第1式と (52) (53) に対して( (54) (55) を, 解答 定理1.2を用いて,直列結合の状態空間表現として (56) (57) が得られる 問1.4 例題1.2の直列結合の状態空間表現を,状態ベクトルが |
*ここで,行列の縦線と横線,
行列の横線は,状態ベクトルの要素
,
のサイズに適合するように引かれている。
演習問題
【1】 いろいろな計測装置の基礎となる電気回路の一つにブリッジ回路がある。 例えば,図1.16に示すブリッジ回路 ![]() (58) (59) で与えられる。いま,ブリッジ条件 (60) が成り立つとして,つぎの状態方程式を導出しなさい。 (61) この状態方程式に基づいて,平衡ブリッジ回路のブロック線図を描きなさい。
(62) (63) で与えられる。ここで, (64) この状態方程式に基づいて,連結台車のブロック線図を描きなさい。
MATLABとSIMULINKが手元にあれば,シミュレーション1.3と同一条件下で,直流モータの低次元化後の状態方程式25による角速度の応答を,低次元化前の状態方程式19によるものと比較しなさい。 ![]() |
*高橋・有本:回路網とシステム理論,コロナ社 (1974)のpp.6566から引用。
**B.Wie, D.2.Bernstein : Benchmark Problems for Robust Control Design, ACC Proc. pp.20472048 (1992) から引用。
***The Student Edition of MATLAB-Version\,5 User’s Guide, Prentice Hall (1997)
****The Student Edition of SIMULINK-Version\,2 User’s Guide, Prentice Hall (1998)
まえがき
本書は,動く物の制御に関心をもつ工学系の学生の皆さんに,状態方程式に基づく制御について説明するために書かれている。言うまでもないことだが,何らかの動く物を制御しようとすれば,それは物理法則に逆らってはできない。したがって,制御の出発点は,対象の動きを支配する運動方程式や回路方程式であり,これは一般には非線形の微分方程式で表される。どのような制御を行うかについてはさまざまなものが考えられるが,最も基本的なものは,ある物理的な釣り合いの状態(平衡状態)を保持することであり,この目的は安定化と呼ばれている。そのためには,すべての状態変数の変化をセンサによって即座にとらえて対象を操作する仕組み(状態フィードバック)と,またセンサの不足に備えて状態変数を推定する工夫(状態オブザーバ)が基本となる。
ところで,対象の時間的振る舞いは,ある平衡状態の近くでは,重ね合わせの原理がほぼ成り立ち,線形の微分方程式で十分近似できることが多い。これをラプラス変換して得られる伝達関数を前提にして,周波数領域で制御方式を考えるのが「古典制御」である。これに対し,状態空間法と呼ばれる本書のアプローチは,運動方程式や回路方程式から状態方程式を導いて,時間領域で制御方式を考えるもので,「現代制御」として知られている。近年は,古典制御と現代制御は相補的な関係を一段と強め,より高度に発展させられている。本シリーズでは,古典制御については,「フィードバック制御入門」で説明されている。また,その編集委員会によって,現代制御の線形理論について説明する本書のタイトルは,「線形システム制御入門」と与えられ,解析より設計の話にやや重点をおくことが意図されている。 以上のことをふまえて,本書では,現代制御の考え方を説明するためのストーリをつぎのように組み立ててみた。 1章 物理法則から状態方程式を導く ここで,1章から6章までは,2.3節の一部を除いて,対象が線形微分方程式で表される線形システムだけを扱い,7章で非線形システムへの対応について,8章で伝達関数と状態方程式の間の関係について述べた。したがって,微分積分,線形代数,力学,電気回路に関する基礎知識があれば,本書の大部分は古典制御よりも先に読めるであろう。つぎに,記述にあたっては,1次系について導入を行ったうえで,その結果を一般の高次系に拡張するというスタイルをとった。特に2次系についての説明は丁寧に行った。さらに,いくつかの節には$^*$印を付けて,最初はスキップしてもよいことを示した。 本書を,半期(約12時間)の現代制御のテキストとして使う場合は,1~5章と8章をじっくり勉強する基礎重視のコースと,1~7章で1次系と2次系に関する議論をおもにフォローし,高次系についての結果を受け入れていく応用重視のコースの2通りが考えられる。後者においては,実際の制御系設計で必要となる数値計算の指針を演習問題の形で示したので参考にしていただきたい。 おわりに,編集委員の先生方には,著者の拙い原稿に何度も目を通していただき,数多くの貴重なコメントをいただいた。このご支援に対し,心より感謝の意を表したい。それにもかかわらず,著者の力不足のため,現代制御のテキストとして至らないところがあることを恐れている。読者の率直なご意見を,{\tt kajiwara@nams.kyushu-u.ac.jp}まで,お寄せいただければ幸いである。 2000年3月 |
8 最小実現問題
【本章のねらい】 ・伝達関数行列に対応する状態空間表現(実現)を求める。 ・実現の可制御可観測な部分系を取り出して,与えられた伝達関数行列に対応する最小実現を求める。 |
8.1 実現問題
状態空間表現
から伝達関数行列表現 を求める計算を,つぎのドイルの記法を用いて表す。 ここでは,逆に伝達関数行列表現(8.2)から状態空間表現(8.1)を求める問題、 を満足する行列 また,1入力1出力系の場合は, 以下では,まず1入力1出力系の場合を考える。1次系について,次式が成り立つ。 2次系について,次式が成り立つ。 ここで,(8.8)式の2つの実現は, について,(8.5)式の関係にある。また,(8.9)式は(8.8)式を(8.6)式の意味で転置したものである。 一般に,1入力1出力
|
*分子多項式の次数が分母多項式の次数を超えない場合をいう。
**『線形システム制御入門』の8.1節のファディーブの公式を用いて証明できる。
例題8.1 むだ時間要素![]() ![]() このとき,対応する状態空間表現の一つを求めよ。 解答 |
演習8.1 むだ時間伝達関数のつぎの近似式に対応する状態空間表現の一つを求めよ。
|
以上の1入力1出力系の実現を利用して,多入力出力系の場合の実現の一つを求める方法を考える。
の各要素の実現を とするとき, で与えられる。ここで は,サイズ は,サイズ は,サイズ は,サイズ ちなみに, の可制御な実現の一つは
また,可観測な実現の一つは
で与えられる。 |
例題8.2 つぎの1入力2出力伝達関数行列の実現を一つ求めよ。
解答 だから となる。 |
演習8.2 つぎの2入力1出力伝達関数行列の実現を一つ求めよ。
|
8.2 最小実現
前節で求めた伝達関数行列の実現は,最小次元数をもつとは限らない。ここでは,最小次元数をもつ実現,すなわち最小実現を求める方法を考える。
一般に,不可制御かつ不可観測な状態空間表現(8.1)は適当な座標変換により,つぎの正準構造をもつように変換できることが知られている。 ここで,正方行列
さて,(8.23)を表す伝達関数行列を これが最小実現であることが知られている。すなわち,最小実現は,可制御かつ可観測な部分系であり,入力から出力までの伝達特性を表している。 最小実現の計算は,まず,正準構造の可制御な部分系 を求め,この可観測な部分系として求めるか,または,正準構造の可観測な部分系 を求め,この可制御な部分系として求めればよい。したがって,可制御な部分系または可観測な部分系の計算が基礎となる。 一般に,つぎのように変換する直交行列 ここで, そのような直交行列 |
/*staircase.m*/ function [T,m]=staircase(A,B,tol) [n,r]=size(B); j=0; s=0; T=eye(n); B1=B; A1=A; while j ![]() j=j+1; [U1,S1,V1]=svd(B1); m(j)=rank(B1,tol); if (m(j)==n-s)|(m(j)==0),k=j; break, end W=[eye(s) zeros(s,n-s); zeros(n-s,s) U1 ]; T=T*W; A1=W’*A1*W; s=s+m(j); B1=A1(s+1:n,s-m(j)+1:s); end |
ここで,tol は,7行で有効階数 m(j) を決めるために適切に選ばれる零判定基準である。
同様に,つぎのように変換する直交行列 ここで, そのような直交行列を求める階段化アルゴリズムを実行するMファイルの作成例をつぎに示す。 |
%staircase2.m function [T,p]=staircase2(A,C,tol) [T,p]=staircase(A’,C’,tol) |
例題8.3 例題8.2で得た実現の可制御かつ可観測な部分系を求め,最小実現を得よ。
解答 Mファイル |
%min_realization.m A=[-1 0 0;0 -3 -2; 0 1 0]; B=[1;1;0]; C=[1 0 0;0 1 1]; D=[0;0]; [T,m]=staircase(A,B,0.01); AA=T’*A*T; BB=T’*B; CC=C*T; n=sum(m); sys=ss(AA(1:n,1:n),BB(1:n:),CC(:1:n),D); tf(sys) |
を実行して,
を得る。このとき となる。この可制御部分を取り出すと となり,しかもこれは可観測であるので最小実現である。 |
演習8.3 演習8.2で得た実現の可制御かつ可観測な部分系を求め,最小実現を得よ。 |
演習問題の解答
【演習8.1】![]() から,実現の一つは である。 |
【演習8.2】![]() ![]() だから を得る。 |
【演習8.3】Mファイル |
%min_realization2.m A=[-3 -2 0;1 0 0; 0 0 -2]; B=[1 0;0 0;0 1]; C=[1 2 1]; D=[0 0]; [T,m]=staircase(A,B,0.01); AA=T’*A*T; BB=T’*B; CC=C*T; n=sum(m); sys=ss(AA(1:n,1:n),BB(1:n:),CC(:1:n),D); tf(sys) |
を実行して,
を得る。このとき となる。この可観測部分を取り出すと となり,しかもこれは可制御であるので最小実現である。 |
7 非線形システムの線形化
【本章のねらい】 ・ 振子を例に,MAXIMA ![]() ・ 振子の線形状態方程式を用いて,積分動作を加えた状態フィードバックのLQI設計を行い,これを非線形状態方程式に適用して,安定化シミュレーションを行う。 |
* http://ja.wikipedia.org/wiki/Maximaを参照。
7.1 非線形システムのモデリングの例
次の例題を考える。
例題7.1 図7.1の振子を考える。MAXIMAを用いて,非線形運動方程式を計算し,これから非線形状態方程式を求めよ。さらに,平衡状態のまわりで線形化して,線形状態方程式を求めよ。
解答 運動エネルギー に代入する。この計算をMAXIMAを用いて行うためには,コマンド |
/*pen*/ dth:’diff(th(t),t); ddth:’diff(th(t),t,2); x:ell*sin(th(t)); y:ell*cos(th(t)); J:(1/3)*m*ell^2; T:(1/2)*m*(diff(x,t)^2+diff(y,t)^2)+(1/2)*J*dth^2; V:m*g*ell*cos(th(t)); L:T-V; LE:diff(diff(L,dth),t)-diff(L,th(t))=0,trigreduce; sol:solve(LE,ddth); f:matrix([dth],[rhs(sol[1])]); |
を与えればよい![]() これより,非線形状態方程式 が求められる。平衡状態は
のように求められる。この平衡状態 を得る。この計算をMAXIMAを用いて行うためには,コマンド |
A:matrix([diff(f[1,1],th(t)),diff(f[1,1],dth)], [diff(f[2,1],th(t)),diff(f[2,1],dth)]); |
を与えればよい。すなわち,線形状態方程式は,次式のように求められる。
この線形状態方程式は,平衡状態近傍では, と近似できるので,これを非線形運動方程式に代入し を得て,これから直接求めることもできる。 |
演習7.1 例題7.1において,![]() ![]() (1) ![]() (2) ![]() |
例題7.2 図7.2の台車によって駆動される振子を考える。MAXIMAを用いて,非線形運動方程式を計算し,これから非線形状態方程式を求めよ。さらに,平衡状態のまわりで線形化して,線形状態方程式を求めよ。
解答 台車の運動エネルギーは に代入する。この計算をMAXIMAを用いて行うためには,コマンド |
/*pend*/ dr:’diff(r(t),t); ddr:’diff(r(t),t,2); dth:’diff(th(t),t); ddth:’diff(th(t),t,2); T0:(1/2)*M*diff(r(t),t)^2; x1:r(t)+ell*sin(th(t)); y1:ell*cos(th(t)); J1:(1/3)*m*ell^2; T1:(1/2)*m*(diff(x1,t)^2+diff(y1,t)^2)+(1/2)*J1*dth^2; V1:m*g*y1; L:T0+T1-V1; LE1:diff(diff(L,dr),t)-diff(L,r(t))=F,trigreduce,ratsimp; LE2:diff(diff(L,dth),t)-diff(L,th(t))=0,trigreduce,ratsimp; sol:solve([LE1,LE2],[ddr,ddth]); |
を与えればよい。この結果から,非線形運動方程式
が得られる。これより,非線形状態方程式 が求められる。平衡状態は,
のように求められる。この平衡状態近傍で,
を得る。この計算をMAXIMAを用いて行うためには,コマンド |
f:matrix([dr],[dth],[rhs(sol[1][1])],[rhs(sol[1][2])]); a31:diff(f[3,1],r(t)); a32:diff(f[3,1],th(t)); a33:diff(f[3,1],dr); a34:diff(f[3,1],dth); a41:diff(f[4,1],r(t)); a42:diff(f[4,1],th(t)); a43:diff(f[4,1],dr); a44:diff(f[4,1],dth); b3:diff(f[3,1],F); b4:diff(f[4,1],F); A:matrix([0,0,1,0],[0,0,0,1],[a31,a32,a33,a34], [a41,a42,a43,a44]); B:matrix([0],[0],[b3],[b4]); A1:A,th(t)=0,F=0,trigreduce,ratsimp; B1:B,th(t)=0,F=0,trigreduce,ratsimp; A2:A,th(t)=%pi,F=0,trigreduce,ratsimp; B2:B,th(t)=%pi,F=0,trigreduce,ratsimp; |
を与えればよい。この結果から,![]() となる。また,
|
演習7.2 例題7.2の振子を軸支した台車を,図7.3のように傾斜角![]()
|
例題7.3 例題7.2の台車によって駆動される振子について,そこで求めた状態方程式に基づいて,MAXIMAを用いて,漸近安定性と可制御性について調べよ。
解答 まず,安定性を調べるために, |
lambda:eigenvalues(A1); |
その結果,![]() ![]() ![]() ![]() つぎに,可制御性を, |
rank(addcol(A1-lambda[1][1]*ident(4),B1)); rank(addcol(A1-lambda[1][2]*ident(4),B1)); rank(addcol(A1-lambda[2][1]*ident(4),B1)); rank(addcol(A1-lambda[2][2]*ident(4),B1)); |
% For[i = 1, i ![]() % W=MapThread[Append,{A-lambda[[i]] IdentityMatrix[4],B}]; % Print[MatrixRank[W]]; i++] のコマンドを与えればよい。その結果,階数はすべて4と計算され,可制御性が成り立つ。 ![]() |
演習7.3 例題7.3を,![]() |
7.2 非線形系に対する線形制御の適用
つぎの例題を考える。
例題7.4 例題7.2の台車によって駆動される倒立振子について,台車の位置![]() ![]() ![]() ![]() 解答 まず,出力方程式として を得る。また,台車の位置 のように表される。このとき,正方行列 は正則である。したがって,次式が定まる。 つぎに,偏差系 に対する評価関数を,たとえば のように設定する。ここで, 制御目的を達成する積分動作を加えた状態フィードバック
は,上の評価関数を最小にするように,状態フィードバック を求め,次式から 以上の計算を,MATLABで行うためには |
%pend.m global M m ell g th0 M=1; m=0.1; ell=0.25; g=9.8; th0=3/180*pi; E=[M+m m*ell;m*ell (4/3)*m*ell^2]; A21=-E\[0 0;0 -m*ell*g]; A=[zeros(2) eye(2);A21 zeros(2)] B2=E\[1;0]; B=[zeros(2,1);B2] CM=[1 0 0 0;0 1 0 0]; CS=[1 0]; C=CS*CM; AE=[A B;zeros(1,5)]; BE=[zeros(4,1); 1]; CE=eye(5); Tcart=0.1; Kr=0.5; Tpend=(1/4)*(2*pi*sqrt(4/3*ell/g)); Kth=5/180*pi; Tamp=0.1; Kamp=5; q1=1/Kr; q2=1/Kth; q3=Tcart/Kr; q4=Tpend/Kth; q5=1/Kamp; QE=diag([q1 q2 q3 q4 q5].^2); RE=(Tamp/Kamp)^2; [FE,pAE]=opt(AE,BE,CE,QE,RE) FE=FE/[A B;C 0]; F=FE(:,1:4); FI=FE(:,5); ACL=[A-B*F -B*FI;C 0]; BCL=[zeros(4,1);-0.5]; CCL=[CM zeros(2,1);-F -FI]; DCL=[zeros(2,1);0]; sys=ss(ACL,BCL,CCL,DCL); step(sys) |
を与えればよい。 |
もちろん,これらは重み係数の初期値であり,実際には調整を伴うことはいうまでもない。
演習7.4 演習7.3のように,振子を軸支した台車を傾斜角![]() |
例題7.5 例題7.4で設計した積分動作を加えた状態フィードバックを,非線形ダイナミクスを表す非線形状態方程式と結合して,閉ループ系の時間応答をシミュレーションせよ。
解答 まず,非線形状態方程式を,つぎのS-functionで記述する。 |
%spend.m function [sys,x0]=spend(t,state,input,flag) global M m ell g th0 if abs(flag)==1 u =input(1); r =state(1); th =state(2); dr =state(3); dth=state(4); Mp=[M+m m*ell*cos(th); m*ell*cos(th) (4/3)*m*ell^2]; Cp=[0 -m*ell*dth*sin(th);0 0]; Gp=[0; -m*ell*g*sin(th)]; sys=[dr;dth;Mp\(-Cp*[dr;dth]-Gp+[u;0])]; elseif flag==3, sys=state(1:2); elseif flag==0 sys=[4;0;2;1;0;0]; x0=[0;th0;0;0]; else sys=[]; end |
つぎに,Simulink上に
のように,このS-functionブロックと例題??で設計した積分動作を加えた状態フィードバックを接続して,シミュレーションを行う。 |
演習7.5 演習7.4で設計した積分動作を加えた状態フィードバックを,非線形ダイナミクスを表す非線形状態方程式と結合して,閉ループ系の時間応答をシミュレーションせよ。 |
演習問題の解答
【演習7.1】Simulinkを用いて,次図のブロック線図を作成する。
上半分が非線形運動方程式 |
【演習7.2】非線形運動方程式を求める計算をMAXIMAを用いて行うためには |
/*pend2*/ dr:’diff(r(t),t); ddr:’diff(r(t),t,2); dth:’diff(th(t),t); ddth:’diff(th(t),t,2); x0:r(t)*cos(alpha); y0:r(t)*sin(alpha); T0:(1/2)*M*(diff(x0,t)^2+diff(y0,t)^2); V0:M*g*y0; x1:x0+ell*sin(th(t)); y1:y0+ell*cos(th(t)); J1:(1/3)*m*ell^2; T1:(1/2)*m*(diff(x1,t)^2+diff(y1,t)^2)+(1/2)*J1*dth^2; V1:m*g*y1; L:T0+T1-V0-V1; LE1:diff(diff(L,dr),t)-diff(L,r(t))=F,trigreduce,ratsimp; LE2:diff(diff(L,dth),t)-diff(L,th(t))=0,trigreduce,ratsimp; sol:solve([LE1,LE2],[ddr,ddth]); |
のコマンドを与えればよい。この結果から,非線形運動方程式![]() ![]() が得られる。これより,平衡状態は ![]() ![]() ![]() ![]() のように求まる。 ![]() ![]() ![]() |
【演習7.3】 |
%pend.m M=1; m=0.1; ell=0.25; g=9.8; E=[M+m m*ell;m*ell (4/3)*m*ell^2]; A21=-E\[0 0;0 -m*ell*g]; A=[zeros(2) eye(2);A21 zeros] B2=E\[1;0]; B=[zeros(2,1);B2] r=eig(A) tol=1e-6; for i=1:4, k=rank([B A-r(i)*eye(4)],tol), end |
【演習7.4】次を実行し,あとは例題7.4と同様に行えばよい。 |
%pend2.m M=1; m=0.1; ell=0.25; g=9.8; alpha=5/180*pi; a32=-(3*m*g*cos(alpha))/(7*M+(11-3*cos(2*alpha))/2*m); a42=(3*(M+m)*g)/(7*M+(11-3*cos(2*alpha))/2*m)/ell; b3=7/(7*M+(11-3*cos(2*alpha))/2*m); b4=-3/(7*M+(11-3*cos(2*alpha))/2*m)/ell; A21=[0 a32;0 a42]; A=[zeros(2) eye(2);A21 zeros(2)] B2=[b3;b4]; B=[zeros(2,1);B2] |
【演習7.5】まず,非線形ダイナミクスを,つぎのS-functionで記述する。 |
%spend2.m function [sys,x0]=spend2(t,state,input,flag) M=1; m=0.1; ell=0.25; g=9.8; th0=0; alpha=5/180*pi; if abs(flag)==1 u=input(1); r=state(1); th=state(2); dr=state(3); dth=state(4); Mp=[M+m m*ell*cos(th+alpha); m*ell*cos(th+alpha) (7/3)*m*ell^2]; Cp=[0 -m*ell*dth*sin(th+alpha);0 0]; Gp=[0; -m*ell*g*sin(th)]; sys=[dr;dth;Mp ![]() elseif flag==3 sys=state(1:2); elseif flag==0 sys=[4;0;2;1;0;0]; x0=[0;th0;0;0]; else sys=[]; end |
Simulink上に,このS-functionブロックと,演習7.4で設計した積分動作を加えた状態フィードバックを記述して,シミュレーションを行う。詳細は割愛する。 |
6. 定値外乱を抑制する
これまで,安定性の定義,安定化の可能性とその方策を学んできた。その結果,私たちは,閉ループ系の零入力応答を適切に安定化する,すなわち,ある初期状態から出発して速やかに零状態(平衡状態)にもっていくことはできる。この零入力応答は,適当な強さのインパルス入力に対する零状態応答に等しいことを思い出してほしい。
例えば,一定速度で回転しているモータを考え,これに瞬間的な負荷がかかって,その速度が乱されたとする。このときは,状態フィードバックによってもとの速度に復帰させることができる。しかし,モータで何か対象物を回転させるときは,モータ軸への持続的な負荷が生じ,極端な場合はモータは回転することさえできないであろう。同様に,飛行機,船舶,車などのビークルに強い向い風が吹けば定速を維持することは困難となるであろう。 また,モータやビークルでは,速度の設定値を変えることが制御の大切な役割なのに,そのための手段はまったく学んでいない。 したがって,これまでの知識だけでは多くの現実問題を解くことはできない。実際の問題では,必ずといっていいほど,さまざまな「定値外乱」の影響を受ける状況のもとで,「設定値」の保持や,ときには変更を要求されるからである。このような問題を解決するためには,これまでの制御方式に加えて,まず「積分動作」の導入による構造的な改良が必要となる。本章では,定値外乱の影響の除去や,設定値の変更に対応できるように,積分動作を入れて安定化を行う方策について学ぶ。その安定化にLQ制御を適用するとき,その制御方式を簡潔に表すために「LQI制御」と呼ぶ。 |
6.1 1次系における定値外乱の影響を抑制する
6.1.1 定値外乱の影響
1章で述べた直流モータの状態方程式(1.11)すなわち
を思い出そう。これは,二つの入力変数 以下では,この状況を一般化した次式で表される1次系を考える。 ここで,
いま,1次系(2)に対して,状態フィードバック を行うと,閉ループ系 を得る。ここで, となる。第2項は と計算できるので, すなわち,定値外乱が加わると とはならない。このことをシミュレーション例で確認しよう。 シミュレーション 6.1
このような定値外乱の影響を取り除くために,式(3)の代わりに のような方策を用いる。このときの閉ループ系 の時間応答は となる。これより,外乱を打ち消すように と選べば,式(8)を達成できる。しかしながら, |
図6.2の下に次の問を設定していましたが,紙幅の関係で省略しました。
図6.2で,であることを確かめなさい。
6.1.2 積分動作を加える
この方法の基礎となるアイデアは
を達成できれば そこで,式(13)を満足する を達成することができないか検討しよう。 まず,式(2)と,式(13)の を合わせて を構成する。式(16)に を代入すると,閉ループ系は となる。そのブロック線図を図6.3に示す。
さて, となる。ここで, と計算できるから と表される。したがって を得る。ここで となり,外乱の影響が抑制されていることと,式(14)が成り立つことが確認できる。また,式(17)からつぎが成り立つ。 シミュレーション6.2
|
図6.4の下に次の問を設定していましたが,紙幅の関係で省略しました。
図6.4で,,
であることを確かめなさい。
また,(19),(20),(21)においであることに注意してください。
6.1.3 設定値を変更する
前節では,定値外乱の加わる1次系
に対して,制御目的 を達成する方法を学んだ。ここでは,任意の定数 を達成する問題を考える。この
この問題の解決のためには,外乱を抑制するための図6.4を,図6.5に示すように変更すればよい。実際,式(27)を のような積分動作を導入すればよいことに気づくであろう。 式(25)と式(26)を合わせて を構成する。いま,式(29)に を代入すると となる。 を得る。この第1行は, を得る。ここで,設定値 また,つぎが成り立つ。 それでは,フィードフォワード項による速応性改善の効果をシミュレーションによって確かめよう。 シミュレーション6.3
問6.1 |
6.2 積分型コントローラ
6.2.1 積分動作を加えた状態フィードバック
次式で表される可制御かつ可観測で,![]() ![]() ![]() ここで,状態方程式には,操作入力 のように選び( を達成したい。ここで,定数ベクトル の関係を満足しているはずである。したがって,どのような が成り立つように選ぶものとする。
さて,制御目的(39)を達成するために,図6.8に示すような,つぎの積分動作を加えた状態フィードバックを考える。 ここで,第2項は積分動作を表している。このように を得る。式(36)と式(43)を合わせて を得る。式(44)に,式(42)すなわち を代入すると,閉ループ系は,つぎのように表される。 いま, よって, を用いて ここで, のように計算される。ところで,式(46)から を得る。この第1ブロック行は,式(40)より となって,式(40)の第2ブロック行から制御目的(39)が成り立つ。また,式(50)の第2ブロック行から を得る。ここで,設定値 のように表され,ここで, |
6.2.2 積分動作を加えたオブザーバベース\,コントローラ
式(42)の代わりに,実際には,状態オブザーバ
の出力を用いて を実施することになる。ここでの積分動作を加えたオブザーバベース\,コントローラは,式(56)を式(55)に代入した と,式(43)を合わせて,つぎのように表される。 これによる閉ループ系は,式(56)を式(36)に代入した と,式(43),(57)を合わせて のように表される。そのブロック線図を図6.9に示す。
いま,閉ループ系(61)に,座標変換 を行えば となり,閉ループ系の固有値は,積分動作を加えた状態フィードバックだけの閉ループ系の固有値と状態オブザーバの固有値からなる。 ここで, すなわち を得る。したがって,定値外乱が存在するときは状態オブザーバに関して定常偏差が残るにもかかわらず,制御目的(39)が成り立つことがわかる。また,フィードフォーワードゲイン |
6.3 LQI設計
これまで,閉ループ系(18),(31),(46),(63)において,![]() 制御目的(39)が達成されたとき成り立つ式(40)より を得る( 偏差系E1: この両辺を微分すれば,状態変数の中の定数ベクトルを除くことができて 偏差系E2: を得る。さらに,式(36)と(38)をまとめた から式(40)を引いて,つぎの関係式が成り立つ。 これに基づいて,偏差系E2に座標変換を行えば 偏差系E3: を得る。ここで,つぎの関係式を用いた。 問6.2 問6.3 例えば,偏差系E1に対して,状態フィードバック を用いて,閉ループ系を安定化すれば, 以下に,偏差系E3をLQ制御により安定化して,積分動作を加えたオブザーバベース\,コントローラを構成する手順を示す。 アルゴリズム6.1 <LQI設計> 入力パラメータ1 出力パラメータ ステップ1 被制御変数の決定
ステップ2 偏差系の安定化 偏差系 を,状態フィードバック によるLQ制御で安定化する。その際,評価関数としては を用いる。ただし, さらに, ステップ3 オブザーバゲイン 例えば,アルゴリズム5.2のステップ2を用いる。 を解いて, ステップ4 LQIコントローラの構成
ただし この積分動作を加えたオブザーバベース\,コントローラを簡潔にLQIコントローラ}(LQI controller),これによる制御方式をLQI制御(LQ control with integral action)と呼ぶ。 問6.4 |
【本章のねらい】 ・1次系,2次系の状態フィードバックの最適設計を,リッカチ方程式を解いて行う。 ・ リッカチ方程式を解くMファイルを理解し,これを用いて高次系の状態フィードバックの最適設計を行なう。 ・ オブザーバベースト・コントローラの最適設計を,リッカチ方程式CAREを解いて状態フィードバックを,またリッカチ方程式FAREを解いてオブザーバゲインを求めて行う。 |
5.1 状態フィードバックの最適設計
可制御な![]() ![]() ![]() ![]() を安定化する状態フィードバック の決定法を改めて考える。一つの方法は,閉ループ系 の時間応答に関する評価規範として,2次形式評価関数 を設定し,これを最小化する問題を解くことである。ただし, の解 |
まず,1次系の場合を考える。
例題5.1 時定数 に対して,評価関数 を最小にするように,状態フィードバック の解
|
演習5.1 例題5.1において,,
とする。このとき,つぎの重み係数をもつ評価関数を最小にする
を決定せよ。
(1) ,
(2) ,
(3)
また,のとき,閉ループ系の時間応答をMATLABでシミュレーションせよ。
つぎに,2次系の場合を考える。
例題5.2 2次系 を安定化する状態フィードバック を最小にするように求めよ。 を要素ごとに整理して を得る。これは,まず第1式より ここで,(1)だけが, |
演習5.2 つぎの2次系について,例題5.2と同じ問題設定で解け。
例題5.3 2次系
を安定化する状態フィードバック を最小にするように求めると となることを示せ。 を要素ごとに整理して を得る。まず,第1式より と求まる。つぎに,第3式より となるが, でなければならない。さらに,第2式より となるが,
でなければならない。このとき |
演習5.3 2次系
について,例題5.3と同じ問題設定で解くと
のように与えられることを示せ。
ちなみに,例題5.3において,評価関数
を最小にするように求めると となる。演習5.3においては となる。これらから重み係数 |
さて,リッカチ方程式を計算機を用いて解くときは,ハミルトン行列![]() のように求めて,状態フィードバックゲインを によって得る。 |
例題5.4 リッカチ方程式![]() ![]() ![]() [F,p]=opt(A,B,C,Q,R) を準備し,例題5.2を解け。 %opt.m ここで,4行目でハミルトン行列の固有値問題を解き,安定固有値の添字を5行目の index に得て,リッカチ方程式の解 X を得ている。 例題5.2を解くには,MATLABにつぎのコマンドを与えればよい。 %lqr.m また, p が閉ループ系の固有値 eig(A-B*F) としてみれば確認できる。 |
演習5.4 演習5.2を,例題5.4にならって,MATLABで解け。
演習5.5 3次系
を安定化する状態フィードバックを,つぎの評価関数を最小にするように求めよ。
演習5.6 4次系
を安定化する状態フィードバックを,つぎの評価関数を最小にするように求めよ。
5.2 オブザーバベースト・コントローラの最適設計
オブザーバベースト・コントローラによる閉ループ系の時間応答に関する評価するために,つぎのブロック線図を考える。
ここで,新しい入力 この に対して,オブザーバベースト・コントローラ による閉ループ系は,次式で表される。 このインパルス応答行列 に関する評価規範として を設定し,これを最小化する問題を解くことができる( Step 1 行列方程式 の解 Step 2 行列方程式 の解 |
例題5.5 1次系![]()
において |
演習5.7 1次系に対するオブザーバベースト・コントローラを,
例題5.5のCAREにおいて,
,FAREにおいて
,
と選んで構成せよ。
例題5.6 LQG制御則を設計するためのMファイルを作成せよ。
[AK,BK,CK,pK,pcare,pfare] = optobc(A,B,C,CC,Q,R,BB,W,V) 解答 例題5.4で作成したMファイル opt.m を用いる。 %optobc.m |
演習5.8 演習5.7を,例題5.6で作成したMファイル optobc.m を用いて解け。
演習問題の解答
【演習5.1】
(1) ,
(2) ,
(3) 。
MATLABによるシミュレーションはつぎのように行えばよい。
%lqr1.m
T=1; K=1; a=-1/T; b=K/T; c=1; t=0:0.1:5; x0=1;
s0=ss(a,b,c,0); y0=initial(s0,x0,t);
f1=-1+sqrt(2); s1=ss(a-b*f1,b,c,0); y1=initial(s1,x0,t); u1=-f1*y1;
f2=-1+sqrt(3); s2=ss(a-b*f2,b,c,0); y2=initial(s2,x0,t); u2=-f2*y2;
f3=-1+sqrt(11); s3=ss(a-b*f3,b,c,0); y3=initial(s3,x0,t); u3=-f3*y3;
figure(1),subplot(121),plot(t,y0,t,y1,t,y2,t,y3),grid,title(‘y’)
figure(1),subplot(122),plot(t,u1,t,u2,t,u3),grid,title(‘u’)
【演習5.2】
(1)リッカチ方程式
を要素ごとに整理して
を得る。を満たす解は,
。
したがって
%[f,p]=opt([0 1;0 -1],[0;1],[1 0],1,1)
(2)リッカチ方程式
を要素ごとに整理して
を得る。を満たす解は,
。したがって
%[f,p]=opt([0 1;-1 0],[0;1],[1 0],1,1)
【演習5.3】
リッカチ方程式
を要素ごとに整理して
を得る。を満たすものを選ぶと
を得る。これらを用いて,と
の表現式が,例題??と同様にして得られる。
【演習5.4】
%lqr2.m
A=[0 1;0 -1]; B=[0;1]; C=[1 0]; Q=1; R=1;
[F,p]=opt(A,B,C,Q,R);
sys=ss(A-B*F,B,eye(2,2),0); x0=[1;0];
t=0:0.1:10; x=initial(sys,x0,t)’; y=C*x; u=-F*x;
figure(2),subplot(121),plot(t,y),grid,title(‘y’)
figure(2),subplot(122),plot(t,u),grid,title(‘u’)
(2)の場合,A=[0 1;-1 0] と書き換える。
【演習5.5】
%lqr3.m
A=[0 1 0;0 0 0;0 0 -1]; B=[0 0;1 -1;0 1]; C=[1 0 0;0 0 1];
[F,p]=opt(A,B,C,1,1)
【演習5.6】
%lqr4.m
A=[0 0 1 0;0 0 0 1;-1 1 0 0;1 -1 0 0]; B=[0;0;1;0]; C=[0 1 0 0];
[F,p]=opt(A,B,C,1,1)
【演習5.7】
CARE:に,
,
,
,
を代入して,
。
より
。
したがって,状態フィードバックゲインは,。
FARE:に,
,
,
,
を代入して,
。
より,
。
したがって,オブザーバゲインは,。
以上から,オブザーバベースト・コントローラが,つぎのように得られる。
【演習5.8】
%lqr5.m
[A
4 状態オブザーバと可観測性
【本章のねらい】 ・ 状態オブザーバを構成する。 ・ 可観測性と可検出性を判定する。 |
4.1 状態オブザーバ
いま制御対象は平衡状態にあるとし,何らかの要因でこれが乱されたとき,速やかに元の平衡状態に戻す手段として,![]() ![]() ![]() ![]() に対する状態フィードバック を考えた。しかしながら,現実には状態変数をすべて計測できる場合は少ない。したがって,状態フィードバックは実際には実施できるとは限らない。そこで,状態オブザーバとよばれる が考案されている。ここで,サイズ 実際,(4.3)から(4.1)の第1式を辺々引き算すると ここで,行列 となって, 一つのアプローチは,つぎの仮想的な を安定化する状態フィードバック を求めることである。実際,閉ループ系は となって,行列 したがって,前章の状態フィードバックの設計法をそのまま援用できるが,実際には次章のLQG制御問題として解く場合が多い。 例題4.1 2次系 に対する状態オブザーバ 行列 これらから,オブザーバゲイン したがって,求める状態オブザーバ 演習4.1 2次系 に対する状態オブザーバ 例題4.2 例題4.1において, %obs_err.m 演習4.2 演習4.1において, さて, のように実施するとき,オブザーバベースト・コントローラは となる。このとき,閉ループ系はつぎのように表される( このように閉ループ系の 例題4.3 1次系 に対する状態フィードバック と,状態オブザーバ を考える。このときオブザーバベースト・コントローラ による閉ループ系の すなわち で表される。この行列 より, 演習4.2 例題4.3において, |
4.2 可観測性と可検出性
どのような![]() 【可検出性の定義とその等価な条件】 定義D0: 状態オブザーバを構成可能 これらの条件の一つが成り立つとき 【可観測性の定義とその等価な条件】 定義O0: 任意有限時間の入力と出力から,初期状態を一意に決定可能 これらの条件の一つが成り立つとき 例題4.4 つぎの
(2) 可観測性行列は, (3) 可観測性行列は, 演習4.4 例題4.4における可観測性の判定を, |
4.3 状態オブザーバの低次元化
これまで,状態オブザーバの出力![]() ![]() ![]() ![]() が考案されている。ここで,サイズ を満足させることができれば が成り立ち,これから したがって を得る(テキスト「線形システム制御入門」の 4.3節参照)。特に, 例題4.5 1入力 に対して, ここで, と選べば,次式が成り立つ。 演習4.5 例題4.1の2次系に対する恒等関数オブザーバを,その固有値が 例題4.6 例題4.5の1入力 を推定する線形関数オブザーバの一つは,つぎに ただし, と選べば,次式が成り立つ。 演習4.6 例題4.1の2次系に対して,状態フィードバック |
演習問題の解答
【演習4.1】 行列![]() 行列
したがって,求める状態オブザーバ 【演習4.2】 %obs_err2.m 【演習4.3】 %observer_based_controller.m 【演習4.4】 したがって,この2次系は可観測である。 (2) したがって,この2次系は可観測ではない。 (3) したがって,この2次系は可観測ではない。 【演習4.5】 ただし, %obs_err3.m 【演習4.6】 ただし, %obs_err4.m |
3 状態フィードバックと可制御性
【本章のねらい】 ・ 状態フィードバックを設計する。 ・ 可制御性と可安定性を判定する。 |
3.1 状態フィードバック
いま制御対象は平衡状態にあるとし,何らかの要因でこれが乱されたとき,適当な手段を用いて,速やかに元の平衡状態に戻したい。そのような手段の一つとして,![]() ![]() ![]() ![]() に対する状態フィードバック を考える。このとき,(3.2)式を(3.1)式に代入して,閉ループ系 を得る。このブロック線図を次に示す。 上の制御目的が達成されるためには,閉ループ系の (3.4)「任意の が成り立ち,これは平衡状態 まず,1次系の状態フィードバックの例を考える。 例題3.1 時定数 に対して,新しい入力 を行うと閉ループ系の時定数は となる。これは時定数 演習3.1 1次系 演習3.2 例題2.5で得た図上( つぎに,2次系の状態フィードバックの例を考える。 例題3.2 減衰係数 に対して,新しい入力 を行うと,閉ループ系の減衰係数は これは減衰係数 演習3.3 例題2.6で得た図上( さて, また,行列 このとき,閉ループ系の または で与えられる(テキスト「線形システム制御入門」の3.3節参照)。(3.8})式と(3.9})式を比較すると,前者は 例題3.3 2次系 に対する状態フィードバック (1) 行列 したがって,ゲイン行列 (2) 行列 したがって,ゲイン行列 演習3.4 つぎの2次系に対する状態フィードバック (2) 最後に多入力をもつ ここで とおくと これから, ただし, 例題3.4 2入力2次系 に対するつぎの状態フィードバックによる閉ループ系おける行列 (1) (2) この特性多項式は したがって,行列 (2) 閉ループ系の この特性多項式は したがって,行列 演習3.5 例題3.4の2つの状態フィードバックは,公式(3.13})において (1) (2) と指定して得られることを,MATLABを用いて確かめよ。 |
3.2 可制御性と可安定性
どのような![]() 【可安定性の定義とその等価な条件】 これらの条件の一つが成り立つとき 【可制御性の定義とその等価な条件】 これらの条件の一つが成り立つとき 例題3.5 つぎの (1) (2) (3) 解答 (2) 可制御性行列は, (3) 可制御性行列は, 演習3.6 つぎの (1) (2) MATLABを用いて可制御性を判定するには,たとえば例題3.5(3)の %controllability_check.m ここで,4行目の結果がすべて真であれば,可制御である。 演習3.7 上のコマンドを用いて演習3.6の 例題3.6 例題3.5の したがって,この2次系は可安定である。 (2) したがって,この2次系は可安定ではない。 (3) したがって,この2次系は可安定である。 演習3.8 演習3.6の MATLABを用いて可安定性を判定するには,たとえば例題3.5(3)の %stabilizability_check.m 演習3.9 上のコマンドを用いて演習3.6の |
演習問題の解答
演習3.1 ![]() ![]() ![]() ![]() 演習3.2 たとえば,つぎのMファイルを実行すればよい。 %sf1.m 演習3.3 たとえば,つぎのMファイルを実行すればよい。 %sf2.m 演習3.4 行列 (1) したがって,ゲイン行列 (2) したがって,ゲイン行列 演習3.5 たとえば,つぎのMファイルを実行すればよい。 %sf_minputs.m 演習3.6 (1) 可制御性行列は, (2) 可制御性行列は, 演習3.7 Mファイル{\tt controllability\_check.m}のデータ{\tt A,B}の定義を次のように書き換える。 (1) A=[0 1 0;0 -1 1;0 0 -1]; B=[0;1;0]; 演習3.8 したがって,この3次系は可安定である。 (2) したがって,この3次系は可安定である。 演習3.9 Mファイル{\tt stabilizability\_check.m}のデータ{\tt A,B}の定義を,次のように書き換える。 (1) A=[0 1 0;0 -1 1;0 0 -1]; B=[0;1;0]; |
2 漸近安定性
【本章のねらい】 ・ 状態空間表現を用いて漸近安定性の判定を行う。 ・ 状態空間表現を用いて時間応答の計算を行う。 |
2.1 漸近安定性
いま制御対象は平衡状態(物理的な釣り合いの状態)にあるとし,何らかの要因でこれが乱されたとき,その振舞いはつぎの![]() ![]() ![]() ![]() このとき,もし元の平衡状態に戻るならば,その平衡状態は漸近安定,または の時間応答 となれば,漸近安定である。もし ならば,漸近安定ではない,すなわち不安定である。 例題2.1 1次自由系 演習2.1 つぎの1次系が漸近安定となる定数 ● で与えられる(テキスト「線形システム制御入門」の 定理2.2参照)。ここで, で定義される。たとえば
のように計算される(テキスト「線形システム制御入門」の 定理2.4参照)。これらを用いて,次の例題を考える。 例題2.2 つぎの2次自由系の時間応答を求め,漸近安定性を判定せよ。 解答 これより,つぎが成り立つ。 したがって,漸近安定である。 (2) 式(??)を用いて,時間応答は次式となる。 これより,つぎが成り立つ。 たとえば したがって,漸近安定でない。 (3) 式(??)を用いて,時間応答は次式となる。 これより,つぎが成り立つ。 したがって,漸近安定である。 演習2.2 つぎの2次自由系の時間応答を求め,漸近安定性を判定せよ。 一般に, 例題2.3 つぎの行列
解答 (1) 行列 の解として, (2) 行列 の解として, (3) 行列 の解として, 演習2.3 例題2.2と演習2.2の2次系の漸近安定性を,行列 MATLABを用いて漸近安定性を判定するには,たとえば例題2.3(3)に対しては,つぎのコマンドを与えればよい。 %stability_check.m |
SCILABを用いて漸近安定性を判定するには,たとえば例題2.3(3)に対しては,つぎのコマンドを与えればよい。
//stability_check.m
A=[0 1;1 -1]; n=size(A,1); //行列データの定義と次数の取得
poles=spec(A) //行列の固有値の計算
sum(real(poles)<0)==n //論理式による漸近安定性の判定
2.2 時間応答
![]() ただし, すなわち,時間応答は零入力応答と零状態応答の和となる(テキスト「線形システム制御入門」の定理2.3参照)。 以下では,簡単のために,1入力1出力の場合を考える。 は,ステップ応答と呼ばれる。したがって,ステップ応答はインパルス応答を積分して,逆にインパルス応答はステップ応答を微分して得られる。 まず,次式で表される1次系を考える。 例題2.4 1次系(??)のステップ応答を求めよ。 解答 インパルス応答は
で表わされる。または,インパルス応答を直接積分して 演習2.4 つぎの1次系のステップ応答を求めよ。 (1) 1次系(??)のステップ応答 において, すなわち,時定数は,応答が定常値 例題2.5 つぎの1次系のステップ応答をMATLABで計算し,図示せよ。 解答 MATLABに,つぎのコマンドを与えればよい。 %step_resp1.m |
SCILABに,つぎのコマンドを与えればよい。
//step_resp1.m
sys=syslin(‘c’,-1,1,1,0); //状態空間表現のデータ構造体の定義
t=0:0.1:5; //ステップ応答を計算する時刻の定義
plot(t,csim(‘step’,t,sys)), ,mtlb_grid //ステップ応答の計算と図示
演習2.5 例題2.5の図上に,時定数を求めるための補助線を引き,交点の座標をginput(1)を使って読み取れ。
つぎに,次式で表される2次系を考える。 ここで, これらに対応して, これらに対応して,インパルス応答 は,次式で与えられる。 これらに対応して,ステップ応答は,次式で与えられる。 特に, ただし このとき,ステップ応答の行き過ぎ時間 したがって,図上で第1番目のオーバーシュートの頂点の座標 例題2.6 つぎの2次系のステップ応答をMATLABで計算し,図示せよ。 解答 MATLABに,つぎのコマンドを与えればよい。 %step_resp2.m |
SCILABに,つぎのコマンドを与えればよい。
//step_resp2.m
A=[0 1;-1 -0.02]; B=[0;1]; C=[1 0];
sys=syslin(‘c’,A,B,C);
t=0:0.1:10; plot2d(t,csim(‘step’,t,sys)), mtlb_grid
演習2.6 例題2.6の図上で,第1番目のオーバーシュートの頂点の座標をginput(1)を使って読み込み,固有角周波数と減衰係数を同定せよ。
さて,もう一つ重要な 例題2.7 つぎの1次系の時間応答をMATLABで計算し,図示せよ。 ただし, 解答 MATLABに,つぎのコマンドを与えればよい。 %sin_resp.m |
SCILABに,つぎのコマンドを与えればよい。。
//sin_resp.m
sys=syslin(‘c’,-1,1,1,0); x0=1;
t=0:0.05:10; u=sin(10*t); //入力を指定
y=csim(u,t,sys,x0); //時間応答の計算
plot2d(t,y), mtlb_grid //時間応答の図示
演習2.7 例題2.7の図上に,零入力応答と零状態応答を重ねて表示せよ。
この例が示すように, ここで,周波数伝達関数 で与えられる。古典制御で用いられるボード線図は,角周波数毎にゲイン 例題2.8 つぎの1次系のボード線図をMATLABで図示せよ。 解答 MATLABに,つぎのコマンドを与えればよい。 %bode_diag.m |
SCILABに,つぎのコマンドを与えればよい。
//bode_diag.m
sys=syslin(‘c’,-1,1,1,0);
fmin=1e-1/(2*%pi); fmax=1e1/(2*%pi); //周波数範囲の指定
bode(sys,fmin,fmax) //ボード線図の計算と図示
演習2.8 例題2.6の2次系のボード線図をMATLABで図示せよ。
最後に,自由系の時間応答(初期値応答)の計算法を示す。 例題2.9 つぎの1次自由系の時間応答をMATLABで計算し,図示せよ。 解答 MATLABに,つぎのコマンドを与えればよい。 %free_resp.m |
SCILABに,つぎのコマンドを与えればよい。
//free_resp.m
sys=syslin(‘c’,-1,0,1,0); x0=1;
t=0:0.1:5; u=zeros(1,length(t)); //零入力を指定
y=csim(u,t,sys,x0); //初期値応答の計算
plot2d(t,y), mtlb_grid //初期値応答の図示
演習2.9 例題(2.6)の2次系のインパルス応答をMATLABで図示せよ。 |
演習問題の解答
演習2.1
(1) 漸近安定であるための条件は, 演習2.2 これより,つぎが成り立つ。 したがって,漸近安定でない。 (2) (??)式を用いて,時間応答は次式となる。 これより,つぎが成り立つ。 したがって,漸近安定である。 (3) (??)式を用いて,時間応答は次式となる。 これより,つぎが成り立つ。 したがって,漸近安定でない。 演習2.3 例題1.2について: 演習1.2について: 演習2.4 (1) 演習2.5 定常ゲインは1.したがって,横線 %step_resp1_cont.m |
//step_resp1_cont.m
plot2d([0 5],(1-exp(-1))*[1 1]) %レベル1-1/e=0.632の表示
w=locate(1)
演習2.6
%step_resp2_cont.m |
//step_resp2_cont.m
w=locate(1); Tp=w(1); p0=w(2)-1;
zeta=sqrt(log(p0)^2/(log(p0)^2+%pi^2));
wn=sqrt(log(p0)^2+%pi^2)/Tp;
演習2.7
%sin_resp_cont.m |
//sin_resp_cont.m
x0=1; u=zeros(1,length(t)); y1=csim(u,t,sys,x0); %零入力応答の計算
x0=0; u=sin(10*t); y2=csim(u,t,sys,x0); %零状態応答の計算
hold on, plot2d(t,y1,’g’,t,y2,’r’)
演習2.8
%bode_diag2.m |
//bode_diag2.m
A=[0 1;-1 -0.02]; B=[0;1]; C=[1 0]; sys=syslin(‘c’,A,B,C,0);
fmin=1e-1/(2*%pi); fmax=1e1/(2*%pi);
bode(sys,fmin,fmax)
演習2.9
%impulse_resp.m |
//impulse_resp.m
A=[0 1;-1 -0.02]; B=[0;1]; C=[1 0]; sys=syslin(‘c’,A,B,C,0);
t=0:0.1:5; u=zeros(1,length(t));
y=csim(u,t,sys,B);