マイクロマウスのパラメータ調整について考える

こんにちは。そらです。今回はマイクロマウスのパラメータ調整の仕方、楽にやる方法を考えるということを書いていきたいと思います。

初めに、マイクロマウスのパラメータを列挙してみます。

制御関連では、併進、回転方向のPIDにおけるkp,ki.kdの6個、壁制御用ゲイン、串対策用のパラメータ、区画中心のセンサ値、壁あり判断の閾値、スラロームターンの場合は前距離、後距離、角加速度、角速度etc…ほかにもあると思いますが、これだけのパラメータを設定する必要があります。

制御関連でこれだけのパラメータを設定しなければならない→調整が辛い、時間がかかる等のモチベーションや、体力等を奪われていきます・・・。

他にも迷路の最短走行導出時のパラメータ等はあると思いますが、アルゴリズム周りは人によってかなり異なってくるものと考えられるため割愛します。




PID調整

PIDに頼り切らない

目標値に対してPIDのフィードバック制御だけで追従をさせるのではなく、フィードフォワード制御を使用してPIDは補償として使う方法があります。フィードフォワードを入れることで過渡応答をよくできることによって、立ち上がりが遅れなくなったり、PIDのI成分が大きくなって目標値よりもオーバーシュートをするということが減ったり、PIDのパラメータ調整をしっかりしなくてもそれなりに良い結果を得られたりと、実装する価値はあると思います。

ただし、フィードフォワード制御をするために運動方程式を立てたり、モーターの逆起電力定数等から与えられた加速度からモーターの出力値を決めるための計算をしないといけないという手間はかかります。

調整システムを作る

マイコンでPID調整をする場合、マイクロマウスでは入力に使用できるインターフェースが少ないことが考えられるため、以下の流れで調整をしていると思います。

  1. PIDを適当に決めたらマイコンにプログラムを書き込む。
  2. 180mm直進や180度超新地旋回を動かす
  3. 現実の距離とログを確認して追従の状態を確認する。
  4. PIDを調整しなおす
  5. 1~4のループを気が済むまでやる

毎回プログラムを書き込むのは、時間がかかると考えられるためシリアル通信を使用してPIDの変数を書き換えられるようにするシステムを作ってしまったり、シリアル通信で変えられるようにするとマイコンにプログラムを書き込むという動作が減る分楽になるかもしれないです。その場合は、最終的にパラメータを何処に保存するのか、パラメータの更新がしっかりとできているのかなどを確認できるようなソフトを作る必要がありそうです。

MATLABでPIDのあたりをつけてから調整を始める

マシンにステップ入力を与えてステップ応答からMATLABの機能を使用してPIDをいい感じに決めてもらうという感じです。ただし、マイクロマウスのシステムが何次遅れ系かはわからないなど問題はありますが・・・。それっぽくは走るみたいです。最短走行などでは厳しいかもという噂を聞いた記憶があります。

 

参考文献を以下に示します。

dangorogoroさんのブログ:MATLABでマイクロマウスの機体をシステム同定してPIDチューニングする

PID関連の調整のまとめ

PIDのパラメータを減らすということはできないので、事前に頑張って実機で泥臭い調整の時間を少しでも減らすことができるようにするための方法を書いてみました。

私の経験に基づくものですが、変則四輪のマシンは併進方向のフィードフォワード制御をいれると併進方向のPIDの調整は楽になりました。回転方向も計算して入れてみましたがだめでした。根本的に物理的なモデルの作り方が間違っているように考えられます。二輪マウスを作ることがあったら評価したいと考えています。

センサーのリファレンス値の決め方を考える

リファレンス値の決め方のルーチンを作る

私は以下の画像くらいの場所において、前後に動かしながら閾値を設定しています。センサが壁なしと壁ありで10bitのADCで50~100以上差がでるように作っておくと楽になるかなと思います。変化量は大切です!

前壁の設定について

マシンのセンサが区画の半区画先くらいのときに壁を認識できるようにしています。探索走行中に少し先を見ておいた方がいろいろと都合がいいためです。

横壁の設定について

壁なしのときのチェックと壁ありのときのチェックを閾値をチェックしたいセンサの逆側につけて確認をします。

このようにすることで探索中に壁の読み間違いが減ると思います。壁あり、壁なしでセンサの値の変化が小さい場合はセンサの見える範囲が狭いことが考えられるため遮光やセンサの発光LEDに流す電流を増やすなり対策をしましょう。

私のクラシックサイズマウスでは、10bitのAD変換の生値で、壁なしの時が20, 壁ありの時が150~200くらいです。

普段の壁制御用に中心でも左右のセンサーの値を確認しておきましょう。

今年度のマシンでは会場ごとにセンサの値が変わってしまい問題がおきたということはないため、壁切れなどの影響がどれくらいあるかはわかりません・・・。

 

動画、ログから決める(設定した後の微調整)

これは、横壁センサの値の調整の話になります。区画の中心になるようにおいてセンサの調整をしているとマシンのちょっとした傾きでセンサ値がそれなりに変化してしまうことがあります。その時は、動画とログの両方を使用して中心になるように調整するといいと思います。

斜め45度ターンの調整のときのセンサ値です。セット時に私が中心だと思った位置においたときのセンサ値が最初です。私は大体これを見ながら微調整をしています。

初期調整に使用したデータはどこかにいってしまったためこれを例として挙げさせていただきました。

 

スラロームターンの前距離、後距離の設定

シミュレータに任せる

私がとっている方法です。私が作成したシミュレータでは、マシンの限界のパラメータを設定するときは最初のあたりをつける程度のことしかできませんでした。ただ、余裕がある場合はこれで設定した値で大体走りました。

シミュレータについては上記の記事にまとめていたため詳しい説明は省略させていただきます。上位陣の戦闘用パラメータと戦うとなると厳しいかもしれないですが、上位陣の最低パラメータと戦うことは可能かもしれないです。

気合で調整する

一つずつのターンの前距離をマシンを実際に走らせながら調整する方法です。時間がかかりますが、マシンのジャイロセンサの誤差やマシン本体の回転の癖などを確認しながら調整することができるため、調整をしっかりとできればマシンの限界を出すことができると思います。

まとめ

いかがだったでしょうか。私がマイクロマウスを始めたときに困ったことの一つにパラメータ調整にどうやってあたりをつければいいんだろうといったことが多かったのでここで書かせていただきました。ここに書いた調整方法は、あくまで私が個人的に思いついたことを書いているだけなのでマイクロマウスの調整としてよい方法かどうかはわかりません。何かあったら教えていただけると助かります。

楽になる方法を考えてみましたが、変数や設定項目を減らすことしか思いつきませんでした。だいたいは最短走行の壁切れなどの変数を減らすことで調整項目がへって楽になるくらいしか思いつきませんでした。

皆さんはどう思いますか?

シーズンも中旬まで来ましたが、大会で最短走行の成功、往復探索の成功を目標に頑張っていきたいと思います!