磁力計の動的較正


19

私はIMUの一部である磁力計AK8975に取り組んでいます。それは私にとって非常に難しいようです。このチップは、地球上の任意の場所またはその近くの地球の磁場を表す3Dベクトルを出力として提供します。

次の2つのタイプの見出し計算アルゴリズムを試しました。1つは単純でarctan(-y/x)、もう1つは傾き(ピッチ)とバンク(ロール)キャンセルされた数学です。傾斜とバンクの両方が間違った出力を与えます。

2つのアルゴリズムのいずれかを使用して、平面図を水平に保ちながら回転させると、地球に対して正しい見出しを取得することができます(簡単な利用可能なオープンスタディリソースを使用)。

ソフトアイアンとハードアイアンのエラーのキャリブレーションを試みました。3Dでプロットでき、完璧な3D球体を表示できます。それでも、傾斜や赤緯では機能しません。

任意のポインターが役立ちます。

コードとその実装は次のとおりです。

void Compass_Heading()
{
  double MAG_X;
  double MAG_Y;
  double cos_roll;
  double sin_roll;
  double cos_pitch;
  double sin_pitch;

  cos_roll = cos(roll);
  sin_roll = sin(roll);
  cos_pitch = cos(pitch);
  sin_pitch = sin(pitch); 

  //// Tilt compensated Magnetic filed X:
  MAG_X = magnetom_x*cos_pitch + magnetom_y*sin_roll*sin_pitch + magnetom_z*cos_roll*sin_pitch;
  //// Tilt compensated Magnetic filed Y:
  MAG_Y = magnetom_y*cos_roll-magnetom_z*sin_roll;
  //// Magnetic Heading


  MAG_Heading = atan2(-MAG_Y, MAG_X) ;

}

ここでmagnetom_x#_yおよび#_zは、実際に磁力計からのRAW値である3Dベクトルのコンポーネントです。ロールピッチは、オンボードの加速度計とジャイロスコープからの神秘的なカルマンフィルター出力からのものです。これら3つのセンサーはATAVRSBIN1にあります。この段階まで、ロールとピッチは問題ありません。

これで、journal_of_sensors_renaudin et al_2010c.pdfによる単純な見出し計算はMAG_Heading = atan2(-magnetom_y, magnetom_x) ;、上記のように補正された はずです。

全体的なコードは、単にOPEN AHRSからのものです。


Roll、Pitch、およびYaw形式のデータ。手だけでデバイスを回転させました。最初の3つは、それぞれロール、ピッチ、ヨーのみに集中しています。残りの2つは、最初にデバイスをXに沿って約45度回転し(回転)、次に磁力計のローカルZに沿って回転します。その後、Yに沿って約45度回転(ピッチ)し、磁力計のローカルZに沿って回転します。

グラフは-180〜180度の範囲内でプロットされます。

ロール ファイル角度(度単位)ロールのYAW特性。

ピッチ ファイル角度(度単位)ピッチのYAW特性。

ヨー ファイル角度(度)ヨー自体のYAW特性。

ヨーワート45度傾斜(ロール) ファイル内の度単位の角度 45度ロールされたヨーのYAW特性。

ヨーwrt 45度バンク(ピッチ) ファイル内の度単位の角度 45度ピッチのヨーのYAW特性。

注:最後の2枚の写真の場合:最初はホームポジションに保持され、すべて同じです(txtファイルを参照)。次に、45度回転させてから、平面デバイス(磁力計付き)を使用して、磁力計のZ軸に沿って回転させます。

同様に、最後の画像の場合、デバイスは磁力計のZ軸に沿って45度ピッチされています。

これらが私の問題の解決に役立つことを願っています。


新しい開発は次のとおりです。

見出しにいくつか取り組みました。私は次の出力を得ました。 ロール csv

ピッチ csv

ヨー csv



まだ答えがありません!!

4
実装しようとしている数学と、実装に使用したコードを表示すると、より多くの応答が得られると思います。「うまくいかない、助けて」ということ以外、私たちが他に進むことはほとんどありません。それがあなたの質問の読み方です。ごめんなさい!
マーティントンプソン

磁力計の使用は非常に専門的な分野であり、比較的専門知識のある人はほとんどいません。何回かあなたの質問を読んで、私はまだ何が悪いのか正確にはわかりません。あなたはそれが「間違った出力」を与えると言いますが、それはかなりあいまいです。たぶん、いくつかの数値例?
ジェイソンR

1
これは、センサー出力を解釈する方法、またはセンサーが提供するx、y、zベクトルからナビゲーションに役立つ指標を計算する方法についての質問ですか?同じセンサーの別のインスタンスで測定値を再現できますか?
vicatcu

