2025年1月27日

021-1.SPIKEプライムロボコン入門-第4回「PID制御を使ったライントレース」

この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」を使ってロボコンに挑戦するために必要な技術要素を紹介しています。
今回はロボコン競技の中で重要なライントレースにおいてPID制御を使った方法を紹介します。(文/藤本大貴 協力/株式会社PFU)

今回はライントレースを滑らかかつ確実に走らせるようにPID制御を取り入れてみます。
事前にP制御について紹介しているこちらの記事をご覧になっていると理解しやすい内容となっています。

はじめに簡易的な車体を用意します。
(ここではSPIKEプライム ラージハブを地面と水平になるように組み立ててください。)
本記事内の画像はクリックすることで拡大表示できます。

車体に使用しているハードウェア
・SPIIKEプライム ラージハブ
・Mモーター×2(E、Fポート)
・カラーセンサー(Bポート)

PID制御とはP(比例制御)、I(積分制御)、D(微分制御)の組み合わせで操作量を決める方法です。
以下の画像のような式で成り立っています。

それぞれの制御の役割は…
 ①比例制御⇒目標値に近づくときの値の振れ幅を小さくする
 ②積分制御⇒目標値からの最終的な誤差(オフセット)を小さくする
 ③微分制御⇒目標値に近づくための反応時間を短くする
それぞれの操作量はPID値の演算に利用する係数Kp,Ki,Kd値や演算を行うループの時間の値を変えて調整していきます。

下図がプログラム全体です。

プログラムはいくつかのマイブロックでまとめられた部分と、それらを呼び出している実行部分で作られています。
それぞれ分割して見てみましょう。

マイブロックを呼び出して、実際にPIDの計算が行われる実行部分です。
ここにあるマイブロックの引数であるP,I,Dの値が係数kp,ki,kdとなりの、演算内の係数を設定でき、カラーセンサーの反射光の値に応じてPIDの演算を行い、走行をするブロック「~の向きに移動開始する」に適応させています。

プログラム内で使用している変数の初期化を行うマイブロックです。
プログラムを実行すると、最初に呼び出されます。

P、I、D値をそれぞれ計算するマイブロックです。
カラーセンサーの目標値と実行部分で設定した係数を計算に利用しています。

求めたP、I、D値をあわせてライントレースに対するロボットの操作量を求めているマイブロックです。
操作量は、ロボットのステアリング値なので-100~100の間である必要があるため上限と下限も設定しています。

実行部分のkp,ki,kd値を調整して線に沿ったライントレースを目指してみましょう。
kp,ki,kd値の調整にはいくつかの方法がありますが、いずれも難解なので、係数の値は実際にロボットを動かしてみて調整してみましょう。

ki,kdの値を0にして、kpだけを設定してみましょう。ある程度線に沿って走れるkpの値を探します。
その後、kiを設定します。線からロボットが外れないような値を探して設定し、最後にkdを設定しましょう。ロボットがきれいに線に沿って走れるような値を探して設定すると良いでしょう。

PFU
協力:株式会社PFU

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。