まず最初は壁センサのAD変換値から壁との距離をどのようにして推定するかということについて。
現在は測定した結果をそのまま6次関数で近似して使用していまして、これについて、自分の従来の方法とその問題点についても触れながら書こうと思います。
代表的な手法は壁との距離とセンサのAD変換値との関係を測定し、ある関数で近似して、1対1対応の表を作るというものでしょうか。
例えばこちらでは関数として対数関数を用いたものが紹介されてますし、自分もこれまではもっと単純化して距離の2乗に反比例すると仮定して以下のようなAD変換値と壁との距離の関係を求め、表にして使用していました。
これは左の横壁センサのものです。
しかしご覧の通り実験の測定値(赤い点)と近似関数(青線)との間に明確な違いがあり、これをこのまま横壁センサに適用すると迷路の中心を走れないため、近似関数に5mmくらいオフセットをかけて調整していました。
これでそこそこ走るようになりますが、オフセットの値はいくらにすべきか調整しないといけませんし、問題ないにしても実験値との誤差が大きくなんとなく気持ち悪いです。
そこで、実験結果をそのまま6次関数で近似するとそこそこきれいに一致しました。
ここで、AD変換値2500以上の値は関数に関係なく一定値にしています。あとで示しますが、6次くらいになると横軸両端の極端な値で変な挙動をするので。
ちなみに6次曲線近似は研究室で使用している「GP」というソフトを使いました。
フリーソフトですが、名前がありきたりなせいか、Windowsより年上の古いソフトなせいか簡単にインターネットで探せません。紹介できなくてすいません。
ちなみにGP上で近似した時のイメージはこんな感じ。赤線は近似関数の導関数を表わしており、値は縦軸の右側です。AD変換値2500以下の範囲では負であることから6次関数の単調減少性が確保されているのが分かります。
AD変換値2500以上のところの近似関数(青線)は単調減少性を示さず急激に増加していることから、一定値にさせているわけです。
これにより、オフセット値の調整をしなくて済むようになりました。
さらに、一度設定をしてしまえば実験結果からより簡単に近似曲線が求められるため、少しだけ開発時間の短縮ができました。
ただ、残念ながら壁からの姿勢制御は壁の中央値と単調性があれば問題ない気がするので、わざわざここまでする必要があるかわかりません、、、
0 件のコメント:
コメントを投稿