【Pythonで制御工学】Python-controlを試してみた
はじめに
こんにちは、がんがんです。高専に所属していたときは制御系の学科にいました。
そのため、Pythonで制御工学を実行するPython-control
が少し気になりました。
今回は環境の導入を行い、実際に動かした際の備忘録になります。
追記【2019.04.29】
GitHubのリンクを追加しました。
github.com
追記【2019.01.15】
ありがたいことに
鹿児島大学生 Advent Calendar 2018の20日目に参加させて頂きました。
コメント、ミスなどあれば指摘のほどよろしくお願いします。
環境
環境は以下の通りです。OSによりインストール方法が異なるようなので注意が必要です。
・Windows10(64bit) ・Python 3.6.4
Python-controlのインストール
Windowsなので、こちらの記事を参考にインストールしていきます。
algorithm.joho.info
一応Linuxの参考記事も貼っておきます。
qiita.com
まずはslycotのwhlファイルを以下のサイトよりダウンロードします。
Python Extension Packages for Windows - Christoph Gohlke
ダウンロードしたら、ファイルを展開してあげます。
pip install slycot-0.3.3-cp36-cp36m-win_amd64.whl
controlの方はpipコマンドで簡単にインストール可能です。
pip install control
これで環境のセットは完了です。
ボード線図の作成
まずは以下を参考にボード線図を作成します。
algorithm.joho.info
コード
from control.matlab import * import matplotlib.pyplot as plt # 伝達関数のパラメータ num = [2, 5, 1] # 分子の係数 den = [1, 2, 3] # 分母の係数 sys = tf(num, den) # 伝達関数モデルの作成 bode(sys) # ボード線図のプロット plt.show()
結果
ナイキスト線図の作成
次はナイキスト線図を作成します。
algorithm.joho.info
コード
from control.matlab import * import matplotlib.pyplot as plt # 伝達関数のパラメータ num = [2, 5, 1] # 分子の係数 den = [1, 2, 3] # 分母の係数 sys = tf(num, den) # 伝達関数モデルの作成 nyquist(sys) # ボード線図のプロット plt.show()
結果
PID制御
以下を参考にPID制御を実行してみたいと思います。
algorithm.joho.info
コード
from control.matlab import * import matplotlib.pyplot as plt import numpy as np def main(): # パラメータ Kp = 0.6 # 比例 Ki = 0.03 # 積分 Kd = 0.03 # 微分 num = [Kd, Kp, Ki] den = [1, 0] K = tf(num, den) # 制御対象 Kt = 1 J = 0.01 C = 0.1 num = [Kt] den = [J, C, 0] G = tf(num, den) # フィードバックループ sys = feedback(K*G, 1) t = np.linspace(0, 3, 1000) y, T = step(sys, t) plt.plot(T, y) plt.grid() plt.axhline(1, color="b", linestyle="--") plt.xlim(0, 3) plt.show() if __name__ == '__main__': main()
結果
参考記事通りにしているため、1に収束していきます。
まとめ
今回はPythonで制御工学を行えるPython-Control
を試してみました。
自分が勉強したものをこういう形でいじったりできるのは、個人的にすごく楽しいです。
PID制御のほかにも、P制御やPD制御などいろいろ実験してみようと思います。