2017年12月22日金曜日

Predictive Functional Controlの実装

この記事は制御工学アドベントカレンダー22日目の記事です.

この記事では,以下について言及しています.

  • Predictive Functional Controlとは?
  • 概念
  • 実装
  • シミュレーション(MATLAB/Simulink)

Predictive Functional Controlとは?

まずはじめに,Predictive Functional Control (PFC)とは何者か?についてです.

PFCとはモデル予測制御(Model Predictive Control; MPC)のひとつです.Richaletによって提案されました.
Richaletは著書でPFCはPID制御に置き換わる制御則に成り得るのではないかと主張しています.

Predictive Functional Control, Principles and Industrial Applications - Springer

モデル予測制御の分類については制御工学アドベントカレンダー20日目を執筆されています,MyEnigmaさんのところが詳しいのではないかと思います.

制御工学アドベントカレンダー20日目の記事
Model Predictive Control:MPC (モデル予測制御)の技術分類 - MyEnigma


PFCがPIDに置き換わる理由(根拠)ですが,PFCが以下のような特徴を持っているためのようです.

  • 計算負荷が極めて軽量
  • チューニングが簡単
  • 入力制約を取り扱える
  • 高次の目標値に対してオフセットフリー特性を有する

実際のところ,3つ目と4つ目の項目については通常のMPCも持っている特徴です.

もともとMPCは化学プラントなどの比較的,実行周期の遅い系に対して適用されてきました.
MPCは最適化問題を周期ごとに解く必要があるため,応答の速いメカトロニクス系への適用は困難でした.
しかし近年のCPUなどのハードウェアの進歩や,最適化問題を解くためのアルゴリズムの発展により,自動運転車やロケット燃料の自動着陸などのメカトロニクス系にも適用されるようになってきました.

モデル予測制御(Model Predictive Control:MPC)の応用例 - MyEnigma

これらは複数のアクチュエータが,それぞれ異なる応答性や入出力制約を有する複雑なシステムであり,目的とする応答を達成するためには,それぞれのアクチュエータにどれだけの操作を与えるべきか高度な制御を行う必要があります.
まさしくMPCの出番というべき制御対象です.

一方で,システムの構造自体は単純なものの,MPCの持つ入力制約の取り扱いや目標値へのオフセットフリー特性などを利用したい場合があります.

アクチュエーションの分野です.


アクチュエーションというと広いですが,ここではモータや油圧/空圧シリンダの位置サーボ制御や,ヒータによる温度制御などの低レイヤーな制御を指します.

これらの低レイヤーな制御では,未だに殆どがPIDで制御されているのではないでしょうか.

低レイヤーな制御では特にロバスト性応答速度の速さ(周波数帯域の広さ),計算負荷の小ささが要求されます.

ここで,(私たちがよく遭遇し,たびたび頭を悩ませる)次のような制御系を考えます.

  • 比較的長いむだ時間を有する
  • 入力制約がある(たとえば定格電圧が10Vである,など)
  • 目標値が高次または高速であり位相遅れが生じる

System

こういった場合,従来の(PIDでの)アプローチとしては以下のようなものがあります.

  • スミス補償器でむだ時間を補償する
  • 入力制約による積分器のワインドアップを,アンチワインドアップ(補償器)によって防止する
  • 零位相誤差追従制御(ZPETC)によって,追従による位相遅れを補償する

実際のところ,これらを個別で設計することは割と面倒です.
MPCではこれらを統一的な枠組みで考えることができ便利なため,アクチュエーションの分野にも適用したくなってきます.

先ほど挙げたスミス補償器やZPETCはモデル規範(Model-based)なアプローチであり,内部に制御対象の運動モデルを組み込むことで補償を実現しています.
いちばんの面倒事である運動モデルが必要ならMPCでいいじゃないか,とは思いませんか?

そこで,MPCの良さである制約の取り扱い / むだ時間の補償 / 高次目標値への高い追従性能は残しつつ,全体的に簡略化 / 軽量化したPredictive Functional Controlはどうか,ということになります.

2017年12月15日金曜日

数式処理ソフトウェアで立式した運動方程式をSimulinkで実行する

この記事は制御工学アドベントカレンダー15日目の記事です.

制御工学で避けては通れないのが運動方程式の立式です.
プラントモデリングではもちろんのこと,現代制御に代表されるモデルベース制御では制御ロジックを構築するために運動方程式(状態方程式)が必要になります.

運動方程式の立式というと,ほぼラグランジュ法(オイラー=ラグランジュ方程式)一択のような気がしています.

いまいちこのあたりの用語を掴みきれていないのですが,汎函数と呼ばれる“函数を変数とした函数”を変分(汎函数での微分)することで運動方程式を求めるといった流れです.

