Je travaille sur un magnétomètre AK8975 faisant partie d'une IMU. Ce qui me semble très délicat. Cette puce donne un vecteur 3D en sortie décrivant le champ magnétique terrestre à n'importe quel endroit sur la terre ou à proximité.
J'ai essayé deux types d'algorithmes de calcul de cap: l'un est simple arctan(-y/x)
et l'autre est le calcul annulé par inclinaison (tangage) et inclinaison (roulis) comme mentionné ci-dessous. Tant l'inclinaison que les inclinaisons donnent une sortie incorrecte.
Je suis capable d'obtenir le cap correct par rapport à la terre (en utilisant les ressources d'étude disponibles simples disponibles) quand il est tourné en gardant horizontal par rapport au plan au sol en utilisant l'un des deux algos.
J'ai essayé l'étalonnage pour les erreurs de fer doux et dur. Je pourrais le tracer en 3D et montre une sphère 3D parfaite. Ne fonctionne toujours pas sur l'inclinaison ou la déclinaison.
Tout pointeur sera utile.
Le code et ses implémentations sont les suivants:
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) ;
}
Où magnetom_x
, #_y
et #_z
sont des composantes d'un vecteur 3D qui sont en fait des valeurs brutes du magnétomètre. le roulis et le tangage proviennent d'un mystérieux filtre Kalman émis par l'accéléromètre et le gyroscope embarqués. Ces trois capteurs sont en ATAVRSBIN1 . Le roulis et le tangage sont corrects jusqu'à cette étape.
Maintenant, un simple calcul de cap selon journal_of_sensors_renaudin et al_2010c.pdf aurait dû être MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
et avec compensation comme ci-dessus.
Le code global provient simplement de OPEN AHRS .
Données au format Roll, Pitch et Yaw. J'ai tourné l'appareil uniquement avec ma main. Les trois premiers se sont concentrés respectivement sur Roll, Pitch et Yaw. Les deux autres ont d'abord fait pivoter l'appareil d'environ 45 degrés le long de X (roulé) puis tourné le long du Z local du magnétomètre.
Les graphiques tracés dans la plage de -180 à 180 degrés.
Angles en degrés dans un fichier Les caractéristiques YAW sur Roll.
Angles en degrés dans un fichier Les caractéristiques YAW sur Pitch.
Angles en degrés dans un fichier Les caractéristiques YAW sur le lacet lui-même.
Angles en degrés dans un fichier Les caractéristiques YAW sur Yaw avec 45 degrés roulés.
Angles en degrés dans un fichier Les caractéristiques YAW sur Yaw avec 45 degrés inclinés.
Remarque: Pour les 2 dernières photos: Tout d'abord maintenu en position d'origine, c'est la même chose pour tous (reportez-vous aux fichiers txt). Puis roulé à 45 degrés puis en utilisant l'appareil plan (avec magnétomètre) a été tourné le long de l'axe Z du magnétomètre.
De même pour la dernière image, l'appareil a été incliné à 45 degrés puis le long de l'axe Z du magnétomètre.
J'espère que cela aidera à résoudre mon problème.
Les nouveaux développements sont les suivants:
J'en ai travaillé sur la rubrique. J'ai obtenu la sortie suivante. csv