多入力多出力システムのPredictive Functional Control
目次
はじめに
以前,Predictive Functional Control(PFC)についての記事を書きましたが,
あくまで単入力単出力(Single input single output; SISO)システムについてのみでした.
これを多入力多出力(Multi input multi output; MIMO)システムに拡張することが今回の目的です.
PFCの基礎に関する文献は考案者であるJ. Richaletの文献が詳しいです.
翻訳書もあったようなのですが,現在では絶版しています.
- 作者: Jacques Richalet,Donal O'Donovan,Karl E.Åstroem
- 出版社/メーカー: Springer
- 発売日: 2009/05/25
- メディア: ハードカバー
- この商品を含むブログを見る
基本的な概念は通常のモデル予測制御(Model predictive control; MPC)と同じですので,MPCを知っているとMIMOシステムへの拡張は容易です.
MIMOシステムのPFC
SISOシステムでのPFC
以前の記事で述べたとおり,PFCではシステムの応答を自由応答と強制応答に分解します.
右辺第1項が自由応答,右辺第2項が強制応答です.
\begin{align}
\left[ \begin{array}{c}
y(k+h_{1}) \\
y(k+h_{2}) \\
y(k+h_{3})
\end{array} \right] = \left[ \begin{array}{c}
CA^{h_{1}} \\
CA^{h_{2}} \\
CA^{h_{3}}
\end{array} \right] x(k) + \left[ \begin{array}{ccc}
G_{0}(h_{1}) & G_{1}(h_{1}) & G_{2}(h_{1}) \\
G_{0}(h_{2}) & G_{1}(h_{2}) & G_{2}(h_{2}) \\
G_{0}(h_{3}) & G_{1}(h_{3}) & G_{2}(h_{3})
\end{array} \right] \left[ \begin{array}{c}
\mu_{0} \\
\mu_{1} \\
\mu_{2}
\end{array} \right]
\end{align}
ここで,, はシステムの状態方程式表現での係数行列,は予測ホライズン上の一致点(参照点),は基底函数(Basis function)で操作量を表します.
Basis functionにおいて,,,はそれぞれステップ,ランプ,パラボラ入力を表します.
または,操作量を与えたときの一致点時点でのプラント出力を表します.
たとえば,とすると,は「ゼロ状態からステップ入力を与えた際の20サンプル先のシステム出力」を表します.
PFCの文献の多くはシステムを伝達函数で表現していますが,このような状態方程式ベースで書いておくと拡張は容易です.
MIMOシステムへの拡張
MIMOシステムへの拡張は簡単で,2入力2出力システムの場合は自由応答と強制応答を以下のように(文字通り)拡張するだけです.
\begin{align}
\left[ \begin{array}{c}
y_{1}(k+h_{1}) \\
y_{2}(k+h_{1}) \\
y_{1}(k+h_{2}) \\
y_{2}(k+h_{2}) \\
y_{1}(k+h_{3}) \\
y_{2}(k+h_{3})
\end{array} \right] &= \left[ \begin{array}{c}
CA^{h_{1}} \\
CA^{h_{2}} \\
CA^{h_{3}}
\end{array} \right] x(k) \\
& + \left[ \begin{array}{cccccc}
G_{110}(h_{1}) & G_{120}(h_{1}) & G_{111}(h_{1}) & G_{121}(h_{1}) & G_{112}(h_{1}) & G_{122}(h_{1}) \\
G_{210}(h_{1}) & G_{220}(h_{1}) & G_{211}(h_{1}) & G_{221}(h_{1}) & G_{212}(h_{1}) & G_{222}(h_{1}) \\
G_{110}(h_{2}) & G_{120}(h_{2}) & G_{111}(h_{2}) & G_{121}(h_{2}) & G_{112}(h_{2}) & G_{122}(h_{2}) \\
G_{210}(h_{2}) & G_{220}(h_{2}) & G_{211}(h_{2}) & G_{221}(h_{2}) & G_{212}(h_{2}) & G_{222}(h_{2}) \\
G_{110}(h_{3}) & G_{120}(h_{3}) & G_{111}(h_{3}) & G_{121}(h_{3}) & G_{112}(h_{3}) & G_{122}(h_{3}) \\
G_{210}(h_{3}) & G_{220}(h_{3}) & G_{211}(h_{3}) & G_{221}(h_{3}) & G_{212}(h_{3}) & G_{222}(h_{3}) \\
\end{array} \right] \left[ \begin{array}{c}
\mu_{10} \\
\mu_{20} \\
\mu_{11} \\
\mu_{21} \\
\mu_{12} \\
\mu_{22}
\end{array} \right]
\end{align}
ここではシステムの番目の出力,はシステムの番目の操作量を表します.
たとえば先で述べた一致点を利用すると,は「ゼロ状態からシステムの2番めの入力としてステップ入力を与えた際の,20サンプル先でのシステムの1番目の出力」となります.(いわゆる干渉項です)
より単純な例として,一致点を1点,basis functionをステップのみとした場合には以下のような式が得られます.
左上の要素のみが残るようなイメージです.
\begin{align}
\left[ \begin{array}{c}
y_{1}(k+h) \\
y_{2}(k+h) \\
\end{array} \right] = \left[ \begin{array}{c}
CA^{h} \\
\end{array} \right] x(k) + \left[ \begin{array}{cc}
G_{110}(h) & G_{120}(h) \\
G_{210}(h) & G_{220}(h)
\end{array} \right] \left[ \begin{array}{c}
\mu_{10} \\
\mu_{20} \\
\end{array} \right]
\end{align}
Basis functionの次数を1にしたときの2入力2出力システムの強制応答は下図のようになります.
サンプリング周期s,一致点はの3点を想定しています.
実際には一致点は立ち上がりの範囲で取ることが多く,この例だと最大でもくらいかと思います.
これらの強制応答は,シミュレーションによって得ることもできますし,以下のように畳み込みで解析的に求めることもできます.
\begin{align}
G_{*20}(h_{2}) =\left[ \begin{array}{cccccc}
CA^{h_{2}-1}B & CA^{h_{2}-2}B & \cdots & CA^{2}B & CAB & CB
\end{array} \right] \left[ \begin{array}{c}
\left[ \begin{array}{c}
0 \\
1
\end{array} \right] \\
\left[ \begin{array}{c}
0 \\
1
\end{array} \right] \\
\vdots \\
\left[ \begin{array}{c}
0 \\
1
\end{array} \right]
\end{array} \right]
\end{align}
通常のMPCでは右辺の横長の行列をさらに縦に並べたToeplitz行列を保持しますが,PFCでは畳み込まれたあとの結果だけでよいため,メモリの使用量と計算負荷が小さいという特徴があります.
シミュレーション(MATLAB/Simulink)
対象とするシステム
ここで対象とするシステムは,以下のような単純な2自由度のSpring-mass-damperシステムです.
両質量の位置が測定できるものとしています.
状態方程式
\begin{align}
\frac{d}{dt} \left[ \begin{array}{c}
x_{1} \\
x_{2} \\
\dot{x_{1}} \\
\dot{x_{2}}
\end{array} \right] = \left[ \begin{array}{cccc}
0 & 0 & 1 & 0 \\
0 & 0 & 0 & 1 \\
-\frac{K_{1}+K_{2}}{M_{1}} & \frac{K_{2}}{M_{1}} & -\frac{D_{1}+D_{2}}{M_{1}} & \frac{D_{2}}{M_{1}} \\
\frac{K_{2}}{M_{2}} & -\frac{K_{2}}{M_{2}} & \frac{D_{2}}{M_{2}} & -\frac{D_{2}}{M_{2}}
\end{array} \right] \left[ \begin{array}{c}
x_{1} \\
x_{2} \\
\dot{x_{1}} \\
\dot{x_{2}}
\end{array} \right] + \left[ \begin{array}{cc}
0 & 0 \\
0 & 0 \\
\frac{1}{M_{1}} & 0 \\
0 & \frac{1}{M_{2}}
\end{array} \right] \left[ \begin{array}{c}
f_{1} \\
f_{2}
\end{array} \right]
\end{align}
観測方程式
\begin{align}
\left[ \begin{array}{c}
x_{1} \\
x_{2}
\end{array} \right] = \left[ \begin{array}{cccc}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0
\end{array} \right] \left[ \begin{array}{c}
x_{1} \\
x_{2} \\
\dot{x_{1}} \\
\dot{x_{2}}
\end{array} \right]
\end{align}
ここでは,,,などすべての値はに設定しています.
ブロック図
MIMO PFCのブロック図は以下のようになります.
Plantが制御対象を,controlPFC_MatFuncがPFCのコントローラを表します.
また,操作量はSaturationによって,ある一定値を超えないように制限されています.
制御対象には入力側と出力側それぞれにステップ状の外乱を与え,外乱に対する応答性能も確認します.
シミュレーション結果
サンプリング周期を(s),希望する閉ループ応答時間を(s),basis functionの次数をとしたときの応答が下図です.
上から操作量,外乱,質量位置の応答となっています.
このシステムでは干渉項が比較的大きいため,出力1の立ち上がり時に出力2が,出力2の立ち上がり時に出力1が変動しやすいシステムです.
それでもPFCによって干渉項による変動は上手く抑制されていることが見て取れます.
遅れ補償
PFCにおいてもMPCと同様に,将来の目標値を利用した遅れの補償が可能です.
例えば正弦波状の目標値を持つ場合,目標値への遅れを低減する方法として,
- コントローラのゲインを上げる
- ZPETC(Zero phase error tracking controller)を利用する
- スミス予測器を利用する
などがあります.
古典的なロボットアームではコントローラをハイゲインにすることで遅れを低減していますが,ゲインに応じて目標値からの遅延量が変化する(ゲインを上げるほど遅延量が小さくなる)ため目標値の遅れがどの程度であるか評価することは困難です.
ZPETCはシステムモデルの安定な零点のみを利用して逆システムを構成し,位相遅れを補償する方法です.
スミス予測器による方法は,システムおよびコントローラのモデルを利用して,純時間遅れを補償し閉ループ安定性を向上する方法です.
MPCによる遅れ補償は後者の2つに近い原理で,システムの内部モデルを利用することで特別な操作なしに遅れを補償することが可能です.
通常の追従特性
上図はPFCでの希望する閉ループ応答時間としたときの正弦波状目標値に対する応答です.
目標値に対して遅れが生じていることがわかります.
ハイゲインでの追従特性
上図はと小さくとり,ハイゲインにした状態での応答です.
ハイゲインにすることで遅れ自体は小さくなっていますが,遅れは残っています.
将来の目標値を利用した場合の追従特性
上図は将来の目標値を利用した場合の応答です.
このときですが,目標値に対する遅れはほとんど生じていないことがわかります.
コントローラの操作としては,目標値を遅延させて入力しているだけです.
このようにPFCで将来の目標値を利用することで比較的簡単に追従遅れを補償することが可能です.
また,純時間遅れがあるような系に対しても同様のアプローチを用いることができることも利点です.
この結果はSimulink project形式でGithubにアップロードしています.
PFCコントローラ内部のコードはすべてmファイルで記述しているため,主要な計算はテキストエディタで確認することができます.