たとえば,函数と呼ばれ,という操作が微分と呼ばれることはご存知のとおりです.
それと似たような関係で,汎函数と呼び,変分と呼ぶようです.

物体の運動の場合,最も必要エネルギの少ない方向に物体が運動するという原理があるらしく(最小作用の原理?),以下の形式で与えられます.

特に運動の場合は,右辺をラグランジアンというエネルギ量で与えるようです.
合っている自信はないですが,以下の式のようなイメージです.(時間微分なのでドットで書いています)

これはある時刻からまでのエネルギの合計となります.
上の式が最小になるようにすれば良いということで,の変分(微分)がゼロとなるような(停留値)を求めれば良いことになります.

この解(停留値)は決まっていて,これをオイラー=ラグランジュ方程式と呼びます.

解の形式が決まっているのでシーケンシャルに解けて便利なのですが,非常に計算量が多いです.

前置きが長くなりましたがこれを数式処理ソフトウェアで楽にしようというのが今回のコンセプトです.


この記事では数式処理ソフトウェアとして以下を使用しています.

  • wxMaxima(Windows版Maxima,無償)
  • Symbolic Math Toolbox(MATLAB,有償)

恐らく運動方程式を求めたあとはMATLAB/SimulinkとかPyControlとかでシミュレーションすることになると思うのですが,結論としてはwxMaxima優位といった印象です.


今回,2重振り子を例として,Simulinkでのシミュレーションまでやってみようかと思います.
Fig1 Fig2

ラグランジュ法では物体の運動エネルギ,位置エネルギの関係を与えてあげることが必要になります.
逆に言うとエネルギまで出せてしまえばあとはソフトウェア任せにできます.

事前にやってみたところ,wxMaximaのインストールから結果確認まで45分程度で終わりました.

2017年12月9日土曜日

最適化函数を使って船を横移動させてみる

この記事は制御工学アドベントカレンダー9日目の記事です.
さいきん,仕事の方で船に関わることが多いので船の動きも面白いよ,と布教してみる.
船,とひとくちに言ってもタンカーなどの超大型船から客船,個人所有のクルーザー,漁船までいろいろ種類があります.
また,推進方法によっても船内にエンジンを積んだ船内機艇,エンジンごと取り外し可能な船外機艇,ジェット推進の艇などの種類があります.
ここではクルーザーなどに多く使われる下図のような船外機艇(Outboard motor)に焦点を当ててみます.
Boat
Mercury社のウェブページ
図の船は船外機が2つ取り付けられています(2機掛けと呼びます)が,最大で5つ取り付ける方もいるようです.
250馬力を5機掛け.パワーの面でも価格の面でも恐ろしいですね.

その船外機艇のなかでも面白いなあと思ったものがMercury社のSkyhookというJoystick操船システムです.
1分34秒あたりを見るとわかりやすいですが,着岸状態から船がほぼ真横に移動しています.

Mercury Joystick Piloting for Outboards
通常,船外機は何機掛けであろうと同じ方向を向かせて舵を切るのですが,この操船システムではそれぞれの船外機を独立させて反対方向に動かすことで横移動を実現しています.
このSkyhookを再現するため,最適化函数を使って遊んでみようというのがこの記事の趣旨です.
環境はMATLAB/Simulink R2015aです.

2017年9月19日火曜日

C/GMRESによる非線形モデル予測制御1

今回は珍しく2部構成で,本記事ではシステムの立式から評価函数の設定まで,次の記事では具体的な解き方について述べます.

第1部となる本記事ではC/GMRESの核となる部分には言及しないため,そちらについては2部以降を見ていただければと思います.


非線形モデル予測制御(Nonlinear Model Predictive Control; NMPC)とは,その名の通り”状態方程式が非線形なシステム”に対するモデル予測制御(Model Predictive Control; MPC)です.

最近流行りの制御則で,車の自動運転やロケットの再着陸システムにも使用されているそうです.

MyEnigmaさん
モデル予測制御(Model Predictive Control:MPC)の応用例

そもそも制約有りのMPCは非線形な制御系ですが,”非線形MPC”といった場合には“制御対象が非線形”な系を指すように思います.

線形のモデル予測制御については別途,記事に起こすつもりです.

通常,線形MPCでは,システムの表現に以下のような線形な状態方程式を使うのに対して,

非線形MPCでは状態方程式の形式を問わず使用でき,以下のような形式で表現されます.

これはセミアクティブダンパの状態方程式ですが,式中にという“状態変数と操作量の積”が含まれています.少し考えるとわかりますが,線形の状態方程式に書き直すことはできません.

