2025年10月31日
026-1.SPIKEプライム Python入門(SPIKE App3)-第5回「比例微分制御を使ったライントレースロボット」
この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」と専用アプリ(SPIKEアプリ)を使った、Pythonのプログラミング方法について紹介します。原稿執筆時点のSPIKEアプリの最新バージョンは3.5.1です。(文/松原拓也)
◆ コースを自作する
比例微分制御は比例制御(P制御)と微分制御(D制御)の2つを組み合わせたものです。微分制御が得意としているのは、急激に曲がるようなラインのトレースです。そこで、普通のコースを使わず、オリジナルのコースを作ります。
フリーソフトの「OpenOffice Draw」を使ってコースを描きます。ラインの太さは2cm。用紙のサイズはA3にしました。
コースを描いたら「印刷」をメニュー選択して、pdfファイルで出力します。筆者はA3サイズのプリンターを持っていないので、「ネットプリント」で印刷しました。pdfファイルをネットプリントのWebサイト(https://www.printing.ne.jp/)で登録したら、コンビニ(セブンイレブン)でコピー機にプリント番号を入力すると印刷することができます。印刷代は20円でした。
プログラムを実行すると、コンソールに結果が表示されます。 「score」はスコアの平均値です。ラインの中心を走ることができたらスコアは100点です。ラインの中心からズレたら、その絶対値の4倍を減点します。4倍という値には根拠はなくて、点数にメリハリを付けるために大きくしました。
「score_count」はスコアの測定回数です。このプログラムでは1ループごとにスコアを測定しているので、測定回数とループ回数は同じです。 ループ回数は約7000回です。 1ループ=約1ミリ秒なので、コース1周の走行タイムは約7秒(7000÷1000)です。計算時間を考慮していないので少し誤差が生じます。
このプログラムでは1周=850mmと設定しているので、7000÷850=約8.23です。ロボットが1mm進むたびにラインを8回以上読み取っているという計算になります。
◆ 微分制御
微分ゲインの適切な値がわかりません。そこで、少しずつ微分ゲインを増やしてスコアを測定してみました。結果は次の通りです。
《微分ゲインが0の場合》
score:36
score_count:7018
《微分ゲインが500の場合》
score:40
score_count:7006
《微分ゲインが1000の場合》
score:41
score_count:7005
《微分ゲインが2000の場合》
score:41
score_count:6970
変化が微妙です。思ったよりもスコアが上がってくれません。 ほとんど比例制御でトレースできてしまうので、微分制御の活躍が少ないと考えられます。比例制御が主役で、微分制御は補助的に存在しています。
微分ゲインを増やすとscore_count(測定回数=走行タイム)がわずかながら少なくなっています。このプログラムではモーターの基本的な速度を固定していて、片方のモーターを速めたら、そのぶんもう片方が遅くなるという仕組みなので、走行タイムは変化しないはずです。なぜ速くゴールできるようになるのかが不明です。ライントレースの性能が上がって、無駄な走りが減った結果、タイムが縮んでいるのでしょうか?
プログラムを実行中の様子
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。







