実際に使える制御工学:応用編(4)「外乱オブザーバ。最も普及しているロバスト制御。」
<この記事で伝えたい事>
外乱オブザーバの設計は簡単です
設計が簡単なわりに高い効果が得られるからか、メカトロニクス業界でもよく使われます。
ただ、「あれはロバスト制御ではない」と言う方もいます。
(パラメータやモデルの誤差について踏み込んだ話が少ないからでしょうか?)パラメータやモデル誤差の影響を調べる方法はあります
ただし、少しトリッキーなブロック線図の変形が必要です。
1. はじめに
自己紹介はこちらです。
この記事は、主に若手~中堅エンジニアに向けた技術紹介・解説記事シリーズの第4弾です。
今回は、シンプルかつ実用性の高い制御技術である外乱オブザーバを紹介・解説します。
2. 外乱オブザーバの概要
外乱オブザーバとは、制御対象に加わる外乱を推定する方法です。
また、推定した外乱を使って外乱補償する仕組みまで含めて「外乱オブザーバ」と呼ぶケースもあります。
最初期のものは、外乱を状態変数の1つとみなす拡張状態方程式を用いて設計したオブザーバだったそうです。
それに「ゴピナスの方法」なるものを適用して計算量を削ったと聞きます。
そこから更に手を加えた結果、現在は伝達関数ベースでの設計が主流になったようです。
外乱オブザーバを設計するには、まず下図のようなシステムを考えます。

このシステムの入出力関係は下式になります。
$$
y=P_{(s)}(u+d)
$$
この数式中で未知なのは外乱$${d}$$だけです。
よって、外乱$${d}$$は以下のように求められます。
($${P_{(s)}^{-1}}$$は制御対象伝達関数の逆数)
$$
d=-u+P_{(s)}^{-1}\cdot y
$$
基本的には、これだけで外乱を推定できます。
しかし、実際には下式のように、ノイズ影響低減や遅延要素による不安定化を防ぐローパスフィルタ$${Q_{(s)}}$$を追加することがほとんどです。
($${\hat{d}}$$は推定外乱)
$$
\hat{d}=Q_{(s)}\cdot(-u+P_{(s)}^{-1}\cdot y)
$$
この推定外乱$${\hat{d}}$$を入力uにマイナスで加えれば、外乱と推定外乱がほぼ相殺します。
これが、外乱オブザーバによる外乱補償の仕組みとなります。

設計はシンプルですが、外乱の影響をよく抑制できます。
3. 外乱オブザーバによるノミナル化
外乱オブザーバには「ノミナル化」と呼ばれる効果があります。
実際の制御対象パラメータが想定と違っても、想定どおりのパラメータであるかのように動かせる効果です。
しかし、この効果はあまり詳しく説明されません。
大抵、
「モデルやパラメータの誤差影響を外乱とみなして補償するから」
という説明に留まります。
ここでは、もう少し踏み込んだ話をします。
まず、その準備をステップ分けで説明します。
(3ステップ)
STEP1
下図のように、外乱オブザーバが2つのループを持つことを認識します。
(ここでは、ループA,Bとしました)
また、実際の制御対象との区別のため、外乱オブザーバ内の制御対象逆モデルを$${P_{n(s)}^{-1}}$$とします。

STEP2
2つのループをハッキリと分割します。

STEP3
ループAを1つのブロックにまとめます。

これで準備は整いました。
外乱オブザーバの外側からみた入力$${u_o}$$から出力$${y}$$までの伝達関数は、下式で求められます。
$$
\begin{array}{ll}
\cfrac{y}{u_o}&=\cfrac{\cfrac{1}{1-Q_{(s)}}\cdot P_{(s)}}{1+\cfrac{Q_{(s)}}{1-Q_{(s)}}\cdot \cfrac{P_{(s)}}{P_{n(s)}}}\\
&=\cfrac{P_{(s)}\cdot P_{n(s)}}{(1-Q_{(s)})\cdot P_{n(s)}+Q_{(s)}\cdot P_{(s)}}
\end{array}
$$
ここで、ローパスフィルタ$${Q_{(s)}}$$のカットオフ周波数が極めて高く、$${Q_{(s)}≒1}$$とみなせるとします。
すると、$${u_o}$$-$${y}$$間伝達関数は下式になります。
$$
\begin{array}{ll}
\cfrac{y}{u_o}&=\cfrac{P_{(s)}\cdot P_{n(s)}}{(1-1)\cdot P_{n(s)}+1\cdot P_{(s)}}\\
&=\cfrac{P_{(s)}\cdot P_{n(s)}}{P_{(s)}}\\
&=P_{n(s)}
\end{array}
$$
このように、ローパスフィルタ$${Q_{(s)}}$$のカットオフ周波数が極めて高ければ、外乱オブザーバの外側からみた制御対象は、外乱オブザーバ内制御対象$${P_{n(s)}}$$(=ノミナルモデル)と一致します。
ただ、現実的には$${Q_{(s)}=1}$$にするのは困難です。
そのため、完璧なノミナル化はできません。
それでも、実用面では十分な効果が得られるケースが多いです。
なお、この解析方法をロバスト制御問題で使われる乗法的誤差や加法的誤差の考え方と組み合わせれば、より踏み込んだ話ができそうに思います。
4. 具体例を用いたノミナル化の説明
ここでは、具体例を挙げてノミナル化について説明します。
メカトロニクス機器の主要部品であるサーボモータには、下図のように負荷が取り付けられます。

