Emileの備忘録

色々な事をだらだらと

FRITによるデータ駆動型制御器チューニング

この記事ではFRITの手続きと「なぜそれで上手く行くのか?」を軽く軽く説明します。



1.はじめに

人間、10年・20年も生きていれば何度も制御器のパラメータを調整する機会があると思います。(要出典)

自分もNHKロボコンで延々とPIDのパラメータチューニングをしていた記憶があります。
人力で調整するのって嫌じゃないですか? 私は嫌です。

この記事では自動でパラメータを調整する手法について説明します。


2.FRITとは?

FRIT(Fictitious Reference Iterative Tuning)とは,
実際のシステムへの入力と出力の1組の時系列データのみを用いて,
オフラインで制御器のパラメータ調整を行う手法.

閉ループ系を安定化する制御器のパラメータを一つ見つければ,
そのパラメータでの入出力データを用いて, 目標応答に近い応答をする制御器のパラメータを計算できる.


何度も制御対象に入力を加えてデータを回収したりする事無くパラメータを調整できる所が嬉しい.
閉ループ系での応答でパラメータ計算を行うので, 単体では不安定な制御対象にも適用できる.
非線形計画になる事と初期パラメータが必要な事が難点.


類似した手法としてVRFTが知られる.


問題設定

下のFig. 1のようなシステムを考える.

Fig. 1 : システム構造

制御対象 Gは線形時不変で動特性は未知, 制御器 C C(\rho, z) = \dfrac{b_\mu z^\mu + + ... + b_1 z + 1 }{a_\nu z^\nu + ... + a_1 z + a_0}として、
 \rho = \begin{bmatrix} a_0 & ... & a_\nu & b_1 & ... & b_\mu \end{bmatrix}を調整可能なパラメータとする.


このシステムの応答を目標応答  y_d = T_d r に近づける事を目的とする.
( T_d : 目標応答伝達関数)



FRITの具体的な手続き

初期パラメータを \rho_{ini}とする.

1. 制御器 C(\rho_{ini})によってFig. 1のシステムを制御した時の実際の入出力データを収集する
(入出力データをそれぞれ u_{ini} := u(\rho_{ini}),\ \ y_{ini} := y(\phi_{ini})と置く. )

(※ 参照信号  r から出力  y までの閉ループ伝達関数 T(\rho) = \dfrac{ GC(\rho) }{ 1+GC(\rho) }と書けるので,
対象への入力  u 及び出力  y についても  \rho をパラメータとした関数と見なせる.)


2. 評価関数 J_F(\rho) := ||y_{ini} - T_d \tilde{r}(\rho)||^2を最小化するパラメータ  \rhoを求める.
ただし疑似参照信号  \tilde{r}(\rho) \tilde{r}(\rho) := C(\phi)^{-1}u_{ini} + y_{ini} と定義する.


以上の手続きがFRITのアルゴリズムである.



なぜこれで上手く行くのか(概略)

 y_{ini} (= T(\rho) \tilde{r}(\rho))  T_d \tilde{r}(\rho) を近づける事で,  T_d T(\rho) を近づける感じのイメージ.


まず疑似参照信号  \tilde{r}(\rho) については,  y_{ini} = Gu_{ini}より, 一般の \rhoについて
 T(\rho)\tilde{r}(\rho) = \dfrac{GC(\rho)}{1+GC(\rho)} \tilde{r}(\rho) = \dfrac{Gu_{ini} }{1+GC(\rho) } + \dfrac{ GC(\rho) }{1+GC(\rho) }y_{ini} =  \dfrac{ 1 + GC(\rho) }{1+GC(\rho) }y_{ini} = y_{ini} が成立.


 J_F(\rho^*)=0が成立する場合
 J_F(\rho^*) = 0なる  \rho^* については,  y_{ini} = T_d \tilde{r}(\rho^*) が成立するので,
 y_{ini} = T(\rho^*) \tilde{r}(\rho^*) = T_d \tilde{r}(\rho^*) となる.


同じ信号  \tilde{r}(\rho^*) に対して同じ出力  y_{ini}を出力している事から,
システムの伝達特性も \tilde{r}(\rho) の帯域で同じ特性を持つと言える.

以上から,  C(\rho^*)を実装して, 元の参照信号  r を印加する事で  y(\rho^*) = \dfrac{ GC(\rho^*) }{ 1+GC(\rho^*) } \simeq T_d r となる.


 J_F(\rho) = 0となる  \rho が存在しない場合
これは  T_d T(\rho) = \dfrac{GC(\rho)}{1+GC(\rho)}で表せる  T(\rho) の集合に含まれない場合に対応する.
(例えばPID制御器を用いると, その表現力ゆえにほとんどの場合には  T_d は上記の集合に含まれない. )

 \tilde{r}(\rho) = \dfrac{1}{T(\rho)}y_{ini} を用いて,  J_F(\rho) = \| y_{ini} - T_d \tilde{r}(\rho) \|^2 = \left\| \left(1 - \dfrac{T_d}{T(\rho)} \right) y_{ini} \right\|^2 と書き換えると,

これは初期データの下での  T_d T(\rho) の相対的誤差の最小化と解釈できる.


また, Parsevalの定理を用いて変換すると, 離散時間フーリエ変換 z = e^{i\omega}としたZ変換に対応する事から,
 J_F(\rho) = \dfrac{1}{2\pi} \int_{-\pi}^\pi \left\| \left( 1 - \dfrac{T_d(e^{i\omega})}{T(\rho, e^{i\omega})}  \right) Y_{ini}(e^{i\omega}) \right\|^2 d\omegaとできるので,
 Y_{ini}(e^{i\omega}) が大きくなる周波数帯域での  T_d T(\rho) の相対的誤差の最小化と解釈できる.

この事から, パラメータの計算は初期データの周波数特性  Y_{ini}(e^{i\omega}) に大きく影響を受ける事が言える.




3.おわりに

対になる手法としてVRFTが知られています. (こちらは開ループ系に適用. 二次計画で解ける.)

Parsevalの定理周りがあまり詳しくないので説明が怪しいかもです.
(前提が抜けてたり, 間違いがあったりしたら教えて下さい)


(追記)
2023年のキャチロボ(ロボット競技)で実戦投入し,
円筒座標系アームの r, \theta制御用モーターの位置制御PIDゲインの調整に使用しました.

直感的な話ではありますが, 与えた目標応答に応じて良いパラメータが手軽に得られ,
(PIDなので)その後の調整も容易な非常に使い勝手の良い手法だと思います.


こちらの記事の実装が参考になります.
qiita.com



参考文献

www.jstage.jst.go.jp
(↑ここの説明を要約したものがこの記事に対応しています.)