ロボットコントロール体験

ライン上を自律的に進むロボットのゲームです。タイムアタックを楽しみながら、 ロボットをコントロールする仕組みを理解し、コントロールの仕方がロボットの動きにどのような影響を与えるのか 、体験することができます。

ライントレースを体験してみよう(ON-OFF)

ここでは、簡単なゲームを通してロボットの制御(コントロール)を体験することができます。 赤いロボットを黒い線上に沿って進め、もとの位置に戻ってくることができたらゴールです。

今の状態でもゴールには辿り着けますが、いかんせん時間がかかってしまいます。
左下のスクロールバーをいじって、できるだけ速くゴールにたどり着くことができるように改良してみましょう。 目標は「2分以内にゴールすること」です。

ライントレースの原理(ON-OFF)

今回制御(コントロール)することができるのは、車輪が回転する速度です。 左右別々に変えることができます。

さて、どのような仕組みで制御(コントロール)されているのでしょうか? どのような指示をしておけば、途中で手を加えなくても黒い線の上を進み続けてくれるでしょうか?

黒い線がまっすぐなら、話は単純です。左右の車輪同じ速度で回転させておけば車はまっすぐ進んでくれるでしょう。 でも、黒い線が途中で曲がっていたら、だんだん黒い線からずれていってしまいますよね。

例えば上図左のような場合、まっすぐ進み続けると、ロボットは黒線からどんどん右にずれてしまいます。 黒い線の上に沿って進んでほしいなら、右の車輪を速く、左の車輪を遅く回転させれば良さそうです。 反対の場合も同じです。まっすぐなままでは左にずれてしまうので、左の車輪を速めに、 右の車輪を遅めに回転させれば良いのです。(上図右参照)

つまり、黒い線からずれた時にはずれた方の車輪をより速く回転させれば、黒い線の方にまた戻ってくるのです。 以上がベースとなる考え方です。

一口に黒い線からのズレに関しても、少しだけずれている場合と、かなりずれてしまっている 場合がありますよね。

上のゲームでは、黒い線のほぼ真上に乗っている場合と、少しだけ黒い線からずれている場合(カーブ)、 大きくずれている場合(急カーブ)、で車輪の速度を変えて走行しているのです。 そしてこれらを、スクロールバーを動かしてそれぞれの状態の時の車輪の速度を変えることができます。

<黒い線のほぼ真上>

<少しだけ右にずれている場合>

<大きく右にずれている場合>

<少しだけ左にずれている場合>

<大きく左にずれている場合>

もっと知りたい人に向けて

黒い線のほぼ真上に乗っている場合と、少しだけ黒い線からずれている場合(カーブ)、 大きくずれている場合(急カーブ)、で車輪の速度を変えて走行していると書きましたが、 そもそも黒い線からのずれはどう判定しているのでしょうか?

ゲーム内のロボットの前端には、左右に一つずつセンサーが取り付けられていて、 センサーの真下の明るさを測ることができます。 センサーの下に黒い線があると暗く、黒い線がないと明るくなります。

黒線からのズレを判定するのに用いているのが、「(右の明るさ)―(左の明るさ)」です。 上図の赤線部に注目すると、ロボットの位置と「(右の明るさ)―(左の明るさ)」の関係が分かります。

右にずれているとこの値は正、左にずれていると負になっていることがわかります。 また、ずれが大きいいと値の絶対値が大きく、ずれが小さいと値の絶対値が小さいことにも気がついたでしょうか。 これらをもとにして、「黒い線のほぼ真上」「少しだけ黒い線からずれている」 「大きくずれている場合(急カーブ)」のどの状態なのか左右のどちらにずれているのか、 判断しているのです。

※ちなみに、上のゲームでは、「(右の明るさ)―(左の明るさ)」が、
・ ~-0.3の時は、左に大きくずれていて右に急カーブ
・ -0.3~-0.15の時は、左に少しずれていて右にカーブ
・ -0.15~0.15の時は、黒い線のほぼ真上
・ 0.15~0.3の時は、右に少しずれていて左にカーブ
・ 0.3~の時は、右に大きくずれていて左にカーブ
と判断しています。ゲームを操作しながら「(右の明るさ)―(左の明るさ)」と左右の 車輪の回転速度の関係に注目してみると、そうなっていることが確認できるでしょう。

ライントレースを体験してみよう(PID)

一つ目のゲームは楽しんできただけましたでしょうか?

一つ目のゲームの時は、
・ 黒い線のほぼ真上
・ 黒い線から少しずれている
・ 黒い線から大きくずれている
の3通りで、車輪が回転する速度を変えていました。しかし、この方法では、 黒い線の真上で安定させることが難しく、右へ左へとずれることを繰り返してしまいがちです。 急カーブで曲がりきれず、バックに時間を使ってしまったり、コースアウトしてしまったり、 もどかしさ感じたかもしれません。

この問題点を解消し、より黒い線の上をより正確に速く走行してくれる制御が 今回のゲームで用いられているPID制御です。実際にゲームを操作してみると、 走行の滑らかさを体感できるでしょう。

ライントレースの原理(PID)

PID制御は、P制御、I制御、D制御の組み合わせからなっています。以下はそれぞれの説明です。

<P制御>

どれだけ黒い線からずれているか、に応じて車輪の速度を変えることができます。 1つ目のゲームの時は、3つの状態のどれに対応しているかによって車輪の速度を変えていましたが、 もっと細かく黒い線からのズレの大きさによって車輪の速度を変えることができるのが特徴です。 黒い線からずれていればずれているほど、より大きな修正を加えるのです。 (ずれている側の車輪をより速く回転させ、その反対側の車輪はより遅く回転させる。)

<I制御>

P制御では、黒い線上のほぼ真上に近付いた時、左右の車輪の速度差が小さくなるので、 そこからさらに真上に持っていくのには難しくなってしまいます。 それを改善するのがI制御です。I制御を用いることで、黒い線の真上に持ってきやすくなります。

<D制御>

黒い線から突然ずれてしまった時に、素早く黒い線の方に車体を持ってくる役割を果たすのがD制御です。 急カーブでは、車体が黒い線からずれやすいですが、そんな時に活躍してくれます。

以上、P制御、I制御、D制御について説明してきましたが、スクロールバーではkpがP制御に 、kiがI制御にkdがD制御に対応していて、この値を変えることでどの制御のどんなバランスで 車に反映させるか決めることができます。一番上のスクロールバーで決めた速度を基準に、 P制御I制御D制御で車輪の速度を変える仕組みです。

基準の速度に対して、kp、ki、kdを変えるとロボットの動きにそれぞれどんな変化があるのか 観察しながら、よりスムーズに進める基準の速度kp、ki、kdを探してみると面白いと思います。

もっと知りたい人に向けて

P制御のPはProportional (比例)の頭文字、
I制御のIはIntegral (積分)の頭文字、
D制御のDはDifferential (微分)の頭文字で、
P制御・I制御・D制御はそれぞれ比例制御・積分制御・微分制御とも呼ばれます。

ちなみに今回は、ざっくり言うと、比例制御で今ズレている分に対して修正を行い、 積分制御では比例制御で修正し切れないところを今までのズレを蓄積量を用いて補い、 微分制御で突然生じたズレに対してズレの時間あたりの変化量を用いて修正しているのです。

※上の数式に基づいて左右の車輪の速度をコントロールしています。

企画一覧
 研究室展示  自主プロ・メカトロ・IoT展示  遊星歯車展示  スターリングエンジン展示  電子工作教室  ロボットコントロール体験  ロボットプログラミング教室  ロボットモーション体験
 公式YouTube  公式Twitter  公式Facebook