停滞気味である
一月近く倒立振子ロボットの記事を更新してない。
カルマンフィルタ+PID制御の倒立振子ロボットの静止に四苦八苦。停滞気味である。
まずは、暇を見つけて試行錯誤した結果の報告。
MPU6050-DMPの試行錯誤
MPU6050-DMPモードのソースにモータなどの姿勢制御プログラムを追加してコンパイルするとLPC1114では容量オーバしてしまうのだ。MPU6050をDMPモードで動かす魔法の長い呪文がブログラム領域にあるのが原因だ。余裕のあるMPUならいいがLPC1114では無理なようで開発は断念した。
といってもKalmanフィルタは倒立振子ロボットを立たせるぐらいの正確さがあるので問題はない。
筐体の静止に試行錯誤
筐体を自在に操る為には、まず静止させるということが必要だ。それが意図どおりに静止しないのだ。
1.DCモータのブレを抑制
モータが動くか動かない微妙にところで倒立振子ロボットは立っている。ダブルギヤボックスのギヤ比32.8:1とモータの組み合わせでは、モータが回転するかしないか約1.2Vぐらいのところで安定しているのだ。少しの電圧の変化でも動き出してしまうので制御が難しいのだ。
試しにダブルギヤボックスをギヤ比を114.7:1で組み立て直して倒立させてみたが、姿勢を安定させるにはより多くモータが回転しなければならないので、反応が鈍くなり、加わる電圧も高いためモータドライバの発熱が大きくなり使えないのだ。
2.モータの回転計からのフィードバック
フォトインタラプタで得られた回転数からフィードバックを掛けたみたのだけど、静止しないのだ。ロジックが悪いのかと、思いつくまま修正してテストしたのだが、改善しないのだ。
参考にしているBalanduinoは、静止しているようなのだか、ロボコン4号は安定しないのだ。
何か問題があるから安定しないのだ、しかし何か悪いのか分からない。手詰まりだ!
道具の開発
DCモータ版の倒立振子ロボットを解析・制御する為に、C#にてコントローラを作成した。
このコントローラの通信相手はBluetoothのHC-05だ。簡易なプロトコルを作って姿勢制御の送信や姿勢情報の受信を行う。
倒立振子ロボット側は、ノンブロッキングで受信できるよう、そしてC#のコントローラは、HC-05が切れ切れに送ってくるパケットでも受信できるような細工が必要だった。
工夫して作ったコントローラを利用しても、静止しないのだ。これは手詰まりだ!!
静止した
何をやっても静止しなかったのだが、PIDのゲイン値を滑らか動作重視から反応重視に変えてみたところ、少しカクカクとした不自然な動きながら静止するようになった。静止しなかったのはPIDゲイン値が悪かったということになるのだろうか、奥が深い。
次は走行・ブレーキ
ロボコン1号2号の経験からすると単純に前方・後方に車輪を回すだけでは倒立振子ロボットは安定して走行しない。
筐体を傾ければスムーズに走行するのは実験済みなのだが、スムーズにブレーキを掛ける方法を考える必要がある。
【2015/4/25追記】
昨日アップロードした動画の撮影角度が悪く、安定しているように見えなかったので、撮影し直してyoutubeにアップロードした。ご覧のように数センチの移動で静止している。