615794_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

615794_ja-JP

615794_ja-JP

SensorFusion 7.0 の方向ドリフトの問題<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

私は、9-DOF MEMS ナビゲーション デバイス ( InvenSense MPU-9250 、できれば NXP の部品を含む) を使用して、カスタム設計されたハードウェア、ソフトウェア、およびドライバでリアルタイムの方向を提供するアプリケーションを開発しています。すべてがカスタムであるため、SensorFusion 7.0 ライブラリを SDK で提供されるコア ルーチンにまで削減する必要がありました。さらに、初期化関数を直接呼び出し、ジャイロ、磁力計、加速度センサの 1 要素 FIFO にデータをロードする独自の関数を作成しました。

MPU-9250 の軸は、下の図のように定義されています。したがって、磁力計の軸を回転させて、ジャイロと加速度センサと同じにします。これは、Z 軸を反転し、X 軸と Y 軸を交換することによって行います。

mpu9250-axes.png

また、単位が正しいことも確認しました (加速度は g、回転速度は度/秒、磁力計はマイクロテスラ)。整数と浮動小数点数の「単位あたりのカウント数」と「単位あたりのカウント数」の変換係数を適切に設定しました(少なくとも私はそう信じています)。

私はfRun_9DOF_GBY_KALMANアルゴリズムを 200 Hz で実行し、9 つの軸すべてに対して 200 Hz で新しいデータ/サンプルを 1 要素 FIFO にロードしています。デバイスを少し動かすと、 iFirstAccelMagLockフラグが 0 から 1 にスイッチすることがわかりました (これは良い兆候のようです)。

しかし、カルマンフィルタの様々な角度出力は、

  • fPhiPl; ///< ロール (度)
  • fThePl; ///< ピッチ (度)
  • fPsiPl; ///< ヨー (度)
  • fRhoPl; ///< コンパス (度)
  • fChiPl; ///< 垂直からの傾き (度)
  • fDeltaPl; ///< カルマンフィルタからの事後傾斜角(度)

空間を漂っているように見え、デバイスの実際の回転には反応しません。

静止状態での長期平均を使用して、ジャイロの DC オフセットを測定してみました。それは約 0.5 度/秒なので、これを差し引いても、このドリフトと応答の欠如は解消されません。

したがって、SensorFusion 7.0 ライブラリの使用に関して次の質問があります。

  1. ジャイロの回転方向を含む、9 つの自由度すべてについて、予想される入力軸と単位が正確に指定されている場所はどこですか?X、Y、Z 軸はジャイロ、磁気、加速度に対して一貫している必要があり、ジャイロの回転方向に対しては右手の法則が満たされる必要があると想定しています。しかし、もう一度言いますが、これはどこかに正確に文書化されているのでしょうか?
  2. アルゴリズムはジャイロ DC オフセット/ドリフトに対してどの程度敏感ですか?ハードウェアに合わせてこれを正確にゼロにする必要がありますか?
  3. メイン ループにキャリブレーション ルーチンが欠けているのでしょうか?
  4. SensorFusion (fRun_9DOF_GBY_KALMAN) は磁力計のキャリブレーションに対してどの程度敏感ですか?私の磁力計は 10 倍ずれているようですが、金属がたくさんある場所にあるため、磁場成分 (X、Y、Z) もずれているかどうかはわかりません。磁力計の読み取り値と磁場の歪みが最小限でなければ、アルゴリズムは適切に動作しないと考えられますか?コード内に硬鉄/軟鉄およびキャリブレーション ルーチンがいくつか含まれていたので、これらがキャリブレーションされていない磁力計の補正にどの程度役立つのか疑問に思っています。
  5. iFirstAccelMagLock = 1 の場合、何を意味しますか?これは、SensorFusionが磁力計とジャイロデータが正しく連携して動作していると認識しているという意味でしょうか?それとも、ジャイロと磁力計のデータが何らかの理由で壊れていても、iFirstAccelMagLock = 1 になる可能性はあるのでしょうか?言い換えれば、この変数は正常な動作を示す指標としてどの程度信頼できるのでしょうか?
  6. 9-DOF デバイスを 200 Hz でサンプリングし、1 要素 FIFO を使用して 200 Hz でデータを SensorFusion にロードしています。私のサンプルのアナログ帯域幅は約 50 Hz または 100 Hz です (これを設定することができます)。SV_9DOF_GBY_KALMANの出力も200Hzで読み取っています。このアプローチに何か問題はありますか?
  7. これを適切に動作させるために、他に何かアドバイスはありますか?
センサ・フュージョンRe: Problem with Drift in Orientation with SensorFusion 7.0<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

ジョナサン、

通常、競争力のある部品のポートのサポートは提供していません (Invensense は NXP の競合です) が、いくつかの質問にお答えしたいと思います (他の方も追加の提案があれば歓迎します)。順番に:

1. ユーザー ガイドのセクション 5.3 では、ハードウェア抽象化の問題について説明します。

2. カルマン フィルタには、追跡する変数 (XY および Z) の 3 つとしてジャイロ オフセットが含まれます。デバイスが回転している限り、それらの推定値は継続的に更新されます。磁力計とジャイロの参照ベクトルは、デバイスが静止しているときに安定性を保つ必要があります。

3. 申し訳ございませんが、コードレビューは提供できません。

4. 適切な磁気校正が非常に重要です。これがないと、9 軸の良好な結果は期待できません。私たちが組み込んでいるルーチンは、一般に、センサに対して空間的に固定された硬鉄/軟鉄源の処理をかなりうまく行います。一般的な干渉を処理するためのコードもいくつか含まれていますが、それをどれだけうまく処理できるかには限界があります。

5. コードのコメントを確認すると、 iFirstAccelMagLock は初期化コードが一度だけ実行されるようにするためのブール変数であることがわかります。この値から全体的な健全性を推測しないでください。

6.MCU に十分な MIPS がある限り、あなたが概説したアプローチに問題はないと思います。

7. マニュアルを読みます。私はできる限り多くの「集合知」をそこに盛り込もうとしました。

よろしくお願いいたします。

Mike

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎02-04-2026 03:35 AM
更新者: