制御
前回、倒立振子ロボットが安定したと報告した。次は最後の難関の制御である。
旋回させるにはプラス・マイナス・ゼロになるように左右のモータに加える電圧を加減すれば良いのであるが、電圧の加減で前後に動かそうとすると倒立を維持するPID処理が破綻する可能性があるのだ。
参考にさせてもらったBalanduinoはどうしているかというと、前進するときにはターゲット角度を前に、後進するときには後ろに移動することによって実現している。さらにモータの回転速度などのフィードバックを細かく入れている。
そしてラシオ少年さんやkookyさんが参考にされたArduinoの倒立振子ロボットINSTABOTは、リモコンから送信される値でモータの加える電圧の加減しているのだ。
どのやり方も正解
Balanduinoのロジックをロボコン4号に組み込んで制御してみると前後に操縦できないばかりか姿勢を安定することもできない。PID処理が破綻するのだ。Balanduinoのモータはパワーがあり少々の誤差でも制御は破綻しないのだが、ロボコン4号のモータはピーキーなのだ。動きもBalanduinoはカブトムシのようでロボコン4号は蝶のみたいにふわふわしている。しかも回転計の精度が悪いのだ。これらが問題なのだ。
もうひとつのラシオ少年さんやkookyさんが参考にされたArduinoの方法のようにモータの電圧を加減して操縦しようとすると、これまたPID処理が破綻するのだ。
Balanduinoのモータや筐体などのバランスなら、Balanduinoのロジックは正しいのだろう。ラシオ少年さんやkookyさんが参考にされたINSTABOTの方法は、このモータと筐体のバランスなら、これが正解なんだろう。
つまり我がロボコン4号用の、正しい制御の方法が必要だということだ。
ロボコン4号用の制御方法
Balanduinoのように車輪の動きのフィードバックを掛けたいところなのだがフィードバックを掛けるとPID制御が破綻してしまうのだ。そこで車輪のフィードバッグを入れず角度偏差だけを入れ、PCのC#のプログラムは以下のように改変してテストしてみた。
いつもなら動作してる動画を公開するのだが、PCのプログラムでは制御するのが難しいので録画できなかった。
実験から取得した倒立状態が維持できる最大角度0.5度を上限として与えてみたところ、ソロソロという感じで筐体が前に動き出し偏差角を0度に戻すとゆったりと静止するのだ。イケそうな感じだ。
実験した手応えからするとアナログジョイスティックを持ったコントローラなら自在に操作できるような感じだ。
kookyさんは制御出来たようだ
この記事を書いているときにkookyさんから制御出来たという報告をいただいた。モータに加える電圧を除々に大きくすればPID制御は破綻しないらしいのだ。
何にしてもコントローラを作らないと始まらない。HC-05でBlueToothコントローラを作るか・・・