LoginSignup
1
2

More than 3 years have passed since last update.

Python-LEGO MindstormsでPIDライントレース

Last updated at Posted at 2020-12-04

今回はLEGO Mindstorms EV3(以降EV3)のPython環境であるev3dev2で提供されているPID走行のメソッドを利用して
PID走行を行う。
今回利用するメソッドではセンサーなどの割り込み制御(センサーで検知したら停止など)ができなかったので、次回はメソッドを利用しないでPID走行を行う内容を投稿する。

EV3について

教育版 LEGO® MINDSTORMS EV3

本記事内での環境

環境構築やソースコードの作成、実行はこちら

今回利用するEV3のモデル

今回はEV3を走行させるためにベースロボというモデルでモーターを利用して走行を行う。
80.png

PID走行の参考

以下の記事やページを参考にした。

ソースコード

pid-1.py
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値を調整した。

IMAGE ALT TEXT HERE

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2