8

私は加速度計と磁力計を持っており、それぞれが生のX、Y、Zの読み取り値を生成します。これから、オブジェクトの磁気方位を決定する必要があります。

私は三角法はそれほど得意ではありませんが、デバイスの回転に非常によく反応するだけでなく、そのようなデバイスの角度など、関連性がないと思われる動きにも反応する式をまとめました。指し示す方向に影響を与えない方法。平らに置いたり、デバイスを「回転」させたりします。

磁気方位を計算するための式は正しいと思いますが、入力のピッチとロールのラジアンは間違っていると思います。

ですから、私の質問の核心は(誰かが実際にこれを行う式を持っていない限り)、ピッチとロールに加速度計を使用して、ラジアンで角度を計算する方法です。

次に、見出しの数式自体に関する情報があれば便利です。

4

3 に答える 3

2

アプリケーションに必要な精度によっては、いくつかの問題を解決する必要がある場合があります。

  1. 加速度計の軸は校正されていますか?相互に垂直ではない軸を持ち、各軸の応答特性が大幅に異なるMEM加速度計を見てきました(通常、XとYは一致し、Zは異なります)。デバイスが提供する物理的な読み取り値から、理想的なXYZ軸を合成する必要があります。(Googleの「加速度計のキャリブレーション」。)

  2. 磁力計の軸は校正されていますか?確認がはるかに難しいことを除いて、上記と同様の問題:均一な校正済み磁場を生成することは非常に困難です。周囲の地磁気を使用する場合は、作業環境とツールの局所的な磁気を注意深く制御する必要があります。(Googleの「磁力計のキャリブレーション」。)

  3. 加速度計と磁力計を個別に校正した後、それらの軸を相互に校正する必要があります。これらのデバイスは両方とも通常PCBにはんだ付けされているため、重大なミスアライメントがほぼ確実に発生します。多くの場合、ボードのレイアウトとデバイスのパラメータでは、XYZ軸を相互に対応させることさえできない場合があります。これはラボの観点から行うのが最も難しい部分である可能性があるため、両方の種類のセンサーを備え、すでに調整されている他のハードウェア(iPhoneやAndroid電話など)を使用して直接比較することをお勧めしますが、事前にデバイスを確認してください使用する)。通常、これは、前の2つのキャリブレーション行列を、相互に正しく位置合わせされたベクトルを生成するまで調整することによって実現されます。

  4. 相互にキャリブレーションされた磁気ベクトルと加速度計ベクトルを生成した後でのみ、他の回答者が提案したソリューションを適用できます。

磁力計と加速度計の両方が局所的な重力と磁場に対して動かない静的な解決策についてのみ説明しました。システムが急速に動いている間にリアルタイムで応答を生成する必要がある場合は、各センサーの時間動作を考慮する必要があります。これを行うには、2つの基本的な方法があります。1)各センサーに時間領域フィルターを適用して、それらの出力が共通の時間領域を共有するようにします(通常は遅延を追加します)。2)予測モデリングを使用して、センサー出力をリアルタイムで変更します(遅延は少なくなりますが、ノイズは多くなります)。

このようなアプリケーションに使用されるカルマンフィルターを見たことがありますが、それらをベクトルドメインに適用するには、オイラー行列の代わりにクォータニオンを使用する必要がある場合があります。クォータニオンは計算で使用する方が簡単ですが(行列に比べて必要な操作が少ない)、クォータニオンを理解して正しく理解するのがはるかに難しいことがわかりました。

または、まったく異なるパスを選択し、統計とデータフィッティングを使用して、上記のすべての作業を1つの巨大なステップで実行することもできます。次のように問題を検討します。6つの入力値(キャリブレーションされていない磁力計と加速度計からそれぞれXYZ)とデバイスへの参照(ハンドヘルドであり、ケースに矢印が描かれていると仮定)が与えられた場合、ケースの矢印が向いている磁気ベアリング、および重力ベクトル(ケースの傾き)に対する矢印の高さ。

キャリブレーションされた参照デバイス(上記のとおり)を使用して、キャリブレーション対象のデバイスとペアリングし、デバイスをさまざまな方向に向けて数百のデータポイントを取得します。次に、Matlab、MathCAD、R、SciPyなどの強力な数学パッケージを使用して非線形方程式を設定および解き、変換行列を作成します。

于 2010-08-30T06:14:59.500 に答える
1

オイラー角ロールピッチヨーを指します。

于 2010-08-18T17:22:29.073 に答える
1

あなたは十分な次元で考えていません。これはたった2次元での答えであり、「Z」が常に重力と整列することを保証する方法を見つけることができれば、それは素晴らしい働きをします。

int heading=180-atan2(mag_datX, mag_datY)/0.0174532925; // 0/359=N, 90=E, 180=S, 270=W 

(デバイスから直接読んでいる場合-おそらくX、Y、ZではなくX、Z、Yを返すことに注意してください!)

ただし、これは2Dコンパスの問題ではありません。針をコンパスから取り出し、重力が「水平」を維持するのに役立たないようにバランスをとると、「北」が少し上を向くか、ダウン-地球上のどこにいるかによって異なります(または、極にいる場合は、直接上または下に!)。

したがって、3つの値すべてから3次元ベクトルを計算する必要があります。これは行列演算です。

于 2018-11-08T12:15:59.540 に答える