【EV3で制御工学】PID制御によるMモータの速度制御⑥
前回の記事の続きです。
「PID制御によるMモータの速度制御」は、今回で最終回です。内容的には番外編です。
前回までのグラフ
前回までの内容で、各時刻でのMモータの速度を記録した、時系列データを取得していました。インテリジェントのプロジェクト内に「.rtf」という拡張子のついた「リッチテキストファイル」があると思います。このファイルをPCにアップロードしましょう。(手順は↓)
前回までは、以下の手順でデータをグラフにしていました。
「.rtf」という拡張子のついた「リッチテキストファイル」をWord等のワープロソフトで開く
「.txt」という拡張子の「テキストファイル」に変換して保存
拡張子を無理やり「.csv」に書き換えて「CSVファイル」に変換
Excel等のスプレッドシートソフトで開き、散布図のグラフを描く
Pythonできれいなグラフを描こう
今回は、Pythonを用いてグラフを作成します。ここでは、Pythonの環境構築については省略します。
今回は、pandasとmatplotlibというライブラリを使います。あらかじめインストールしておきましょう。作成するPythonファイルと同じフォルダに、「P.rtf」「PI.rtf」「PD.rtf」「PID.rtf」というファイルを置いておきましょう。
以下にコードを載せておきます。
import pandas as pd
import matplotlib.pyplot as plt
P_data = pd.read_csv("P.rtf")
PI_data = pd.read_csv("PI.rtf")
PD_data = pd.read_csv("PD.rtf")
PID_data = pd.read_csv("PID.rtf")
P_data_x = P_data[P_data.columns[0]]
P_data_y = P_data[P_data.columns[1]]
PI_data_x = PI_data[PI_data.columns[0]]
PI_data_y = PI_data[PI_data.columns[1]]
PD_data_x = PD_data[PD_data.columns[0]]
PD_data_y = PD_data[PD_data.columns[1]]
PID_data_x = PID_data[PID_data.columns[0]]
PID_data_y = PID_data[PID_data.columns[1]]
fig = plt.figure("Compare")
plt.axhline(50, color="black", linestyle="--")
plt.plot(P_data_x, P_data_y, linestyle='solid', marker='.')
plt.plot(PI_data_x, PI_data_y, linestyle='solid', marker='.')
plt.plot(PD_data_x, PD_data_y, linestyle='solid', marker='.')
plt.plot(PID_data_x, PID_data_y, linestyle='solid', marker='.')
plt.title("Speed Control")
plt.xlabel("time[s]")
plt.ylabel("speed[%]")
plt.xlim(0, 3)
plt.ylim(0, 60)
plt.grid()
plt.legend(["target","P", "PI", "PD", "PID"], loc = 'lower right')
plt.tight_layout()
plt.show()
本来はpandasのread_csv関数は、CSVファイルの読み込みを行う関数ですが、CSVファイルと同じカンマ区切りの形式で書かれたリッチテキストファイルの場合はそのままでも使えたので、そのようにしています。
このプログラムを実行すると、次のようなグラフが表示されます。
本コードは画面上にグラフを表示するまでにとどめていますが、適宜画像ファイル等として保存しましょう。
まとめ
今回はここまで。今回は、前回までに取得した時系列データを、Pythonを用いてきれいなグラフにしました。以上で「PID制御によるMモータの速度制御」はおしまいです。
この記事が気に入ったらサポートをしてみませんか?