TOC
モーターの制御 その2
前回の記事ではモーターにフィードフォワード制御を適用し、回転数を指定して動作させました。 今回の記事では、フィードバック制御まで行ってまっすぐマウスをまっすぐ走らせてみたいと思います。 まっすぐ走り、90度曲がることができれば、マイクロマウスの競技を完遂するにあたって一つのマイルストーンに 達したといっていいでしょう。
これまでの振り返り
まず、前回行ったことを振り返ってみたいと思います。
DCモーターの特性として、モーター端子間の電圧は
- 軸の回転数$\omega$に比例する成分
- 軸に発生するトルク$T$に比例する成分 の和となるのでした。
回転数は機体の速度、トルクは機体の加速度に対応します。 無負荷時のモーターが定速回転するときトルクは0となると近似することで、モーターをある速度で回転させるために必要なPWMのデューティー比を計算したのでした。
では、モーターそれぞれを独立に回転させることから進んで、機体をまっすぐ前進させるにはどうしたらいいでしょうか。
制御対象を考える
マウス機体がまっすぐ走るためには、モーター二つが同じだけ回転する必要があります。 前回はモーターの回転数自体を制御の対象としたので、これを素直に拡張すればモーター二つの回転数を制御するということになります。 しかし今回は抽象度を上げて機体の速度と角速度を制御対象としてみましょう。 こうすると、迷路を解くときに運動の指定がしやすくなります。 (参考:DCモータを使ったマイクロマウス入門⑤)
フィードバック制御を取り入れる
制御の対象を速度と角速度にしたところで、さらにフィードバック制御を取り入れていきましょう。 フィードバックにはモーターについているエンコーダーを使います。 これでモーターがどれくらい回ったのか知ることができます。
まっすぐ進むには角速度が0となるように制御します。
実際にどうやっているかはコード*1を参照してください。
エンコーダーからの出力を使ってフィードバック制御完成!まっすぐ走行!といけばいいのですが、 いろいろやってみてもまっすぐ進んでくれませんでした。
いろいろ試した結果、判明したのは左側のモーターのエンコーダーからの出力が、仕様より少ないのです。 ソフトウェアのミスかとも考えましたが、オシロスコープで波形を見ると右側のエンコーダーと周期がずれており、 マイコンに入力される前から信号がおかしいようです。 この件については現在シチズンマイクロ社に問い合わせています。
何がおかしくなっているのかはまだわかりませんが、とりあえず事態は把握できたのでまっすぐ進ませることはできそうです。 エンコーダーのパルス数を進んだ距離に変換する係数を左右で別に用意することにしました。 この係数を求めるためにいろいろ計算をしたりしてみましたが、結局のところ地面の上を1m手で押して走らせて、実測するのが一番でした。
実走テスト
というわけで、1m/sで1m走らせてみたのが以下の動画です。最初は1m/s^2で等加速させています。 1m進んだらブレーキをかけるようにしているので、少しオーバーして止まっています。
かなりまっすぐに進んでいるのではないでしょうか。 次は
余談:ジグは大事
ちなみに、走行テストの際にはこのようなジグを作成して使用しました。 段ボールを床に貼り付けただけです。 しかしこの段ボールとフローリングの模様によってテストに再現性が出て、圧倒的に走行の評価がしやすくなりました。 実験にもっとも大事なのは再現性だと思います。
制御コード
参考資料
マイクロマウスシリーズ
comments powered by Disqus