私は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度の範囲内でプロットされます。
ファイル内の度単位の角度 45度ロールされたヨーのYAW特性。
ファイル内の度単位の角度 45度ピッチのヨーのYAW特性。
注:最後の2枚の写真の場合:最初はホームポジションに保持され、すべて同じです(txtファイルを参照)。次に、45度回転させてから、平面デバイス(磁力計付き)を使用して、磁力計のZ軸に沿って回転させます。
同様に、最後の画像の場合、デバイスは磁力計のZ軸に沿って45度ピッチされています。
これらが私の問題の解決に役立つことを願っています。
新しい開発は次のとおりです。
見出しにいくつか取り組みました。私は次の出力を得ました。 csv