今回はLEGO Mindstorms EV3(以降EV3)のPython環境であるev3dev2で提供されているPID走行のメソッドを利用して
PID走行を行う。
今回利用するメソッドではセンサーなどの割り込み制御(センサーで検知したら停止など)ができなかったので、次回はメソッドを利用しないでPID走行を行う内容を投稿する。
EV3について
本記事内での環境
-
PC
Windows10
Python 3.7.3
開発環境 VisualStudioCode -
EV3
ev3dev
APIリファレンス
環境構築やソースコードの作成、実行はこちら
今回利用するEV3のモデル
今回はEV3を走行させるためにベースロボ
というモデルでモーターを利用して走行を行う。
PID走行の参考
以下の記事やページを参考にした。
ソースコード
from ev3dev2.motor import OUTPUT_B, OUTPUT_C, MoveTank, SpeedPercent, follow_for_forever
from ev3dev2.sensor.lego import ColorSensor, TouchSensor
#インスタンスの生成
tank = MoveTank(OUTPUT_B, OUTPUT_C)
tank.cs = ColorSensor()
try:
tank.follow_line(
kp=3.2, ki=0, kd=2.5,
speed=SpeedPercent(30),
follow_for=follow_for_forever
)
except :
pass
tank.follow_line()
でPID走行を行う。引数としてkp(P値)
、ki(I)
、kd(D)
、Speed(%)
、走行オプション(今回は走行し続けるが秒数指定などが可能)
を指定している。
走行プションがfollow_for_forever
と指定すると、tank.follow_line()
から処理が抜け出せないためプログラムの強制終了でしか停止する手段等しか思いつかなかったため、次回はメソッド無しでPID制御を実装していく。
今回の動作としては以下のようになった。
I値は設定せず、P値をベースに設定しオーバーシュートの修正でD値を調整した。