このとき、モータのトルク$${\tau}$$-角速度$${\omega}$$間伝達関数は下式になります。
($${J_m}$$はモータのイナーシャ、$${J_L}$$は負荷のイナーシャ)
$$
\cfrac{\omega}{\tau}=\cfrac{1}{(J_m+J_L)\cdot s}
$$
あらかじめ負荷イナーシャ$${J_L}$$が分かれば、モータの動きを精度良く制御できます。
しかし、ときには、
$${\bm{J_L}}$$が分からないケース
動作中に$${\bm{J_L}}$$が変化するケース
というのもあります。
こうしたとき、外乱オブザーバが役立ちます。
外乱オブザーバでノミナル化すれば、$${J_L}$$が分からないケースや動作中に変化するケースにもある程度対応可能です。
下図は、サーボモータ向けの外乱オブザーバ構成例です。
(高精度な電流制御がされていて、トルク指令≒実トルクとみなせるものとします)

これを3章で説明したのと同じ要領で変形したものが下図です。

外乱オブザーバの外側からみたトルク$${\tau_o}$$-角速度$${\omega}$$間伝達関数は下式になります。
$$
\begin{array}{ll}
\cfrac{\omega}{\tau_o}&=\cfrac{\frac{s+\omega_c}{s}\cdot\frac{1}{(J_m+J_L)\cdot s}}{1+\frac{s+\omega_c}{s}\cdot\frac{1}{(J_m+J_L)\cdot s}\cdot J_m \cdot s\frac{\omega_c}{s+\omega_c}}\\
&=\frac{s+\omega_c}{(J_m+J_L)\cdot s^2+J_m\omega_c\cdot s}\\
&=\cfrac{s+\omega_c}{\frac{J_m+J_L}{J_m}\cdot s+\omega_c}\cdot \cfrac{1}{J_m\cdot s}
\end{array}
$$
低周波数領域ではsが小さいので、$${\frac{J_m+J_L}{J_m}\cdot s≪\omega_c}$$となります。
(加えて、$${\frac{J_m+J_L}{J_m}>1}$$なので、$${s≪\omega_c}$$ともなります)
このとき、$${\tau_o-\omega}$$間伝達関数は下式のように近似できます。
$$
\begin{array}{ll}
\cfrac{\omega}{\tau_o}&\fallingdotseq\cfrac{\omega_c}{\omega_c}\cdot\cfrac{1}{J_m\cdot s}\\
&=\cfrac{1}{J_m\cdot s}
\end{array}
$$
これは、負荷を取り付けないときの伝達関数と一致します。
外乱オブザーバを使えば、負荷が付いていても、モータだけで動いているのに近い状態にできます。
$${\bm{J_L}}$$が不明だったり、動作中に変化するケースには有効です。
ただし、その効果を過信するのは禁物です。
なぜなら、$${s}$$が大きい高周波領域では$${s≫\omega_c}$$となるためです。
(加えて、$${\frac{J_m+J_L}{J_m}>1}$$なので、$${\frac{J_m+J_L}{J_m}\cdot s≫\omega_c}$$ともなります)
このとき、$${\tau_o-\omega}$$間伝達関数は下式のように近似できます。
$$
\begin{array}{ll}
\cfrac{\omega}{\tau_o}&\fallingdotseq\cfrac{s}{\frac{J_m+J_L}{J_m}\cdot s}\cdot\cfrac{1}{J_m\cdot s}\\
&=\cfrac{1}{(J_m+J_L)\cdot s}
\end{array}
$$
これは、負荷を取り付けたときの伝達関数そのままです。
高周波領域では、ノミナル化の効果は失われます。
特に、$${J_L}$$が大きく$${\frac{J_m+J_L}{J_m}\cdot s≪\omega_c}$$とみなせる範囲が狭いとき、応答周波数を上げると不安定化しやすいです。
外乱オブザーバは強力な制御方法ですが、その限界は見極めて使う必要があります。
5. シミュレーションによるノミナル化効果検証
まず、外乱オブザーバがないときの動きを確認します。
ここでは、下図のような外乱オブザーバなしの速度制御系を考えます。

ブロック線図中の各パラメータは下表のとおりとします。

本来、速度PI制御器内のイナーシャ$${J=J_m+J_L}$$としたいところです。
しかし、$${J_L}$$が分からず、仕方なく$${J=J_m}$$と設定することもあります。
このとき、動きがどう変わるかシミュレーションしたものが下図です。

