アプリケーションに必要な精度によっては、いくつかの問題を解決する必要がある場合があります。
加速度計の軸は校正されていますか?相互に垂直ではない軸を持ち、各軸の応答特性が大幅に異なるMEM加速度計を見てきました(通常、XとYは一致し、Zは異なります)。デバイスが提供する物理的な読み取り値から、理想的なXYZ軸を合成する必要があります。(Googleの「加速度計のキャリブレーション」。)
磁力計の軸は校正されていますか?確認がはるかに難しいことを除いて、上記と同様の問題:均一な校正済み磁場を生成することは非常に困難です。周囲の地磁気を使用する場合は、作業環境とツールの局所的な磁気を注意深く制御する必要があります。(Googleの「磁力計のキャリブレーション」。)
加速度計と磁力計を個別に校正した後、それらの軸を相互に校正する必要があります。これらのデバイスは両方とも通常PCBにはんだ付けされているため、重大なミスアライメントがほぼ確実に発生します。多くの場合、ボードのレイアウトとデバイスのパラメータでは、XYZ軸を相互に対応させることさえできない場合があります。これはラボの観点から行うのが最も難しい部分である可能性があるため、両方の種類のセンサーを備え、すでに調整されている他のハードウェア(iPhoneやAndroid電話など)を使用して直接比較することをお勧めしますが、事前にデバイスを確認してください使用する)。通常、これは、前の2つのキャリブレーション行列を、相互に正しく位置合わせされたベクトルを生成するまで調整することによって実現されます。
相互にキャリブレーションされた磁気ベクトルと加速度計ベクトルを生成した後でのみ、他の回答者が提案したソリューションを適用できます。
磁力計と加速度計の両方が局所的な重力と磁場に対して動かない静的な解決策についてのみ説明しました。システムが急速に動いている間にリアルタイムで応答を生成する必要がある場合は、各センサーの時間動作を考慮する必要があります。これを行うには、2つの基本的な方法があります。1)各センサーに時間領域フィルターを適用して、それらの出力が共通の時間領域を共有するようにします(通常は遅延を追加します)。2)予測モデリングを使用して、センサー出力をリアルタイムで変更します(遅延は少なくなりますが、ノイズは多くなります)。
このようなアプリケーションに使用されるカルマンフィルターを見たことがありますが、それらをベクトルドメインに適用するには、オイラー行列の代わりにクォータニオンを使用する必要がある場合があります。クォータニオンは計算で使用する方が簡単ですが(行列に比べて必要な操作が少ない)、クォータニオンを理解して正しく理解するのがはるかに難しいことがわかりました。
または、まったく異なるパスを選択し、統計とデータフィッティングを使用して、上記のすべての作業を1つの巨大なステップで実行することもできます。次のように問題を検討します。6つの入力値(キャリブレーションされていない磁力計と加速度計からそれぞれXYZ)とデバイスへの参照(ハンドヘルドであり、ケースに矢印が描かれていると仮定)が与えられた場合、ケースの矢印が向いている磁気ベアリング、および重力ベクトル(ケースの傾き)に対する矢印の高さ。
キャリブレーションされた参照デバイス(上記のとおり)を使用して、キャリブレーション対象のデバイスとペアリングし、デバイスをさまざまな方向に向けて数百のデータポイントを取得します。次に、Matlab、MathCAD、R、SciPyなどの強力な数学パッケージを使用して非線形方程式を設定および解き、変換行列を作成します。