みなさん,こんにちは
おかしょです.
マイコンを使ってロボットを制御する場合は,マイコンが一定の周期で動作するため動きが離散的となります.
そのため,制御器の設計の際にはモデルを離散化しなければ目的とする制御性能を得ることができません.
そこで,この記事では双一次変換という手法を用いて離散化をしてみたいと思います.
この記事を読むと以下のようなことがわかる・できるようになります.
- 離散化する方法
- 双一次変換とは
- 連続時間と離散時間の関係
この記事を読む前に
この記事では状態方程式を離散化します.
そもそも状態方程式を知らないという方は以下の記事で解説しているのでそちらを先に読んでおくことをおすすめします.
状態方程式とは
この記事では,例として状態方程式を離散化していきます.
状態方程式というのは運動方程式のように,システムの運動を表す方程式のことで以下のような形をしています.
\[
\dot{x} = Ax+Bu\\
y=Cx+Du \tag{1}
\]
上式において,\(x\)は状態量,\(u\)は入力,\(y\)は出力を表します.
また,\(A\)のことをシステム行列,\(B\)を入力行列,\(C\)を出力行列,\(D\)を直達行列と言います.
状態方程式の求め方を知りたい方は,以下の記事を参考にしてください.
マス・スプリング・ダンパーシステムの運動方程式の導出
線形連続時間システムの状態方程式はこのように表され,多くの参考書でもこの形を基にして解説がされています.
離散化をする計算方法
ここから,本題に入っていきます.
まず,(1)式の上の式をいじっていきます.
$$ \dot{x} = Ax+Bu $$
これから説明するにあたって,マイコンのサンプリング周期を\(T_s\)とします.
サンプリング周期というのは,マイコンの動作する周期やセンサーの動作する周期と考えてください.
任意の定数を\(k\)とした時,時刻が\(kT_s\)の時の状態量を先程の式を積分して求めます.
\[
x(kT_s) = \displaystyle \int_{0}^{kT_s} \{Ax(t)+Bu(t)\} dt \tag{2}
\]
次に,\(kT_s\)から1ステップ分進んだ\(kT_{s}+T_{s}\)の時の状態量を求めます.
\begin{eqnarray}
x(kT_{s}+T_{s}) &=& \displaystyle \int_{0}^{kT_{s}+T_{s}} \{Ax(t)+Bu(t)\} dt\\
&=& \displaystyle \int_{0}^{kT_s} \{Ax(t)+Bu(t)\} dt + \displaystyle \int_{kT_{s}}^{kT_{s}+T_{s}} \{Ax(t)+Bu(t)\} dt \tag{3}
\end{eqnarray}
ここで,(2)式を代入すると
\[
x(kT_{s}+T_{s}) = x(kT_s)+ \displaystyle \int_{kT_{s}}^{kT_{s}+T_{s}} \{Ax(t)+Bu(t)\} dt \tag{4}
\]
となります.ここで,右辺の第2項目の積分を台形則を使って近似します.
\[
x(kT_{s}+T_{s}) = x(kT_s)+ \frac{T_s}{2}\left[ \{Ax(kT_{s}+T_{s})+Bu(kT_{s}+T_{s})\}+\{Ax(kT_{s})+Bu(kT_{s})\}\right] \tag{5}
\]
\(kT_s\)や\(kT_s+T_s\)では見にくいので,それぞれを\([k]\),\([k+1]\)と書き換えます.
$$ x[k+1] = x[k]+ \frac{T_s}{2}\left[ \{Ax[k+1]+Bu[k+1]\}+\{Ax[k]+Bu[k]\}\right] \tag{6} $$
ここで,さらにZ変換というものをします.
Z変換とは,連続時間システムの伝達関数で言うところの”s”と同じような存在です.
連続時間システムでは”s”は微分を意味していましたが,離散時間システムでは”z”は1ステップ進むことを意味します.
つまり,\(x[k]\)は\(x(z)\)となり,\(x[k+1]\)は\(zx(z)\)となります.
これを利用すると,(6)式は
$$ zx(z) = x(z)+ \frac{T_s}{2}\left[ \{Azx(z)+Bzu(z)\}+\{Ax(z)+Bu(z)\}\right] \tag{7} $$
となります.ここからはこの式を整理していきます.
\begin{eqnarray}
zx(z) &=& x(z)+ \frac{T_s}{2}\left[ \{Azx(z)+Bzu(z)\}\{Ax(z)+Bu(z)\}\right]\\
(z-1)x(z) &=& \frac{T_s}{2} \{(z+1)Ax(z)+(z+1)Bu(z)\}\\
(z-1)x(z) &=& \frac{T_s}{2} (z+1)\{Ax(z)+Bu(z)\}\\
\frac{2(z-1)}{T_s (z+1)}x(z) &=& Ax(z)+Bu(z)\\
\left( \frac{2(z-1)}{T_s (z+1)} I -A \right) x(z) &=& Bu(z)\\
x(z) &=& \left( \frac{2(z-1)}{T_s (z+1)} I -A \right)^{-1}Bu(z) \tag{8}
\end{eqnarray}
このように状態量と入力の関係式を求めることができます.
これを(1)式の下の式に代入します.
\begin{eqnarray}
y &=& Cx+Du\\
&=& C\left( \frac{2(z-1)}{T_s (z+1)} I -A \right)^{-1}Bu(z) + Du(z)\\
&=& \left[ C\left( \frac{2(z-1)}{T_s (z+1)} I -A \right)^{-1}B + D\right] u(z) \tag{9}
\end{eqnarray}
これが離散化された状態方程式の入出力関係になります.
連続時間システムと離散時間システムの関係
連続時間システムの状態方程式(1)を用いて入出力関係を調べてみます.
まず,(1)式の上の式をラプラス変換します.
\begin{eqnarray}
\dot{x} &=& Ax+Bu\\
sx(s)&=& Ax(s)+Bu(s)\\
(sI-A)x(s) &=& Bu(s)\\
x(s) &=& (sI-A)^{-1} Bu(s) \tag{10}
\end{eqnarray}
これを(1)式の下の式に代入します.
\begin{eqnarray}
y &=& Cx+Du\\
y(s)&=& C(sI-A)^{-1} Bu(s)+Du(s)\\
y(s)&=& \{C(sI-A)^{-1} B+D\} u(s) \tag{11}
\end{eqnarray}
(9)式と(11)式を比較すると,次の関係があることがわかります.
$$ s = \frac{2(z-1)}{T_s (z+1)} \tag{12} $$
つまり,連続時間システムの状態方程式をラプラス変換し,(12)式を代入すれば簡単に双一次変換の離散化ができるということです.
まとめ
この記事では双一次変化を用いて状態方程式を離散化しました.
また,連続時間システムを簡単に離散化する方法も解説しました.
このような計算をすることによって,離散化したモデルを用いて制御系の設計ができるため,マイコンによる制御も問題なく行えるようになります.
ただし離散化した場合,システムが安定となるのは極の位置が単位円内にある時になるので,注意が必要です.
続けて読む
この記事では状態方程式を離散化しましたが,以下の記事では一次遅れ系を離散化する方法を解説しています.離散化の勉強をしている方は参考にしてください.
Twitterでは記事の更新情報や活動の進捗などをつぶやいているので気が向いたらフォローしてください.
それでは最後まで読んでいただきありがとうございました.
コメント