$${J=J_m}$$と設定すると、正しく$${J}$$を設定したときと比べて、
指令への追従が遅くなってしまう
オーバーシュートも大きくなってしまう
となり、良いとこなしです。
そこで、下図のように外乱オブザーバの適用を考えます。

設計者にとって、$${J_L}$$の数値は相変わらず不明とします。
このため、速度PI制御器内と外乱オブザーバ内イナーシャは$${J_m}$$に設定するものとします。
(外乱オブザーバ内ローパスフィルタの$${\omega_c}$$は$${2\pi\times100_{[rad/s]}}$$)
下図は、そのときのシミュレーション結果です。

外乱オブザーバを使うことで、正しく$${J}$$を設定したときとほぼ同じ速度波形を実現できています。
これが、外乱オブザーバのノミナル化効果です。
当然、$${J}$$は正しく設定できた方が良いです。
しかし、正しい数値が不明だったり、情報の信憑性が低いときは外乱オブザーバの適用を考えてみた方が良いです。
6. おわりに
この記事では、外乱オブザーバを紹介・解説しました。
外乱オブザーバの実装には、直接微分を使わない方法というのもあります。
計算リソースの制約が厳しく固定小数点演算が必要なときは、その方法を使うのが良いと思います。
また、外乱オブザーバには外乱抑制やノミナル化の他の使い方もできます。
その代表例は、トルクセンサ代わりにトルクを推定する使い方です。
推定したトルクを使えば、追加センサなしで安価に力制御を実現できます。
応用の幅が広い技術なので、知っておいて損はないと思います。
前回:応用編(3)「モーション生成」はこちら
次回:応用編(5)「多関節ロボットの非干渉化制御」はこちら
付録. 高次外乱オブザーバ
本文中の外乱オブザーバには、弱点があります。
それは、ランプ状の外乱が加わると、定常的な推定誤差が生じることです。
(下図はそのシミュレーション波形)

こうなる理由は、本文中の外乱オブザーバが、
外乱の1階時間微分値=0
という前提で設計された初期型外乱オブザーバと同等だからです。
初期型外乱オブザーバは、
外乱の1階時間微分値=定数
(外乱の2階時間微分値=0)
という前提で外乱を推定することで、この弱点を克服しました。
これを1次外乱オブザーバと呼びます。
(本文中のものは0次外乱オブザーバと呼ばれます)
ただ、少し工夫をすれば、本文中の伝達関数型の外乱オブザーバでも、1次外乱オブザーバと同等の動きができます。
外乱オブザーバ中のローパスフィルタ$${Q_{(s)}}$$を下式のように設計すれば、定常誤差なくランプ状の外乱を推定できます。
($${\omega_c}$$はカットオフ周波数、$${\zeta}$$は減衰係数)
$$
Q_{(s)}=\cfrac{2\cdot \zeta \cdot \omega_c\cdot s+\omega_c^2}{s^2+2\cdot \zeta \cdot \omega_c\cdot s+\omega_c^2}
$$
下図は、上式の$${Q_{(s)}}$$を用いたときのシミュレーション結果です。
ランプ状の外乱を定常誤差なく推定できています。

そして、1次外乱オブザーバにも、放物線状(時間の2乗に比例する)の外乱が加わったとき、定常的な推定誤差が生じるという弱点があります。
イタチごっこのようですが、
外乱の2階時間微分値=定数
(外乱の3階時間微分値=0)
という前提で外乱を推定すれば、定常誤差なく外乱を推定できます。
このように、高次の外乱微分値まで考慮して設計した外乱オブザーバを「高次外乱オブザーバ」と呼びます。
ローパスフィルタ$${Q_{(s)}$$を下式のように設計すれば、伝達関数型の外乱オブザーバで高次外乱オブザーバと同等の動きを実現できます。
($${n}$$は整数)
$$
Q_{(s)}=\cfrac{a_{n-1}\cdot s^{n-1}+\cdots+a_1\cdot s+a_0}{s^n+a_{n-1}\cdot s^{n-1}+\cdots+a_1\cdot s+a_0}
$$
高次外乱オブザーバでも1次外乱オブザーバのように減衰係数を設定できますが、煩雑なので重根配置にすることが多いです。
こう言うと、
「高次にするほど良いのでは?」
というのは自然な発想と思います。
しかし、高次外乱オブザーバにはそれなりの弱点もあります。
それは、0次外乱オブザーバにはない推定外乱のオーバーシュートが生じ得ることです。
(なだらかに外乱が加わるなら、それほど問題になりませんが)
こうしたメリット・デメリットを踏まえて、その時々に適切な方法を選択するのが大事と思います。
前回:応用編(3)「モーション生成」はこちら
次回:応用編(5)「多関節ロボットの非干渉化制御」はこちら