1
@Rahul-これがもっと注目されていないことに驚いています!
ケビンフェルメール

回答:


8

あなたのグラフが好きです。ロール、ピッチ、ヨーが機能しているように見えることを明確に示しています。おめでとうございます!それは、ほとんどの人が行うよりもすでに多くの進歩です。

あなたが提示したコードは、予想したMAG_Headingの値とは異なる「間違った」MAG_Headingの値を計算していると推測しています。

あなたが私たちを与えてくれたなら、私たちがあなたを助けるのははるかに簡単でしょう:(これは「スマートな方法で質問する方法」の「症状を説明する」セクションです )

  • AK8975の時間でいくつかの一点での出力値がm_x磁力、m_y、及びm_z。
  • 同じ瞬間のピッチとロールの値
  • これらの値から計算されたと思われるMAG_Heading出力値
  • 正しいMAG_Headingが期待されるもの

だから、おそらくあなたが私のために自分と同じ種類の問題を抱えているのではないかと推測するしかありません:-)。

  • sin()およびcos()およびatan2()関数はどの角度形式を想定していますか?フォーマットのピッチとロールをそのフォーマットに保存する間に何らかの変換を行う必要がありますか?その形式から必要なMAG_headingに変換する必要がありますか?(ブラッド、度、またはラジアン?浮動小数点または固定小数点?)
  • 生のm_x、m_y、m_zの値にオフセットを減算する必要があるオフセットがありますか?
  • コードで想定されている方法ですべての部品が並んでいますか?特に、ピッチとロールの軸は磁力計の軸と並んでいますか?(m_xはロール軸に沿って前方を指すはずですか?m_yはピッチ軸に沿って右を指すはずですか?)
  • このコードに入力する前に、何らかのセンサー値または別のセンサー値(おそらくm_z)を無効にする必要がありますか?
  • このコードは、内部値を破壊する何らかの割り込みによって中断されているのでしょうか?誰かが割り込みルーチンに「除算」を入れた後、プログラム内の他の場所でのすべてのトリガー関数の計算が間違った結果になることが多いという別のプロジェクトを思い出すようです。
  • このコードが実際に実行を終了しないほど頻繁に割り込みが発生していますか?

他にも非常によく似たコードを議論している人がいるようです:http : //diydrones.com/forum/topics/heading-from-3d-magnetometer ; http://diydrones.ning.com/profiles/blogs/dcm-imu-theory-first-draft ; http://aeroquad.com/showthread.php?1138-REVOLUTION!!!-New-IMU !!! ; http://www.rcgroups.com/forums/showthread.php?t=1436742&page=6 ; http://aeroquad.com/showthread.php?691-Hold-your-heading-with-HMC5843-Magnetometer ; 等


今見ました。
リック2047年

\ 1 / [ロール、ピッチ、ヨー、および(Mx、My、Mz)]のcsvファイルを作成しています。\ 2 / MAG_Headingは、少なくとも2つの連続する象限まで、ロールとピッチの変化に伴って変化しないはずです。方位は、NEを向いている場合、傾斜の上下の回転方向で地平線から90度を超えるまでNEを指し続ける必要があり、バンキングまたは組み合わせの場合は同じでなければなりません。
リック2047年

\ 3 /すべての内部計算はラジアンで行われ、すべてのコンサイン関数はラジアンのみを想定しています。表示の場合、値のみがコピーされ、度に変換されます。\ 4 /浮動小数点。\ 5 /すべてのセンサーが調整され、SENSOR_SIGN [9]を使用した調整のために、可能なすべての関連する組み合わせが試行されました。\ 6 /ポーリングに基づいて実行しているため、割り込みベースのすべての問題は発生しません。
Rick2047

私のポイント\ 1 /ここでは、すべてのグラフについて、対応するcsvファイルも添付しています。または、何か他のものを求めました。この良い反応をありがとう。:)努力と時間が許す限り、「スマートな方法で質問する方法」を実装します。:)
Rick2047

\ 1 / [ロール、ピッチ、ヨー、および(Mx、My、Mz)(見出し、赤緯)]で作業します。
リック2047年

1

LSM303 のアプリケーションノートには、問題に適用できる傾斜補正コンパスのキャリブレーションに役立つガイドがあります。それは非常に詳細ですが、そうでなければここで計算を書き直したでしょう。磁力線の軸を中心に回転すると磁力計の値が変化しないため、ピッチ、ロール、ヨーの全計算には加速度計の値が必要です。加速度計を使用した重力についても同様です。


リンクは、同じ方程式で異なる符号を示します。他のすべての組み合わせを試します。
リック2047年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.