状態フィードバックとオブザーバ \def\Mto#1#2{\left(\begin{array}{r}#1 \\ #2\end{array}\right)} \def\Mtt#1#2#3#4{\left(\begin{array}{rr}#1 \\ #3\end{array}\right)} \def\Mso#1#2#3{\left(\begin{array}{r}#1 \\ #2 \\ #3\end{array}\right)} \def\Mss#1#2#3#4#5#6#7#8#9{\left(\begin{array}{rrr}#1 \\ #4 \\ #7 \end{array}\right)} \def\Mqo#1#2#3#4{\left(\begin{array}{r}#1 \\ #2 \\ #3 \\ #4\end{array}\right)} \def\Mqqa#1#2#3#4#5#6#7#8{\left(\begin{array}{rrrr}#1 \\ #5 \\} \def\Mqqb#1#2#3#4#5#6#7#8{#1 \\ #5\end{array}\right)}
このページでは状態制御論におけるフィードバックと、それに必要な状態変数を推定する手法についてあつかいます。

状態方程式で表したシステム

をブロック線図で表すと、右図のようになります。 古典制御理論では、全体の出力yを入力に対してフィードバックしました。それに対して、状態制御論におけるフィードバックは、状態変数をフィードバックします。これを状態フィードバックと言います。
具体的には、システムの入力uに対して、

を入力します。vuに代わる、新しい入力です。

これを元のシステムの状態方程式、出力方程式に代入します。

この式を良く見ると、元々Aだったシステム行列がA-BFに置き換えられたシステムになったと見ることができます。

なお、(A,B)が可制御ならば(A-BF,B)も可制御、(C,A)が可観測ならば(C-DF,A-BF)も可観測です。 システムの安定性(収束性)が、システム行列の固有値に依存することはすでに説明しました。特に固有値の実部が負でなければ、そもそも不安定です。
ここでは状態フィードバックによる固有値の変化を調べてみます。

もとのシステムの固有値は、特性方程式

で得られます。状態フィードバックしたシステムの固有値は、

の解です。

ここでは、1入力1出力、2次のシステムを例にその固有値の変化を考えてみます。


とすると、


ここで、

とおくと、

となります。
一方、

なので、λ1≠λ2ならば、α1、α2を指定すれば、f1、f2を求められます(可制御なら、λ1≠λ2)。
よって、

  1. 目標とする固有値を決める
  2. α1、α2が求まる ※(s-λ1)(s-λ2)=0より
  3. f1、f2を求める
という手順により、元々の固有値、λ1、λ2を好きな固有値に変更することができます。

状態フィードバックを行うと、可制御なら元のシステムが不安定であっても安定化し、かつ収束の特性も決めることができます。

状態フィードバックは状態変数がすべて得られることが前提ですが、すべての状態変数を個別に観測できるだけセンサをつけることができるとは限らず、そのままでは使用が非常に制限されます。そこで、制御対象とすっかり同じシステムの数値モデルをつくり、制御対象と平行してシミュレーションし、そのなかの状態変数で代用することを考えます。
実システム:
シミュレータ:
実システムとシミュレータでは各パラメータは同一、ただし、状態変数と出力は異なります。
ここで、誤差を考えます。

よって、もしAが安定なら、一応収束します。ただし、Aが不安定な場合は収束しませんし、収束の具合いもシステムまかせです。

そこで、実際の出力とシミュレータの出力の差を、シミュレータにフィードバックしてみます。

このとき、改めて誤差を計算すると、

となります。
これは、誤差eが、行列Aではなく、(A-LC)によって収束することを意味します。よって、状態フィードバックで示したのと同様にLの固有値を決定することにより、実システムとシミュレータの間の誤差を、システムが不安定であっても、収束させることができます。
ただし、今度は、(C,A)が可制御である必要があります。

簡単にオブザーバの設計法をまとめます。

  1. が可観測ならば、が可制御なので(双対性)、の固有値を自由に設定できる(状態フィードバック)。
  2. の固有値との固有値は等しく、

    なので、と置き換えて、の状態フィードバック系を設計する。
  3. 得られたより、とすることで、の固有値を設定できる。
