私はコンパスの方向を知る必要がある組み込みデバイスに取り組んでいます。私は磁力計の調整とコンパスの方向の検出のために、センサ フュージョン ライブラリ (ありがたいことに!) とともに FXOS8700 を使用しています。
しかし、キャリブレーションの結果は必ずしも信頼できるとは限りません。つまり、特定の調整後、コンパスの方向が正しい値から +/- 40 度ずれているということです。数回のキャリブレーションの後、正しいコンパスの方向を取得できましたが、数回のキャリブレーションの後、正しいコンパスの方向を取得できませんでした。
当社のアプリケーションでは、スマートフォンとは異なり、デバイスをインストールした後にデバイスの傾きや磁場の強度が変化しないアプリケーションであるため、キャリブレーション機能を継続的に使用していません。最初に一度キャリブレーションを実行し、補正ベクトルとマトリックスを保存して、後で適用します。
SO、センサ フュージョン ライブラリに実装されているキャリブレーション アルゴリズムは、常に正しいキャリブレーション値を返すことが期待されるのでしょうか?もしそうなら、ここで何が見逃されているのか、またはどうすれば問題の根本を突き止めることができるのか、何かアイデアはありますか?そうでない場合、不適切な調整を識別して回避する方法はありますか?
役に立つかもしれないので、いくつかの観察結果をメモします。
1.フィット誤差 2% でのキャリブレーション後、コンパスの方向は不正確になりますが、フィット誤差 5% でのキャリブレーション後、コンパスの方向は完全に正確になります。
2. デバイスを北に向けたときにコンパスの方向が間違っている場合、南に向けたときにもコンパスの方向が間違っていることがほぼ常に観察されています。同様に、東を指すコンパスの方向が間違っている場合、西を指すコンパスの方向も間違っています。
3. テストは同じデバイス、PCB で実行されました。ハードウェアの変更はありません。
よろしくお願いいたします。
クリソリン
進捗状況をお知らせいただきありがとうございます。
よろしくお願いいたします。
Mike
ありがとう、マイク。
はい、その数字はKL25Zのものでした。私はmagCalとeCompassの両方を使っています。
私はフリーダムボードを使って開発環境を構築していました。しかし、オーバーサンプリング比を 8 に戻すだけで、問題は部分的に解決されるようです。2 つのコンパスの方向間の時間差 (40 ミリ秒) がアプリケーションには大きすぎるため、以前にオーバーサンプリング比を 2 に下げました。SO、オーバーサンプリング比を 8 に戻した後、最大誤差は +/-15 度のみになりました
。将来的にデバイス上にさらに有害な磁性材料が付着しない限り、これで十分でしょう。
サポートしてくれてありがとう ![]()
ところで、OSR と ODR の調整について質問があります。それについて新たな議論を始めるつもりです。再度、感謝します。
ありがとうございます
クリソリン
クリソリン、
専門家に確認したところ、これらの関数はゼロや無限大を返すべきではないようです。正しいデータが供給されていると確信していますか?
上記のグラフは、かなり妥当に見えるので、既成のプロジェクトを実行している KL25Z のグラフであると思われます。変更がコードに及ぼす影響をすぐに確認できるように、そのプラットフォームでこの問題のデバッグを実行することをお勧めします。作業中の(継続的に調整された)プロジェクトから始めます。問題のない結果が得られたことを確認し、各ステップで段階的な変更と結果の確認を開始します。
Mike
クリソリン、
添付した図はKL25Z用ですか、それともボード用ですか?
一般的に、私たちは適合誤差に頼りますが、上のグラフの見た目が気に入るかどうかも確認します (「調整済み」表示は円形になるはずです)。
ハードウェア抽象化レベルでは、センサの物理的な方向と、使用するグローバル参照フレームの 2 つの問題を考慮する必要があります。8700 センサのみを使用しているため、おそらく HAL の問題は発生しません。さまざまな設定は、そのデバイスにおいて、必要なすべての参照フレームに対して一貫しています。別個の磁気センサと加速度センサおよび/またはジャイロセンサがある場合は、物理センサが一貫した参照フレームにマップされるように、ハードウェア抽象化レベルを調整する必要がある場合があります。その議論はおそらく、ディスカッション掲示板で私が行える範囲を超えています。
magCal のみを使用していますか、それとも eCompass の完全実装を使用していますか?
現在、ライブラリのバージョンは 5.00 であり、数週間以内に 4.22 が廃止される予定です。新しいバージョンには、eCompass のベアメタル、非 RTOS バージョンがいくつかあります。したがって、いずれにせよアップグレードしたほうがよいかもしれません。新しいバージョンは freescale.com/sensorfusion にあります。
固有値の問題については数学の専門家に確認する必要があります。彼は私が考えつくよりももっと賢い答えを持っているでしょう。
Mike
こんにちは、Mikeさん
ご意見をありがとうございました。
いくつかのことを探索し、試してきました。いくつかの質問
1.1 回限りのキャリブレーションに使用している停止条件は、適合誤差が 5% 未満になることです。適合誤差は、キャリブレーションが十分であるかどうかを知るための良い手段ですか?キャリブレーションが適切かどうかを確認する他の方法はありますか?
2. HAL については、センサ フュージョン ライブラリの ApplyHAL() 関数は、ハードウェアではなく OS の座標系に依存しているようです。しかし、 Freescale Sensor Fusion for Kinetis 製品開発キット ユーザーガイドドキュメントでは、別のことが示唆されているようです。それで、使用すべきコードのバージョンはあるのでしょうか?現在、build422 - Nov2014 を使用しています。
3. 現時点では、センサ フュージョン ライブラリ (WIN8 として定義された THISCOORDSYSTEM) で使用可能な HAL を使用しています。これにより、コンパスの方向がかなり正確になります。PCB 上のチップの方向に合わせて HAL を作成したい場合、ガイドはありますか?シングルチップ(FXOS8700)を使用しています。
4. 7 要素および 10 要素のキャリブレーション関数では、固有ベクトルと値は 0/Infinity です。結局、これらの関数は有用なキャリブレーションソリューションを返しません。これは予想通りでしょうか?確認したところ、fmatA マトリックスには実際にはゼロ以外の固有値とベクトルがありますが、関数 eigencompute() は固有値とベクトルを 0/無限大としてのみ返します。
KL25Z を使用している間は問題は発生していません。これが私のスクリーンショットです:
ありがとうございます
クリソリン
弊社の参照コードを使用したときに、KL25Z でも同じ問題が発生しましたか?非常に醜い磁場がない限り、そのようなことは起きないはずです。これが、すべての視覚化機能をツールボックスに組み込んだ理由の 1 つです。そうしないとデバッグするのが本当に難しくなります。製品に磁気充電フィルムまたは類似の素材が含まれていない限り、磁気較正によって得られる精度は、ほとんどの人が実感できる最高値で約 5 度程度になると思います。10 未満なら難しくないはずです。10を超えても、作業を続けてください。
参考までに、MCU にフラッシュ スペースがあり、予備の UART がある場合は、弊社のリファレンス プロジェクトの 1 つからシリアル インターフェースを導入できます。ツールボックスのグラフィック表示は間違ったボードのものになりますが、その他の機能は正常に動作するはずです。
確認する必要があるもう 1 つの点は、すべてのセンサの物理的な向きがリファレンス ボード上のセンサと同じであることです。センサに一貫した参照フレームがない場合、融合ルーチンで非常に奇妙な動作が発生する可能性があります。幸いなことに、ボードが一致しない場合はコードで簡単に修正できます。HAL (ハードウェア抽象化コード) を探します。
ありがとう、マイク。
異なる MCU を搭載したカスタム ボードで開発しています。SO、センサー フュージョン ツールボックスの GUI を使用することはできません。
しかし、私はKL25Z/FXS-MULT1-RevCのGUI上でグラフを観察しました。
ありがとうございます
クリソリン
クリソリン、
センサー フュージョン ツールボックスの「磁気」タブの表示はどのようになっていますか?こちらは、K64F/MULT2-B ボードの組み合わせでキャプチャしたものになります。
磁気バッファをクリアするには、「ファイル」->「リセット」を使用できます。次に、1 分ほどかけて、できるだけ多くの方向にボードを回転させます。実際にライブラリには 3 つの異なる磁気キャリブレーション オプションが組み込まれています。
「磁気キャリブレーション」機能は、電源投入時に 4 要素ソルバーで開始されます。ある程度の適合が達成されると、7 要素ソルバーが試されます。7 要素の方が優れている場合は、それに切り替わります。次に、10 要素ソルバーを試します。
磁気的に完璧な環境では、上記の XY、YZ、ZX の図に円形のパターン (上記のような) が表示されるはずです。ハードアイアンオフセットは正常であり、予想通りです。デバイスに鉄系材料が含まれている場合は、上記の 1 つ以上の項目に省略記号が表示されます。「キャリブレーション済み表示」チェックボックスをクリックすると、アルゴリズムが生の測定値をキャリブレーション済みデータにマッピングする方法を確認できます。
多くの場合、この表示は「センサ」タブと組み合わせて使用すると、問題の診断に必要な情報を提供します。「Magnetics」タブは、新しい値が理想的な球にどのようにマッピングされるかをリアルタイムで確認できるので気に入っています。ボードを動かして何が起こるか見てみましょう。
そういえば、どんなボードを使っていますか?
Mike
本当にありがとう、マイク。
熱条件に関しては、キャリブレーション直後、キャリブレーションが行われたのと同じ場所で、誤ったコンパスの方向が観察されます。つまり、熱環境は変化しなかったはずです。
鉄分の影響については、仕事机に東西南北を記して実験しています。同じ場所で、いくつかの調整を行った後、正しいコンパスの方向を取得しました。また、空きスペースで保持してみました。問題は依然として残っています。
ありがとうございます
クリソリン
クリソリン、
すぐに部分的に回答し、残りの部分については同僚に相談します。
まず、アプリケーションの温度環境はどの程度制御されていますか?温度変化によりセンサの読み取り値が変化するため、質問します。継続的なキャリブレーションを行うと、その問題は解消されます。ただし、1 回限りの調整を行うため、その対象となります。
次に、テストを行っている環境は磁気的にどの程度クリーンですか?センサーに対して空間的に固定されていない鉄材料は、読み取り値を狂わせます。たとえば、オフィスでセンサを調整し、それを木製の机の上の特定の場所に置くと、読み取り値は変化します。その理由は、デスクトップと机の脚を接続する鉄製のブラケットがあるからです。センサをテーブル上でどちらかの方向に 6 インチ動かすと、正しい読み取り値が復元されます。ここでの問題はセンサやキャリブレーション設定ではなく、環境そのものにあります。実際、私たちのオフィスエリアには、ビルディング内の金属によって磁場が 90 度ずれる場所が 1 か所あります。昔ながらの機械式コンパスでも同じことが言えます。
環境自体に何か問題がない限り、キャリブレーション直後の測定値に 40% の誤差は見られません。私が標準的に行うテストは、センサーを持ち上げて、干渉のない自由な空間に保持することです。
観測された誤差が約 180 度対称であることは当然のことです。これは、硬鉄と軟鉄の歪みがどのように作用するかの結果です。それら(およびそれらを修正するアルゴリズム)は、本質的に対称的です。
よろしくお願いいたします。
Mike