体験授業予約受付中!詳しくはこちら

ライントレース~PID制御ってなに?~

  • URLをコピーしました!

ロボットプログラミングを学ぶ人にとって、比較的速い時期に学ぶものの一つにライントレースがあります。白い床に描かれた黒い線をロボットが辿っていく様子は見たことがある人も多いのではないでしょうか。プログラム初心者にとっては、黒線の形を変えても同じプログラムで黒線をしっかりと辿って進むロボットを不思議に感じることでしょう。

様々なデザインの目的の異なるライントレースロボットがありますが、とても滑らかにライントレースするロボットを見たことがあるかと思います。あるいは、「PID制御」という言葉を耳にしたことがあるかもしれません。今回は、ライントレースを例に「PID制御」とはどんなものであるかを説明してみます。小学生には難しい説明内容となっていますが、中学生以上は理解可能かと思います。

ON/OFF制御

多くの人が最初に学ぶライントレースの方法は、「ON/OFF制御」と言われるものです。白と黒のときの反射センサーの値からしきい値(白と黒を見分ける境目の値)を求め、白だったら右カーブ前進(左)、黒だったら左カーブ前進(右)させる、これを繰り返すことでラインを辿って進みます。

ですので、ラインの真上を走行するのではなく、ライン(黒)と床面(白)の境目を辿っていることになります(下図例の場合、ラインの左側)。ロボットの動作を逆にすればラインの右側を走行することになります。

PID制御

PID制御とは、比例(Proprtional)制御、積分(integral)制御、微分(Derivative)制御の3つを組み合わせたものです。微分・積分と聞くと数学嫌いの人は拒絶反応を起こしてしまうかもしれませんが、それぞれの意味をしっかりと理解すれば決して難しくはありません。数学も同様ですが、意味を考えずに解き方(テクニック)を憶えようとするから式や文字が記号となってしまい、理解できずに応用ができないのです。まずは自分の手と頭を使って、試行錯誤して少しずつ意味(概念)を理解していきましょう。

以下、ON-OFF制御の欠点と、PID制御について、順を追ってみていきましょう。

ON/OFF制御の欠点

ON-OFF制御は初心者にとって理解しやすいのですが、ラインからのズレ量(目標値からのズレ量)に関わらずロボットを目標値へ近づける強さ(曲がる強さ)が一定のため、過剰なオンオフの繰り返しが発生することがあり、ロボットアどうしても左右に揺れてしまうなどロボットの姿勢が安定しません。そこで、登場するのが次に説明する比例制御(P制御)です。

比例(P)制御について

ON/OFF制御腕は、ラインからのズレ量(目標値とのズレ量)に関わらず、曲げる強さ(目標値へ近づく速さ)は一定でした。直線部分から急なカーブに差し掛かったときでも、直線部分で僅かにラインからズレているときでもロボットの曲がる強さ(目標値に近づく速さ)は一定のため、時には、曲げ量が十分でなかったり、あるいは曲げ量が急激すぎたりすることになります。

一方で比例制御は、ライン(目標値)とのズレ量により曲げる強さ(目標値に近づく速さ)を変えます。ズレ量が小さいときは緩やかに、ズレ量が大きいときは急に目標値へ近づけます。ON/OFF制御と比べると効率的な動きとなり、よりスムーズなライントレースが可能となります。

エアコンの室温設定をイメージすると分かりやすいでしょう。夏の昼間外出から帰ってくると、室温30度の状態で25度に設定されたエアコンをつけると、室温と設定温度の差が大きいため、エアコンは設定温度に早く近づけようと「強」運転します。設定温度に近づくにしたがって、徐々に「弱」運転となります。

これを「ON/OFF」制御で行うと、エアコンをつけ始めと設定温度に近づいたときも、エアコンは同じ強度で運転しますので、なかなか部屋が涼しくならず、やっと設定温度になったと思うと、運転の強度をうまく調整できずに設定温度より高くなったり低くなってしまうでしょう。

しかし、このP制御にも欠点があります。目標値に近づけば近づくほど操作量が0に近づくため、最終的に目標値にピッタリ合わせ込むことができなくなります(右図)。

比例(P)制御は、現在の目標値(ライン)との差(ズレ)に応じて、曲げる強さを決定する。
操作量 = (目標値 – 現在地) × 比例ゲイン

積分(I)制御について

そこで、登場するのが、積分(I)制御です。目標値との誤差を累積させ、その累積値を操作量の決定に加味します。ライン(目標)からのズレ量(左にズレているときをプラス、右にズレているときをマイナス)として、それを累積していきます。例えば、上のP制御で目標値に届かない場合、少しのズレであってもそれが続けば(累積されれば)その累積量に応じた操作量が加味され、P制御の欠点を補ってくれます。目標値との差の累積は、右図の水色の面積(目標値の上側はプラス、下側はマイナスの累積)となります。

ただし、I制御のゲインを強くするほどP制御の欠点を速く打ち消せますが、ゲインが強すぎるとオーバーシュート(*)やアンダーシュート(*)が大きくなるので注意する必要があります。極端な場合には、収束しなくなる可能性もあるため、I制御のゲインは慎重に選択することが重要です。

  • 目標値を上側に突き抜けることを「オーバーシュート」といい、目標値を下側に突き抜けることを「アンダーシュート」といいます。

積分(P)制御は、過去の目標値(ライン)との差(ズレ)を累積した値に応じて、曲げる強さを決定する。
操作量 = {過去の差の累積 + (目標値 – 現在地)}× 積分ゲイン

微分(D)制御

P制御やI制御では、オーバーシュートやアンダーシュートを繰り返しながら操作量が収束していきますが、それでは目標値に到達するのに時間がかかってしまいます。そこで、急激な変化をやわらげ、より速く目標値に近づけるために利用されるのが微分(D)制御です。

D制御を分かりやすく言うと、前回の目標値との差と現在の目標値との差を比較して、差が大きくなっている場合には操作量を増やし、差が縮まっている場合には操作量を減らす方向に操作量を調整します。P制御とI制御の動きを和らげる方向に制御が入るため、オーバーシュートやアンダーシュートを抑えられるようになります。

ただし、D制御を入れると目標値に近づく速度は遅くなるため、安易なゲインの増加には注意が必要です。

微分(D)制御は、前回と今回の目標値との差を比較して、P制御とI制御の動きを和らげる方向に調整する。
操作量 = (今回の目標値との差前回の目標値との差) × ゲイン

PID制御まとめ

PID制御の要素、P制御、I制御、D制御を個別にみてきました。PID制御の操作量は以下の式で決定します。

操作量 = P制御 + I制御 + D制御

また。少し見方を変えると、PID制御は以下のように捉えることもできます。

  • P制御は、現在の状況に対して操作量を決定する
  • I制御は、過去の状況に対して操作量を決定する
  • D制御は、未来の状況を予測して操作量を決定する

調整するための要素が3つ(ゲイン)ありますので、最初は状況に応じてどれを触ればよいのか悩むかもしれません。色々と試行錯誤して学んでみてください。

この記事が気に入ったら
いいねしてね!

  • URLをコピーしました!
  • URLをコピーしました!