Pracuję nad magnetometrem AK8975 będącym częścią IMU. To wydaje mi się bardzo trudne. Ten układ daje wektor 3D jako wyjście opisujące ziemskie pole magnetyczne w dowolnym miejscu na ziemi lub w jej pobliżu.
Wypróbowałem dwa typy algorytmów obliczania kursu: jeden jest prosty, arctan(-y/x)
a drugi to matematyka anulowania nachylenia (skoku) i przechylania (przechylenia), jak wspomniano poniżej. Zarówno skłonność, jak i banki dają złą produkcję.
Jestem w stanie uzyskać prawidłowy kurs na ziemi (przy użyciu prostych dostępnych otwartych zasobów do badań), gdy jest ona obracana, utrzymując poziomo na planie ziemi za pomocą dowolnego z dwóch alg.
Próbowałem kalibracji dla błędów miękkiego i twardego żelaza. Mógłbym wykreślić go w 3D i pokazać idealną kulę 3D. Nadal nie działa na nachylenie lub deklinację.
Każdy wskaźnik będzie pomocny.
Kod i jego implementacje są następujące:
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) ;
}
Gdzie magnetom_x
, #_y
i #_z
są składowymi wektora 3D, które w rzeczywistości są wartości RAW z magnetometru. roll i pitch pochodzą z tajemniczego wyjścia filtra Kalmana z pokładowego akcelerometru i żyroskopu. Te trzy czujniki są w ATAVRSBIN1 . Roll i pitch są w porządku do tego etapu.
Teraz proste obliczenie nagłówka według Journal_of_sensors_renaudin et al_2010c.pdf powinno być MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
z kompensacją jak wyżej.
Cały kod pochodzi z OPEN AHRS .
Dane w formacie Roll, Pitch i Yaw. Obróciłem urządzenie tylko ręką. Pierwsze trzy zostały skoncentrowane tylko na odpowiednio Roll, Pitch i Yaw. Pozostałe dwa są najpierw obracane wokół urządzenia o 45 stopni wzdłuż X (walcowane), a następnie obracane wzdłuż lokalnego Z magnetometru. Następnie to samo zostało powtórzone z obrotem około 45 stopni wzdłuż Y (pochylone), a następnie obracane wzdłuż lokalnego Z magnetometru.
Wykresy wykreślono w zakresie od -180 do 180 stopni.
Kąty w stopniach w pliku Charakterystyka YAW w Roll.
Kąty w stopniach w pliku Charakterystyka YAW na skoku.
Kąty w stopniach w pliku Charakterystyka YAW na samym Yaw.
Kąty w stopniach w pliku Charakterystyka YAW na Yaw z walcowaniem o 45 stopni.
Kąty w stopniach w pliku Charakterystyka YAW na Yaw z nachyleniem 45 stopni.
Uwaga: W przypadku ostatnich 2 zdjęć: Najpierw trzymane w pozycji wyjściowej, to samo dla wszystkich (patrz pliki TXT). Następnie Walcowane 45 stopni, a następnie za pomocą płaskiego urządzenia (z magnetometrem) zostało obrócone wzdłuż osi Z Magnetometru.
Podobnie dla ostatniego obrazu urządzenie zostało pochylone o 45 stopni, a następnie wzdłuż osi Z magnetometru.
Mam nadzieję, że pomogą one rozwiązać mój problem.
Nowe rozwiązania są następujące:
Pracowałem trochę nad nagłówkiem. Mam następujący wynik. csv