状態フィードバック制御を行うには、すべての状態 $x(t)$ を知る必要があります。
しかし、実システムでは一部の状態しかセンサで取得できないことが多くあります。
このようなとき、出力 $y(t)$ から状態 $x(t)$ を推定する仕組みが「オブザーバ(Observer)」です。
オブザーバ(推定器)の状態方程式:
\[\dot{\hat{x}} = A \hat{x} + B u + L(y - \hat{y}) \\ \hat{y} = C \hat{x}\]推定誤差 $e = x - \hat{x}$ とすると:
\[\dot{e} = (A - LC)e\]したがって、$A - LC$ の固有値を設計すれば、推定誤差の収束性が決まる
対象システム:
\[A = \begin{bmatrix} 0 & 1 \\\\ -2 & -3 \end{bmatrix}, \quad B = \begin{bmatrix} 0 \\\\ 1 \end{bmatrix}, \quad C = \begin{bmatrix} 1 & 0 \end{bmatrix}\]目標:オブザーバの極を $s = -5$, $s = -6$ に配置
import numpy as np
import control
A = np.array([[0, 1], [-2, -3]])
C = np.array([[1, 0]])
# 目標極
observer_poles = [-5, -6]
# オブザーバゲイン L を計算
L = control.place(A.T, C.T, observer_poles).T
print("Observer Gain L:")
print(L)
出力 $y(t)$ しか得られないとき:
\(u(t) = -K \hat{x}(t) + r(t)\) • 実際に使うのは推定値 $\hat{x}$ • 推定精度が制御性能に直結
+----------+ +----------+ r ───►│ │ │ Observer │
│ -Kx̂ + r ├────► A, B, C │
└────┬─────┘ └────┬────┘
│ │
▼ ▼
[Plant] ◄─────── y = Cx
• $A - LC$ の極は制御系よりも左側に速く収束するよう設計(例:制御の2~5倍速)
• 可観測性がないとオブザーバは設計できない(control.obsv(A, C) で検査)
• 「現代制御理論入門」森北出版
• Ogata, Modern Control Engineering
• Python: control.place(), control.obsv(), numpy.linalg