これにより、実システムがモデル化できれば、オブザーバをつくり、状態変数を推定することが可能となります。
この節では最適制御とよばれる、状態フィードバックの設計手法について述べます。 状態フィードバックでは行列Fを指定することで、固有値の位置をずらすことができました。ただ、固有値の位置というのは、設計上、直感的には分かりにくい修正です。また、その設計も次数が上がると大変です。
それに対して、最適制御では「評価の仕方」を与えることで、その条件で「最適」なFを得ることができます。 制御において最適とはなんでしょうか。
  • 状態変数が小さい。
  • 入力が小さい。
  • 状態変数の収束が早い。
  • 入力が平均的に小さい。
  • 変化がおだやか。
  • 目標到達時間が短い
など、様々な要求があります。それぞれの要求に対して最適といえるパラメータがありそうなので、まず、評価方法を決めます。
例1:

を最小にするようにする。

この条件の意味は、

  1. x:制御量 u:操作出力
  2. 積分:状態変数および入力(フィードバック分)が収束するまでの状態量、操作をすべて評価に入れる。
  3. x,uの2乗:負にならない値で評価。0から正になっても負になっても大きな値となる。
    |x|, |u| でも意味は変わらないが、数学的な処理の過程で、微分するときに絶対値は面倒。x^2なら微分できる。
    c.f. 最小自乗法
です。つまり、全部の状態量、入力が、動作全般にわたって小さくなるようにするという意味を持ちます。
ここで、重みを付けられるように改良します。
例2:

を最小にするようにする。
  1. 重みを付けた。
    a1を10倍すると、当然x1が重視され、x1を他より優先して小さくするようになる。

考え方によって、「最適」を表す方法はいくらでもあると言えますが、ここではこの後者の式を基本に考えます。 システム、
(z: 仮想的出力)
に対して、評価値

を最小とする状態フィードバックを求めてみます。
=Mによってxを、Rによってuを評価します。

解(天下り):

を状態フィードバックします。ここで、Pは、
:リカティ方程式
の解です(n次正方、正定対称)。

あるいは、なので、と置いて、

を最小にするという表現もあります。
ここで、Rは正定対称行列、Qは半正定対称行列です。
※正定:0以外の任意のに対して、となること。
※半正定:0位外の任意のに対して、となること。

このようにして得た状態フィードバック系は、(A,B)が可制御、(M,A)が可観測なら必ず安定します。
1入力1出力のシステムに対して、一巡伝達関数を求め、ナイキスト線図を書くと、かならず-1+0iを中心とする半径1の円の外側を通って、0に行きます。これは、
「ゲイン余裕∞」「位相余裕60度以上」
を意味します(かなり安定)。

なお、このとき、評価値は

となります。

リカティ方程式の解き方:

  1. 力業で直接Pの要素を求める(実用的ではない)

  2. をP(0)=0を初期値として、t→−∞方向に数値計算していくと、いずれ収束してとなり、リカティ方程式の解が得られる。
  3. (2n×2n)
    の固有値(2n個)を求め、そのうち、実部が負のもの(必ずn個あり)λ1…λnに対する固有ベクトルを求める。
    固有ベクトルをn次ベクトル2個に切り離すことができ、

    と、なるとき、
    で、計算できます。
システム

に対して、評価関数

を最小にする最適制御系を求めてみます。

まず、行列:

次に、リカティ方程式

を解きます。
(正定対称)として、



以上とりまとめて

となります。


1式目より、p12=+-1ですが、Pは正定である必要があるため、とりあえず、無難にp12=+1を仮定します。


2式目より、

なので、p22=-3,1 。同じく、とりあえず、p22=1とします。
すると、1式目よりp11=2になります。

仮に出したPは
です。ここで正定性の確認をします。

よって、正定です。
※他のパターン、p12=-1やp22=-3は正定になりません。

よって、

を状態フィードバックします。
このとき、状態フィードバックによって

となります。このときの固有値は

