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
źródło
Odpowiedzi:
Lubię twoje wykresy. Wyraźnie pokazują, że przechylenie, pochylenie i odchylenie wydają się działać. Gratulacje! To już większy postęp niż większość ludzi.
Zgaduję, że przedstawiony kod oblicza „niewłaściwą” wartość MAG_Heading, inną niż oczekiwana wartość MAG_Heading.
O wiele łatwiej byłoby nam pomóc, jeśli dałeś nam: (To jest sekcja „opisz objawy” w „Jak zadawać pytania w inteligentny sposób” )
Pozostaję więc spekulować, że może napotykasz te same problemy, które sam sobie stawiam :-).
Wydaje się, że istnieją inne osoby omawiające bardzo podobny kod gdzie indziej: 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 ; itp.
źródło
Uwaga aplikacja dla LSM303 posiada użyteczną przewodnik kalibracji kompas z kompensacją nachylenia, który ma zastosowanie do Twojego problemu. Jest dość szczegółowy, w przeciwnym razie ponownie zapisałbym obliczenia tutaj. Należy zauważyć, że wartości akcelerometru są niezbędne do obliczeń pełnego skoku, przechylenia i odchylenia, ponieważ obrót wokół osi linii pola magnetycznego nie powoduje zmiany wartości magnetometru. Podobnie dla grawitacji z akcelerometrem.
źródło