Sto lavorando su un magnetometro AK8975 che fa parte di una IMU. Il che sembra essere molto complicato per me. Questo chip fornisce un vettore 3D come output che descrive il campo magnetico terrestre in qualsiasi punto della terra o vicino ad esso.
Ho provato due tipi di algoritmi di calcolo dell'intestazione: uno è semplice arctan(-y/x)
e un altro è l'inclinazione (inclinazione) e l'inclinazione (inclinazione) della matematica annullata, come indicato di seguito. Sia sull'inclinazione che sulle sponde danno un risultato sbagliato.
Sono in grado di ottenere la direzione corretta verso la terra (usando semplici risorse di studio aperte disponibili) quando viene ruotata mantenendo orizzontale rispetto al piano terra usando uno dei due algos.
Ho provato la calibrazione per errori di ferro morbido e duro. Potrei tracciarlo in 3D e mostra una sfera 3D perfetta. Non funziona ancora su inclinazione o declinazione.
Qualsiasi puntatore sarà utile.
Il codice e le sue implementazioni sono i seguenti:
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) ;
}
Dove magnetom_x
, #_y
e #_z
sono componenti di un vettore 3D che in realtà sono valori RAW magnetometro. roll and pitch provengono da un misterioso filtro Kalman dall'accelerometro e dal giroscopio di bordo. Questi tre sensori sono in ATAVRSBIN1 . Il rollio e il pitch sono ok fino a questo punto.
Ora un semplice calcolo dell'intestazione secondo journal_of_sensors_renaudin et al_2010c.pdf avrebbe dovuto essere MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
e con una compensazione come sopra.
Il codice complessivo proviene semplicemente da OPEN AHRS .
Dati in formato Roll, Pitch e Yaw. Ho ruotato il dispositivo solo con la mia mano. I primi tre sono stati concentrati solo su Roll, Pitch e Yaw rispettivamente. Gli altri due vengono prima ruotati del dispositivo di circa 45 gradi lungo X (arrotolato), quindi ruotati lungo la Z locale del magnetometro. Quindi lo stesso è stato ripetuto con una rotazione di circa 45 gradi lungo Y (inclinato), quindi ruotato lungo la Z locale del magnetometro.
I grafici tracciati nell'intervallo da -180 a 180 gradi.
Angoli in gradi in un file Le caratteristiche YAW su Roll.
Angoli in gradi in un file Le caratteristiche YAW su Pitch.
Angoli in gradi in un file Le caratteristiche YAW su Yaw stesso.
Angoli in gradi in un file Le caratteristiche YAW su Yaw con 45 gradi arrotolati.
Angoli in gradi in un file Le caratteristiche YAW su Yaw con inclinazione di 45 gradi.
Nota: per le ultime 2 foto: prima mantenute nella posizione iniziale, lo stesso vale per tutti (consultare i file txt). Quindi ruotato di 45 gradi, quindi utilizzando il dispositivo piano (con magnetometro) è stato ruotato lungo l'asse Z del magnetometro.
Allo stesso modo per l'ultima immagine il dispositivo è stato inclinato di 45 gradi, quindi lungo l'asse Z del magnetometro.
Spero che questi possano aiutare a risolvere il mio problema.
I nuovi sviluppi sono i seguenti:
Ho lavorato un po 'sulla rubrica. Ho seguito l'output. csv