壁距離センサに線形近似を導入しよう
こんにちは。今回は理科大プチコンからクラシックマウスに導入した近似について記録しておこうと思います。
1.導入した経緯
私は6月のマウス合宿に参加したのですが、その最終日にプチコンに参加しました。あまり調整をせずに本番で動かしたのですが、センサーの閾値と参考値がおかしかったようです。マウスが壁に近寄りすぎた挙句、モーターが脱調して壁にぶつかったしまいました。以前から壁センサーの数値が距離と比例していないことには気が付いていたのですが初めて大会で完走できない事態に直面した為ようやく組み込むことを決意しました。
2.近似を導入する前の問題点
センサー値が壁に近づくにつれて値が加速度的に増えることは閾値調整の時に把握していました。このセンサーの生データをそのままP制御に持ち込むことで起こった問題は2つです。
- ゲインを大きくすると壁から1㎝の地点から中心まで復帰する前に脱調が起こる。
- センサーの参考値付近では距離の変化に対してセンサー値の変動が小さく、補正があまり効果を果たさない。
要するに中心から左右15㎜ほどでしか、中心からずれてもまともな補正がかかるこ
とを期待できないという事態なのです。
3.近似について
3-1.センサー値の特性
手始めに4つすべてのセンサーに対して距離とセンサー値の関係のデータを取ってみました。
点がセンサーの実測値、点線が採用した近似曲線です。横軸はセンサーの電圧(mV), 縦軸はロボットと壁の距離(mm)です。ここから導入すべき数式を算出しました。(写真中の数式)
3-2.近似関数に導入
引数にセンサー値をとる関数を作成しました。返り値は数式の計算結果です。後はこれまでセンサー値で行なっていた比例制御の引数を関数に変更すれば実装完了!
4.結果
以下の性能向上が確認できました。
- 壁から1cmほどの位置から走り始めても脱調が起こらなくなった。(補正量が壁付近で必要以上に大きくなりすぎないから)
- ゲイン調整が比較的楽に。(脱調しないので)
- 壁に近づいても脱調しない。(壁に近づいても比例制御のerror(差分)が急に大きくならないから。)
今度は、ステッピングモーターを使ったマウスでは壁切れ補正をしましょうかね。
以上。