簡単なライントレースをスムースに行う

微分制御考え方

ラインセンサーは2つ用いることにします。それぞれ、黒いラインを挟んで設置されていることとします。
比例制御だけでは、比例ゲインを小さめに設定すれば安定した走りになりますが、急なカーブが曲がれなくなります。大きめにすると、カーブは曲がれますが、ロボットが振られてしまいます。
さらに安定した走りを目指すために微分制御(D制御、differential)を導入します。
同じ灰色の値でも、直線での補正値は少なくてもよいですが、カーブの時は多くする必要があります。ここで、直線かカーブであるかの判断は前回のセンサーの計測値との差を仮定します。つまり、一定時間後に大きく変化したときはカーブであると判断します。カーブかどうかは別問題として、変化量が大きければ制御量を増やします。これを微分制御と言います。
これを数式にしてみると、次のようになります。

回転量 = 比例ゲイン×偏差×turn値の幅が±100%となる係数×変化量係数

となり、具体的には、以下のような式になります。

回転量 = 比例ゲイン×(センサ値 - 黒値) / (白値 - 黒値)+ 微分ゲイン×(センサ値 - ひとつ前のセンサ値)

となります。

課題
  1. 上記の式に応じた比例制御+微分制御(PD制御)プログラムを作りなさい。
  2. ロボットが一番早くコースを周回できるようにスピード、比例ゲイン、微分ゲインを設定しなさい。
  3. 一番早かったときのラップタイムを記録しなさい。