C-StyleでP制御(比例制御)
基本的なフィードバック制御として比例制御(P制御)がある。これは操作量を制御量と目標値の偏差の一次関数として制御するものである。
(Wikipedia「PID制御」よりP制御)
コンパスセンサの値を回転の制御に使う場合、計測値をどう制御量として計算するかを工夫する必要がある。
On-Off制御と同様に、スタート時の向きを基準とし、
- 正面に向いている場合は動かず、
- 右に向いている場合は左回転、
- 左に向いている場合は右回転、
するとして、今回は
- スタート時の向きから大きく向きが違う場合はより速く
- スタート時の向きに近い場合はゆっくり
と向きに応じたスピードで制御することを考えてみる。
ここで、現在の向き(図:今)を次のように定義する。
スタート時の向きなら0度、より右向きなら+、左向きなら−の角度とする。
スタート時の真後ろの向きは、左右どちらにも向いていないが便宜上+の角度と考えると、現在の向きは-179度から180度の値を取ることになる。
モーター値は-100〜100で指定する必要があるので、現在の向きを単純に2で割れば比例制御の制御値として使えそうであり、できたサンプルプログラムはこちら。
このプログラムにはいろいろ問題がある。(が続く)