【STA24】BNO085yaw角ドリフトをGPSでキャリブレーションしてyaw誤差半減<タイミングがポイント>

4月からPython学習して慣れてきたので、本格的にデータの解析したら、いとも簡単にIMU誤差補正出来上がりました。Pythonの強力なライブラリー群の威力は、C#では絶対出来ない世界だと実感しました。
使ったのは、一般的なpandas DFとscipy とmatlotlib です。Pythonの経験が増すと2か月前のプログラムが稚拙なのが
わかって、結局全部作り直ししてます。Pythonのスキルが高いほど良いデータ解析ができます。

※本記事修正しました。6月14日に公開したデータにバグが見つかったため、新たにプログラム修正して
グラフ表記方法もわかりやすくっ補正方法を説明しました。
=>原理は、yaw角のドリフトの累積誤差を毎回ターンの切り替え点で、GPSの速度ベクトル方向と一致させて補正する単純なオフセット補正をしてます。補正効果は、時間が経つほど大きくなります。

※ここでは、F9PのRTKでのNAV-PVTのheadMot角を補正パラメータとして使ってますが、安いGPSでも、Ubloxの
GPSチップならNAV-PVTが出力されますので、headMOT得られるので、IMUの補正ができるので
いろいろな動きの用途でつかえると思います。
例えばM9Nでも使えます
※その後 様々な滑走データでこのアルゴリズム試してますが、これだけでは、未だばらつきを完全に半減できません。
①BNO085の習性として、傾きroll,pitchが発生した瞬間にyaw角が数度(2-5度)くらいばらつきます。
  傾いたときにyaw角が変化したら、補正をかけないといけないようです。
②スキーターンの原理と実際が違う場合がある。原理は、「切り替え点で板の方向と速度ベクトル方向が一致する」が
 適応しないターンがある場合が存在します。この場合は。本アルゴリズムが全く効かないので、誤差が拡大してしまいます。直進したときに、オフセット補正をかけるなど別アルゴリズムを適応しないとダメかもしれません。
●BNO085測定例
 ターン振幅が小さくなっているのにどんどんyaw誤差が拡大していってます。一方向のドリフトでなく上下で拡大している現象です。MEMSチップ自体そのままでなく。FUSIONアルゴリズムが作り出している誤差だと思います。
処理は、元のF9P RTKデータが120msec周期なので、BNOの10msec周期に合わせて2次元スプライン補間処理をして10msecのRTKデータとしてからピーク検出を行ってます。F9Pの補間軌跡は、目視する限り自然な曲線になってます。

 

●結果(ドリフトが大きくなるターン後半のデータ)
補正で、誤差レンジ(max-min)が補正無しの平均50%まで減少しました。
単純に切片を上下させてるだけなので、全体のばらつきは同じですが、
誤差平均値がゼロに接近するので、補正効果が大きいです。

●方法
実に単純で、右ターンに入る切り替え点で、速度ベクトル方向(headMot角)とその時刻でのスキー板の方向yaw角が一致するので、yaw角のオフセット値をきめてターンが終了するまでオフセットさせることで、補正してます。
正規の板の方向は、RTKのHeading角と比較した値と比較してます。

 

●プログラム
Pythonで、グラフを描きながら、パラメータをいじって補正方法を試行錯誤で作り出しました。
インタープリタなので、非常にいじりやすいので、面倒なUIなどなしで、プログラムを書き換えながら
補正方法を作成していきます。https://gist.github.com/dj1711572002/aed7340b80750d1440c6e046dd4c7893

 

●以後

膨大なデータを突っ込むための自動処理プログラムを作成しして、最終的なばらつきをみてみます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です