私は、9-DOF MEMS ナビゲーション デバイス ( InvenSense MPU-9250 、できれば NXP の部品を含む) を使用して、カスタム設計されたハードウェア、ソフトウェア、およびドライバでリアルタイムの方向を提供するアプリケーションを開発しています。すべてがカスタムであるため、SensorFusion 7.0 ライブラリを SDK で提供されるコア ルーチンにまで削減する必要がありました。さらに、初期化関数を直接呼び出し、ジャイロ、磁力計、加速度センサの 1 要素 FIFO にデータをロードする独自の関数を作成しました。
MPU-9250 の軸は、下の図のように定義されています。したがって、磁力計の軸を回転させて、ジャイロと加速度センサと同じにします。これは、Z 軸を反転し、X 軸と Y 軸を交換することによって行います。
また、単位が正しいことも確認しました (加速度は g、回転速度は度/秒、磁力計はマイクロテスラ)。整数と浮動小数点数の「単位あたりのカウント数」と「単位あたりのカウント数」の変換係数を適切に設定しました(少なくとも私はそう信じています)。
私はfRun_9DOF_GBY_KALMANアルゴリズムを 200 Hz で実行し、9 つの軸すべてに対して 200 Hz で新しいデータ/サンプルを 1 要素 FIFO にロードしています。デバイスを少し動かすと、 iFirstAccelMagLockフラグが 0 から 1 にスイッチすることがわかりました (これは良い兆候のようです)。
しかし、カルマンフィルタの様々な角度出力は、
空間を漂っているように見え、デバイスの実際の回転には反応しません。
静止状態での長期平均を使用して、ジャイロの DC オフセットを測定してみました。それは約 0.5 度/秒なので、これを差し引いても、このドリフトと応答の欠如は解消されません。
したがって、SensorFusion 7.0 ライブラリの使用に関して次の質問があります。
ジョナサン、
通常、競争力のある部品のポートのサポートは提供していません (Invensense は NXP の競合です) が、いくつかの質問にお答えしたいと思います (他の方も追加の提案があれば歓迎します)。順番に:
1. ユーザー ガイドのセクション 5.3 では、ハードウェア抽象化の問題について説明します。
2. カルマン フィルタには、追跡する変数 (XY および Z) の 3 つとしてジャイロ オフセットが含まれます。デバイスが回転している限り、それらの推定値は継続的に更新されます。磁力計とジャイロの参照ベクトルは、デバイスが静止しているときに安定性を保つ必要があります。
3. 申し訳ございませんが、コードレビューは提供できません。
4. 適切な磁気校正が非常に重要です。これがないと、9 軸の良好な結果は期待できません。私たちが組み込んでいるルーチンは、一般に、センサに対して空間的に固定された硬鉄/軟鉄源の処理をかなりうまく行います。一般的な干渉を処理するためのコードもいくつか含まれていますが、それをどれだけうまく処理できるかには限界があります。
5. コードのコメントを確認すると、 iFirstAccelMagLock は初期化コードが一度だけ実行されるようにするためのブール変数であることがわかります。この値から全体的な健全性を推測しないでください。
6.MCU に十分な MIPS がある限り、あなたが概説したアプローチに問題はないと思います。
7. マニュアルを読みます。私はできる限り多くの「集合知」をそこに盛り込もうとしました。
よろしくお願いいたします。
Mike