ロボジョイちゃれんじ教室

5-1 デスクロボ入門

第1回「『はじめてロボ』をライントレースロボットにする」


◆ライントレースロボット(PD制御)

以前に紹介した「ライントレース入門」のように、今までロボットの動きを良くしたい場合には、ハードウェア的に(重心位置を変えることで)解決をしていましたが、今回はソフトウェアで解決してみたいと思います。
プログラムに「D制御(微分制御)」を加えてみました(Program3)。D制御は入力値の変化量に応じて出力を変化させるという制御方法です。「微分」は習ってない人も居ると思いますので、ここでは「速度」という言葉に直して考えます。
速度を求めるには、「光センサの現在値」と「1ループ前の光センサの値」を引き算することで求めています。青ワクで囲んでいる部分が、その引き算です。
P制御とD制御を合わせてPD制御と呼びます。PD制御については「アルゴリズム入門」の第6回目でも紹介していますので、参照してみてください。

動く原理を図にしてみました。
光センサが「白50:黒50」の状態だと、位置が0になります。この場合、左右のモータに与えられるパワーは同じです。
もし、光センサの「黒」の比率が速く増えたとすると、左側のモータにはプラス、右側のモータにはマイナスのパワーが伝わります。紫色で描いた矢印がそのパワーです。

プログラムを実行してみました。
光センサを「白50:黒50」の位置に合わせてから、プログラムを実行します。 比例ゲイン(変数PGain)は1.3、微分ゲイン(変数DGain)は25に設定しています。
カーブを曲がるときに大回りしていた現象がほとんどなくなりました! ソフトウェアの工夫によって、小まわりのきかなさをカバーすることに成功しています。

これで完璧……かと思ったプログラムですが、不具合が見つかりました。
ロボットは夜にはちゃんと動いていましたが、昼間になるとコースアウトするようになってしまいました。

不具合の原因は「明るさのムラ」によるもので、コースのスタート地点とその途中でまわりの明るさが違っているためです。 光センサの値が10違うだけで、正しく走れなくなります。
こうなると、「絶対的な値を元に線を検出する」という制御の方法を改めないといけません。