0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

外乱オブザーバー(後篇)― 状態オブザーバーベースDOBと拡張状態オブザーバーESO

0
Last updated at Posted at 2026-04-18

はじめに

前篇では、名義逆モデル型DOB非線形外乱オブザーバー(NDOB) を取り上げました。

以下のリンクからアクセスできます

今回はその続きとして、残りの2つの手法を整理します。

  1. 状態オブザーバーベースの外乱オブザーバー(SO-DOB)
  2. 拡張状態オブザーバー(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$ 階積分器のように振る舞う ようになるわけです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?