はじめに
前篇では、名義逆モデル型DOB と 非線形外乱オブザーバー(NDOB) を取り上げました。
以下のリンクからアクセスできます
今回はその続きとして、残りの2つの手法を整理します。
- 状態オブザーバーベースの外乱オブザーバー(SO-DOB)
- 拡張状態オブザーバー(ESO)
この2つには共通した発想があり、いずれも 「外乱を状態の一部として扱い、状態オブザーバーでまとめて推定する」 というアイデアに基づいています。
3. 状態オブザーバーベースの外乱オブザーバー(SO-DOB)
3.1 概要
前編のNDOBでは、補助変数 $p(x)$ を導入する工夫で $\dot{x}$ の計算を回避しました。
一方、SO-DOBはもう少し素直なアプローチを取ります。
「外乱 $d$ も状態変数の一つだと思って、状態オブザーバーにまとめて推定させよう」
これがSO-DOBの出発点です。
考え方としては、NDOBが「微分器を避けるためのトリック」に重きを置いたのに対し、SO-DOBは 「線形システムの標準的なオブザーバー設計の枠組みに、外乱をそのまま乗せる」 という、簡単なアプローチといえます。
3.2 問題設定
次のような線形時不変システムを考えます。
\begin{cases}
\dot{x} = A x + B u + E d \\
y = C x
\end{cases}
ここで、
- $x \in \mathbb{R}^n$:状態ベクトル
- $u$:制御入力
- $d$:未知外乱(推定したい対象)
- $y$:観測出力
- $A, B, C, E$:既知の行列
NDOBと同様に、外乱の変化はゆっくりである($\dot{d} \approx 0$)と仮定します。
3.3 拡張状態の構成
ここで、状態ベクトル $x$ に外乱 $d$ を追加して、新しい 拡張状態ベクトル を定義します。
x_a = \begin{bmatrix} x \\ d \end{bmatrix} \in \mathbb{R}^{n+1}
$\dot{d} = 0$ の仮定のもとで、拡張系の状態方程式は次のようになります。
\dot{x}_a
=
\begin{bmatrix} \dot{x} \\ \dot{d} \end{bmatrix}
=
\begin{bmatrix} A & E \\ 0 & 0 \end{bmatrix}
\begin{bmatrix} x \\ d \end{bmatrix}
+
\begin{bmatrix} B \\ 0 \end{bmatrix} u
見やすくするために、拡張した行列を
A_a = \begin{bmatrix} A & E \\ 0 & 0 \end{bmatrix}, \quad
B_a = \begin{bmatrix} B \\ 0 \end{bmatrix}, \quad
C_a = \begin{bmatrix} C & 0 \end{bmatrix}
と置くと、拡張系は
\begin{cases}
\dot{x}_a = A_a x_a + B_a u \\
y = C_a x_a
\end{cases}
という形になります。
3.4 拡張系に対する状態オブザーバーの構成
あとは、この拡張系に対して、Luenbergerオブザーバー と全く同じ形で状態オブザーバーを組むだけです。
\dot{\hat{x}}_a = A_a \hat{x}_a + B_a u + L (y - C_a \hat{x}_a)
ここで、$L \in \mathbb{R}^{(n+1) \times p}$ はオブザーバーゲインです($p$ は出力の次元)。
推定誤差 $\tilde{x}_a = x_a - \hat{x}_a$ の動的方程式を求めてみます。
\dot{\tilde{x}}_a
= \dot{x}_a - \dot{\hat{x}}_a
= A_a x_a + B_a u - A_a \hat{x}_a - B_a u - L C_a \tilde{x}_a
= (A_a - L C_a) \tilde{x}_a
つまり、推定誤差の収束は行列 $A_a - L C_a$ の固有値によって決まります。$L$ を適切に選んで、$A_a - L C_a$ のすべての固有値を安定(左半平面)に配置できれば、$\tilde{x}_a \to 0$ に指数的に収束します。
これで 状態 $x$ と外乱 $d$ が同時に推定できる わけです。
3.5 可観測性の確認
SO-DOBが機能するためには、拡張系 $(A_a, C_a)$ が 可観測でなければなりません。これが最も重要な前提条件です。
ここで、PBHテストを拡張系に適用しますと、次のように整理できます。
\mathrm{rank}
\begin{bmatrix}
A - \lambda I & E \\
C & 0
\end{bmatrix}
= n + 1, \quad \forall \lambda \in \mathbb{C}
じゃないと、例えば、次の場合、
\operatorname{rank} \begin{bmatrix} A-\lambda I & E\\ C & 0 \end{bmatrix} < n+1
なら、0でない $(x,d)$ があって
(A-\lambda I)x + Ed = 0,\qquad Cx = 0
を満たしてしまうね。
状態$x$と外乱$d$の組が存在して、その組は内部では、つり合っていて
しかも、出力には全く現れない状況になりますね
つまり、外部は、観測できない状況になります。
ということで、上記の等式が必ず成立しなければなりません。
直感的に言えば、「外乱 $d$ の影響が、なんらかの経路で出力 $y$ に現れる」 必要がある、ということです。
- もし $E = 0$ なら、そもそも外乱が系に入っていないので推定不可能です。
- $E \neq 0$ でも、$d$ の作用経路が $C$ から見えないサブスペースに閉じ込められていると、やはり推定できません。
元の系 $(A, C)$ が可観測であっても、拡張系 $(A_a, C_a)$ が可観測になるとは限らないので、ここは必ずチェックが必要です。
3.6 具体例
少し例で見てみましょう。これはエイアできめたシステムです。
\ddot{y} = -a_1 \dot{y} - a_0 y + bu + d
状態を $x_1 = y$, $x_2 = \dot{y}$ とし、外乱を加えて拡張状態 $x_a = [x_1, x_2, d]^T$ とします。
拡張系は
\dot{x}_a =
\begin{bmatrix}
0 & 1 & 0 \\
-a_0 & -a_1 & 1 \\
0 & 0 & 0
\end{bmatrix}
x_a
+
\begin{bmatrix} 0 \\ b \\ 0 \end{bmatrix} u
, \quad
y = \begin{bmatrix} 1 & 0 & 0 \end{bmatrix} x_a
オブザーバーゲインを $L = [l_1, l_2, l_3]^T$ とすると、オブザーバーの方程式は
\begin{cases}
\dot{\hat{x}}_1 = \hat{x}_2 + l_1 (y - \hat{x}_1) \\
\dot{\hat{x}}_2 = -a_0 \hat{x}_1 - a_1 \hat{x}_2 + \hat{d} + b u + l_2 (y - \hat{x}_1) \\
\dot{\hat{d}} = l_3 (y - \hat{x}_1)
\end{cases}
となります。
特性多項式を計算すると、
\det(sI - (A_a - L C_a)) = s^3 + (a_1 + l_1) s^2 + (a_0 + l_2 + a_1 l_1) s + l_3
となるので、希望する3つの極(たとえば $(s + \omega_o)^3 = 0$)と係数比較することで、$l_1, l_2, l_3$ を決定できます。
4. 拡張状態オブザーバー(ESO)
4.1 概要
ESOは、中国の韩京清先生が提唱した ADRC(Active Disturbance Rejection Control) の心臓部であり、外乱オブザーバーの中でも最も野心的な手法といえます。
非常に非常に大胆な考えです。なぜなら、次のようなことが言えます。
「モデルの不確かさも、非線形項も、外乱も、ぜんぶまとめて『総合外乱』として一つの変数で扱おう」
これがESOの出発点です。
SO-DOBやNDOBでは、外乱 $d$ は「モデル化できない外部の影響」として扱っていました。一方、ESOでは モデルの内部ダイナミクスそのものもひっくるめて、まとめて1つの関数に押し込めてしまう のです。
結果として、システムの詳細なモデルを必要としない という、非常に強力な性質が得られます。
4.2 問題設定
次のような $n$ 次のシステムを考えます。
y^{(n)} = f\bigl(y, \dot{y}, \ldots, y^{(n-1)}, u, t\bigr) + b u
ここで、
- $y^{(n)}$:出力 $y$ の $n$ 階微分
- $f(\cdot)$:既知・未知を問わず、システムのすべての動的関係をまとめた関数。内部ダイナミクス、外乱、パラメータ変動、非線形性などが全部含まれる
- $b$:入力ゲイン
この $f(\cdot)$ を 総合外乱 と呼びます。
モデルの線形項も非線形項も、時変パラメータの影響も、実外乱も、すべて $f$ に含めてしまう。「わからないものは全部 $f$ に放り込む」という潔さが、ESOの特徴です。
必要な情報は、相対次数 $n$ と、入力ゲイン $b$ のおおよその値 だけ。これがESOの「モデルフリー」的な性格を生んでいます。
4.3 拡張状態ベクトル
次に、状態を次のように定義します。
x_1 = y, \quad x_2 = \dot{y}, \quad \ldots, \quad x_n = y^{(n-1)}
そして、総合外乱 $f$ を $(n+1)$ 番目の状態 として追加します。
x_{n+1} = f
すると、拡張系は次のように書けます。
\begin{cases}
\dot{x}_1 = x_2 \\
\dot{x}_2 = x_3 \\
\quad \vdots \\
\dot{x}_{n-1} = x_n \\
\dot{x}_n = x_{n+1} + b u \\
\dot{x}_{n+1} = h(t)
\end{cases}
ここで $h(t) = \dot{f}$ は総合外乱の変化率です。ESOでは、この $h(t)$ を 「未知だが有界」 と仮定するだけで、具体的な形は一切必要としません。
4.4 ESOの構造
拡張系に対して、Luenberger形のオブザーバーを組みます。
\begin{cases}
\dot{\hat{x}}_1 = \hat{x}_2 + \beta_1 (y - \hat{x}_1) \\
\dot{\hat{x}}_2 = \hat{x}_3 + \beta_2 (y - \hat{x}_1) \\
\quad \vdots \\
\dot{\hat{x}}_n = \hat{x}_{n+1} + b u + \beta_n (y - \hat{x}_1) \\
\dot{\hat{x}}_{n+1} = \beta_{n+1} (y - \hat{x}_1)
\end{cases}
ここで $\beta_1, \beta_2, \ldots, \beta_{n+1}$ はオブザーバーゲインです。
構造自体はSO-DOBと同じLuenberger型ですが、$\hat{x}_{n+1}$ が総合外乱 $f$ の推定値 になっている、というのが本質的なポイントです。
4.5 バンド幅パラメタライゼーション
ESOでは、$(n+1)$ 個のゲインを 1つのパラメータ $\omega_o$ だけで決めてしまいます。
オブザーバーの特性多項式を、すべての極が $-\omega_o$ に重根となるように設計します。
(s + \omega_o)^{n+1} = 0
二項展開すると、ゲインは
\beta_i = \binom{n+1}{i} \omega_o^i, \quad i = 1, 2, \ldots, n+1
となります。
たとえば $n = 2$(2次系)の場合、$(s + \omega_o)^3 = s^3 + 3\omega_o s^2 + 3\omega_o^2 s + \omega_o^3$ より、
\beta_1 = 3\omega_o, \quad \beta_2 = 3\omega_o^2, \quad \beta_3 = \omega_o^3
となります。
4.6 推定誤差
推定誤差 $e_i = x_i - \hat{x}_i$ の動的方程式は次のようになります。
\begin{cases}
\dot{e}_1 = e_2 - \beta_1 e_1 \\
\dot{e}_2 = e_3 - \beta_2 e_1 \\
\quad \vdots \\
\dot{e}_n = e_{n+1} - \beta_n e_1 \\
\dot{e}_{n+1} = h(t) - \beta_{n+1} e_1
\end{cases}
行列形式で書くと、
\dot{e} = A_e e + B_e h(t),
\quad
A_e =
\begin{bmatrix}
-\beta_1 & 1 & 0 & \cdots & 0 \\
-\beta_2 & 0 & 1 & \cdots & 0 \\
\vdots & & & \ddots & \\
-\beta_n & 0 & \cdots & 0 & 1 \\
-\beta_{n+1} & 0 & \cdots & 0 & 0
\end{bmatrix},
\quad
B_e = \begin{bmatrix} 0 \\ \vdots \\ 0 \\ 1 \end{bmatrix}
$h(t)$ が有界であれば、$\omega_o$ を十分大きく取ることで、推定誤差は 有界に収束 します。ただし、$h(t) \neq 0$ の場合、誤差は完全にゼロにはならず、$O(1/\omega_o^k)$ のオーダーで残ります。
この点はSO-DOB・NDOBとは違う重要な特徴です。
4.7 ADRCでの考え方
ちょっと今回のオブザーバーの内容と合わなく、脱線してしまうが、
ESOでえたものをどうつかうかというと、以下のようになります、
ADRCの制御則は次のような形をしています。
u = \frac{u_0 - \hat{x}_{n+1}}{b}
ここで、$u_0$ は仮想プラント $y^{(n)} = u_0$ に対するフィードバック制御(PD制御など)、$\hat{x}_{n+1}$ はESOが推定した総合外乱です。
この制御則を元のプラントに代入してみると、
y^{(n)} = f + b u = f + \bigl(u_0 - \hat{x}_{n+1}\bigr) = u_0 + \bigl(f - \hat{x}_{n+1}\bigr)
ESOが十分速ければ $\hat{x}_{n+1} \approx f$ なので、
y^{(n)} \approx u_0
となります。つまり、もともと複雑だったプラントが、ただの $n$ 階積分器のように振る舞う ようになるわけです。