よって、固有値は(-1)の重解になっています。

以上。 最適制御により状態フィードバックされたシステムの行列は、

となります。この行列の固有値をλi、固有ベクトルをvi(i=1...n)とすると、その定義より、
もしくは
…(1)
となります。

一方、リカティ方程式、

を変形します。

これに右からviをかけ、s=λiとすると、

ここで、第2項は上の(1)式で0となっているので、

となります。

また(1)式より、

2式並べると、

となるので、

となります。

ここで、解き方その3と見比べると、その3で"ui"とされていたものは、"Pvi"に他なりません。 これを並べると、

が得られます。

前に、状態フィードバックを行うために、状態変数観測器オブザーバを使うという方法を示しましたが、これも補正用の行列Lを何らかの方法で決める必要があります。 その際に、「観測時には(センサには)ノイズが付き物。その影響をなるべく受けなくする」ことを狙った設計が最適推定です。

最適制御に比べると話がややこしいので概略だけ示します。 推定する対象となるシステムには、センサで観測するときにノイズが混じっているものとします。また、入力は任意で、何が入るかわからないとします。

ここで、w,uはホワイトノイズ(白色雑音)、すなわち、全周波数の信号を等しく含むランダムな信号とします。また、

  • 同じ制御を何回もやったときに、入力w(t)のそれぞれの回の時刻tでの値の平均値(期待値)はゼロ。
  • 入力はwは何回やってもどの時刻でも、さらに各要素間でも関連性はなし。

  • 同じく、観測ノイズv(t)も各回の平均はゼロ。
  • ただし、v(t)は、時間に関しては、相関性無くランダムでも、各要素間にはある程度関連性あり。
とします。一般的にいって、外乱はランダムにはいるもの、観測ノイズの場合は、たとえばセンサの取りつけがずれているとか、そういった要因で関連したノイズが観測されることがあります。

このような、ある癖を持ったノイズがセンサ出力が混じるシステムに、任意の信号が入る状態で

つまり、
の平均値が0
となるオブザーバを考えます。

結論:
(A,B)が可制御、(C,A)が可観測の時、

でオブザーバをつくります。(2本目はリカティ方程式)

最適レギュレータのリカティ方程式と見比べると、

と置き換えれば同じになることが確認できます。これもまた双対性で、リカティ方程式の解き方としては同じになります。 LQG(Linear-Quadratic-Gaussian)コントローラは最適制御とカルマンフィルタを合体させたフィードバック制御系です。 制御対象の出力からカルマンフィルタで状態変数を推定し、それで状態フィードバックをかけます。

具体的には

(最適制御/カルマンフィルタ)
という制御式を立てます。

このままでは目標値の入力ができないため、最終的にブロック図で表すと右のようにします。目標値をいれるところを良く見ると、古典制御で目標値をいれる場所(出力と目標値の差)と同じであることがわかります。
なお、最適制御、カルマンフィルタともに古典制御に比べたら圧倒的に強力ですが、2個組み合わせるとそうとも言えなくなるそうです。それでも古典制御に比べたら強力なのはたしかです。

以上で、状態制御論の部分は終了です。
現代制御理論のごく一部でしかありませんが、古典制御との違いはある程度認識できたと思います。

状態制御を使うには

  1. 制御対象のモデルをしっかり立てる/モデルときっちり一致するようなシステムを作る。
  2. 状態変数を観測するのに十分なセンサを取りつける。
  3. 運動方程式を立てる。
  4. 状態方程式、出力方程式を立てる。
  5. 最適制御系を設計して状態フィードバックをかける。
  6. 必要ならカルマンフィルタを設計してとりつける。
なのですが、実際には、いろいろな誤差やディジタル制御(コンピュータ制御)にするときの演算時間の遅れなどの問題などなど、じゃまな要因がたくさんあります。ただ、ある程度しっかりしたシステムをきっちり動かすには強力なツールになりますし、「直感」でフィードバック系を作れないときは、計算は面倒ですが「数学的」に答えを出すことができるなど、便利なはずです。