このブログについて振り返ってみる

2024年4月26日金曜日

01. このブログについて

t f B! P L

そもそも

このブログを書き始めて1年になりました。
状態方程式によるモデル化から始まる現代制御の領域、カルマンフィルタ、モデル予測制御(MPC)あたりまで書きました。

あらためて、このブログを書こうと思った理由を振り返えると、
「制御工学を学び始めた頃の ”悶々” を解消する最初の一歩は、離散化手法だったかも」
を伝えてみたいと思ったからです。

とは言っても、制御工学のエキスパートでもない、かなり偏った人の意見として読んでいただきたいです。

さて、このブログについてでも書いたように、社会人になってから必要に迫られ、組み込みエンジニアに必要な制御工学を学んできました。

現代制御の領域は微分方程式と行列演算の組み合わせですから、凡人にはハードルが高く、さらに、それをどのようにデジタルシステムに実装するのかも理解困難で、なかなか先に進めない悶々とした状態に陥ります。

私のような凡人は、本に書かれた数式を見ただけでは、その振る舞いがイメージできないため数式の意味を実感できません。

実際に何かの手段で数式の振る舞いを確認しないと「あぁ、そういうことね」という実感が持てません。そういったところが悶々とする理由になっていたと思います。

そういった私の経験は30年以上前の話ですが、今でも制御工学を学び始めて同じように悶々とされている方は多いのではないかと思います。

”悶々” を解消する最初の一歩

制御工学に携わる方は、制御理論の研究や高度な制御の実機適用を業務にされるような制御エキスパートから、私のようにエキスパートではない人まで幅広いので、制御工学に対する立ち位置でアプローチはそれぞれ違いがあると思います。

例えば、微分方程式で表現した状態方程式は、オイラー法やルンゲ・クッタ法でそのまま数値計算することもでき、その振る舞いを確認することができます。

私の場合、その悶々とした感じが解消する最初の一歩となったのが、連続時間のモデルを離散時間で表したモデルに変換する離散化手法でした。

組み込みエンジニアが制御工学を使える技術にする場合は、デジタルシステムへの実装を前提として、状態方程式を離散時間で表した逐次式に変換するアプローチの方が次のステップに繋がっていくと思います。

状態方程式を離散時間で表した逐次式に変換

状態方程式\[\frac{dx(t)}{dt}=Ax(t)+Bu(t)\]離散化した逐次式\[x(t+\Delta t)=P x(t)+Q u(t) \]逐次式への変換方法はこちら → リンク で説明しています。

逐次式に変換すると、EXCELでも簡単に時間応答の確認(シミュレーション)ができるようになるだけでなく、オブザーバやカルマンフィルタ、モデル予測制御(MPC)のように、コントローラにモデルを実装する制御ロジックまで一気通貫できます。

モデルの時間応答の確認

例えば、バネマスモデルの時間応答の確認はこちら → リンク

オブザーバの演算式

オブザーバでは下記の演算式をコントローラに実装し、システムの内部状態を推定します。
\[\hat{x}_{(n+1)}=(P-G C) \hat{x}_{(n)}+G C x_{(n)}+Q u_{(n)}\]演算式にはシステムの離散時間モデルである PとQ を含み、制御対象のモデルそのものをコントローラに実装します。

オブザーバ → リンク 

カルマンフィルタの演算式

カルマンフィルタの予測値算出(事前推定)の過程では、下記の①②の演算式でシステムの状態変数 \(\hat{x}_{k|k-1}\) とシステムの推定誤差 \(\hat{\Sigma}_{k|k-1}\) を推定しています。

① \(\hat{x}_{k|k-1}=P\hat{x}_{k-1|k-1}+Qu_{k-1}\)

② \(\hat{\Sigma}_{k|k-1}=P\hat{\Sigma}_{k-1|k-1}P^T+G{\Sigma}_{w}G^T\)

オブザーバと同様に、演算式にはシステムの離散時間モデルである PとQ を含み、制御対象のモデルそのものをコントローラに実装します。

カルマンフィルタ → リンク 

モデル予測制御(MPC)の演算式

モデル予測制御(MPC)では、システムの離散時間モデルである PとQ を用いて予測ホライズン区間の状態方程式を作ります。

予測ホライズン区間の状態方程式

\[\begin{bmatrix} x(1) \\ x(2) \\ \vdots \\ x(n) \\  \end{bmatrix}=\begin{bmatrix} P \\ P^2 \\ \vdots \\ P^n \\  \end{bmatrix} x(0) +\begin{bmatrix}
Q & 0 & \cdots & 0 \\
PQ & Q & 0 \\
\vdots & \vdots & \vdots \\
P^{n-1}Q & P^{n-2}Q & \cdots & Q \end{bmatrix}
\begin{bmatrix} u(0) \\ u(1) \\ \vdots \\ u(n-1) \\  \end{bmatrix} \]
さらに、予測ホライズン区間の評価関数の最適解をQPソルバーで求める処理をコントローラに実装します。モデル予測制御(MPC)でもシステムの離散時間モデルである PとQ をコントローラに実装しています。

モデル予測制御(MPC) → リンク 

離散化の手法にも様々あります

検索してみると状態方程式を離散化する方法には、いくつかのアプローチがあるようです。主な方法として

  • ゼロ次ホールド(Zero-order hold, ZOH)
  • Tustin変換(双一次変換)
  • 前進差分と後退差分
  • パデ(Pade)近似

このブログでは、パデ(Pade)近似を使っていますが、Tustin変換(双一次変換)とパデ(Pade)近似は同じ近似式になります。参考 → リンク

連続時間システムの離散化手法の比較

離散化手法の精度の比較をされている ヤカンヒコウさん の記事です。
参考 → リンク

パデ(Pade)近似は、Bilinear/Tustinと同じ精度になると思われます。

組み込みエンジニア側に軸足がある場合、そのロジックをどうやってターゲット(コントローラ)に実装するのかが外せない視点になります。
一方、制御理論の研究や高度な制御の実機適用を業務にされる方は、また違う視点になると思います。

最後までお読みいただきありがとうございました。
なんだかこのブログの「あとがき」みたいになりました。


QooQ