かみやんの技術者ブログ

主にプログラムの話です

直進制御、P-D制御実装してみました〜

昨日のエントリでは、P制御(比例制御)のみでフラフラしていて、そのため1mごとに停止しています。
今日は、D制御(微分制御)の追加です。

コーディングして、試走して、という工程ではデバッグが大変なので、エクセルでシミュレーションしてみました。Pゲインを0.1にして、Dゲインをだんだん大きくした図が下記である。


上図、P制御のみ。Pゲインが0.1、Dゲインが0.0。P制御のみなので数学的には単振動になるはずだが、速度を求めるのに1つ前の位置を参照しているため制御周期分の位相遅れが原因で発散していると思われる。


上図、Pゲイン0.1、Dゲイン0.1。単振動の様子。


上図、Pゲイン0.1、Dゲイン0.2。収束の様子。


上図、Pゲイン0.1、Dゲイン0.59。Dゲイン最適値。最も早く収束する。


上図、Pゲイン0.1、Dゲイン1.0。Dゲインが大きすぎて、逆に収束が遅くなる。

最初、D制御のコーディングをしていて、式があっているか合っていないか判断がつかなくデバッグがはかどらなかったが、エクセルでシミュレーションしたら、感覚がつかめてあっさり実装できた。
このシミュレーションのXLSファイルを公開するので興味ある方はどうぞ。

P-D制御シミュレーション.xls

という訳で今日は5m走らせてみました。

まだ、多少揺れています。もっとゲインをあげるべきかな。

次は、台形速度制御をやりたいな〜。こっちも速度に対するP-D制御になると思います。
早く自由に走れるようになりたい!