実際,このシステムを制御する際に単純に線形MPCを適用することはできません.
このような,非線形なシステムの制御を目的としたMPCが非線形MPCです.

非線形MPCの中にも種々ありますが,ここではC/GMRESによる非線形MPCについて取り上げます.

ただ,このシステムは減衰が操作量なのでダンパとして動作させること自体はPID等でも可能です.というよりずっとONにしておけばよいのです.しかし,できるだけ少ない操作量で最大の減衰を得よう,などと考え始めるとちゃんと制御する必要があります.

2017年4月21日金曜日

カルマンフィルタの基礎式を代数とベイズ定理から見る

カルマンフィルタの歴史ももう長いことと思いますが,各所で各人なりにまとめられているあたり,なかなか理解の難しいものなんだなあと感じています.
例に漏れず自分もカルマンフィルタの原理がいまいちピンとこなかったので自分なりにまとめてみました.

カルマンフィルタ(Kalman Filter)はフィルタと名付けられてはいますが,使われ方としてはフィルタよりも現代制御のオブザーバ(Observer; 状態推定器)に近いような気がします.
観測した情報から,状態ベクトルが真値に最も近くなるように推定するものです.

概念は以下のところでわかりやすく説明されています.

モノを作りたくなるブログ

シンプルなモデルとイラストでカルマンフィルタを直感的に理解してみる

ただ,数式として少し省略されているところもあったので,改めてまとめるに至りました.
基本的に,代数とベイズの定理のみから丁寧に導出していこうという感じです.

カルマンゲインの式の導出,予測値の算出,分散の更新は天下り的な部分も多いので,今回はこれらの導出に焦点を当ててみました.
統計的にみて,予測値と実プラントの誤差が最小となるように演繹的に求めていくとカルマンフィルタの式に行き着くあたり,統計学の応用先の代表例になっているだけのことはあるなあ,という感想です.

ここでは,状態空間と観測空間が同一の場合のみ扱います.

2017年4月14日金曜日

4ストロークエンジンの物理モデル

4ストロークのガソリンエンジンの物理モデリングをしてみました.
シミュレーションはMATLAB/Simulink,可視化ツールはProcessingです.

参考元はこのあたり.
双方ともに高知工科大学の磯村先生の文献です.

4 サイクルガソリンエンジンの動特性について

並列計算機によるエンジンのシミュレータ開発


以前にも倒立振子とかパーティクルフィルタでのグリッドマップマッチングとか2リンク平面マニピュレータとかのモデリングをやってきたのですが,そのどれとも色が違うなあ,ということで.

例によって,ラグランジュ法で運動方程式を立てます.
このあたりは参考文献の上の方が詳しいかな.

2016年10月2日日曜日

シンプルな外乱オブザーバ

外乱オブザーバ(Disturbance observer; DOB)はフィードバックシステムに外乱が加わるような状況で,比較的簡単に外乱を除去し安定化できる強力なツールですが,ウェブにはあまり記述が無いようだったので書いてみました.

  • 外乱オブザーバとは?
  • なぜ外乱オブザーバが必要なのか
  • 基本原理
  • 実際の外乱オブザーバ(ノミナルモデル,ローパスフィルタ)

そもそも外乱オブザーバとは?

“外乱”でググってみると,以下のような説明が得られます.

ある通信系に、所定の信号系以外から加わり妨害となる信号。 --- 大辞林

大体内容としては間違いないですが,今回扱うのは”通信系”に限らず,制御システムに対してはたらく,妨害となる信号くらいに留めておきます.

外乱オブザーバとは,このような外乱を除去するために,制御系のコントローラに組み込む補償器のひとつです.


なぜ外乱オブザーバが必要なのか

次のような1次遅れ系のフィードバックループを考えてみます.

system

ここで,はコントローラ,は制御対象です.また,目標値を,出力をで表します.
外乱というと,図の1, 2, 3番の箇所に加わることが想定されますが,本稿では1について記述します.

また,以下の理由で2, 3番を省いています.

2番の部分に入力される外乱は,フィードバックループを構成する主な目的のひとつのため,比較的簡単に除去(補償)できる.
3番については,システム自体は目標値通り動作している(外乱によって我々使用者が目標値どおりに動作しているか確認できないだけの状態)ため.

1番は,コントローラは制御対象を最適に動作させるための操作量を正常に生成できているが,それが外乱によって変えられ制御対象に入力されてしまっている状態です.

つまり,PIDなどのコントローラを適切に設計しても,設計通りの操作量が制御対象に入力されないということです.

今回はこの外乱を除去する外乱オブザーバについて述べていきます.

ここでは,"最適な操作量"は設計時に想定している操作量を指します.
最適レギュレータなどの最適とは根本的に異なる内容ですのであしからず.