Ich arbeite an einem Magnetometer AK8975, das Teil einer IMU ist. Das scheint mir sehr knifflig zu sein. Dieser Chip liefert einen 3D-Vektor als Ausgabe, der das Erdmagnetfeld an einem beliebigen Ort auf der Erde oder in der Nähe beschreibt.
Ich habe zwei Arten von Steuerkursberechnungsalgorithmen ausprobiert: Eine ist einfach, arctan(-y/x)
und eine andere ist die Neigungsberechnung (Pitch) und die Bankberechnung (Roll). Sowohl bei Neigung als auch bei Böschungen wird falsch ausgegeben.
Ich bin in der Lage, die richtige Richtung für die Erde zu finden (unter Verwendung von einfachen verfügbaren, offenen Lernressourcen), wenn sie gedreht wird und mit einer der beiden Algen horizontal zum Grundriss gehalten wird.
Ich habe versucht, die Kalibrierung für Weich- und Harteisenfehler durchzuführen. Ich konnte es in 3D zeichnen und zeigt eine perfekte 3D-Kugel. Funktioniert immer noch nicht auf Neigung oder Neigung.
Jeder Zeiger wird hilfreich sein.
Der Code und seine Implementierungen lauten wie folgt:
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) ;
}
Wo magnetom_x
, #_y
und #_z
sind Komponenten eines 3D - Vektor , die tatsächlich RAW Werte aus dem Magnetometer. Roll und Pitch stammen von einem mysteriösen Kalman-Filter, der vom integrierten Beschleunigungsmesser und Gyroskop ausgegeben wird. Diese drei Sensoren befinden sich in ATAVRSBIN1 . Roll und Pitch sind bis zu diesem Zeitpunkt in Ordnung.
Jetzt eine einfache Überschrift Berechnung nach journal_of_sensors_renaudin et al_2010c.pdf hätte sein sollen MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
und mit Kompensation wie oben.
Der Gesamtcode stammt einfach von OPEN AHRS .
Daten in den Formaten Roll, Pitch und Yaw. Ich habe das Gerät nur mit der Hand gedreht. Die ersten drei konzentrierten sich auf Roll, Pitch und Yaw. Die restlichen zwei werden zuerst um 45 Grad entlang X (gerollt) und dann entlang des lokalen Z des Magnetometers gedreht. Dann wird dasselbe mit einer Drehung um 45 Grad entlang Y (geneigt) und dann entlang des lokalen Z des Magnetometers wiederholt.
Die Diagramme liegen im Bereich von -180 bis 180 Grad.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf Rolle.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf der Tonhöhe.
Winkel in Grad in einer Datei Die YAW-Eigenschaften von Yaw selbst.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf Yaw mit 45 Grad gerollt.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf Yaw mit einer Neigung von 45 Grad.
Hinweis: Für die letzten 2 Bilder: Zuerst in Ausgangsposition gehalten, das ist für alle gleich (siehe txt-Dateien). Dann 45 Grad gerollt und dann mit dem Flugzeuggerät (mit Magnetometer) entlang der Z-Achse des Magnetometers gedreht.
In ähnlicher Weise wurde das Gerät für das letzte Bild um 45 Grad entlang der Z-Achse des Magnetometers geneigt.
Ich hoffe, dass dies zur Lösung meines Problems beiträgt.
Neue Entwicklungen sind wie folgt:
Ich habe einige an der Überschrift gearbeitet. Ich habe folgende Ausgabe bekommen. csv
quelle
Antworten:
Ich mag deine Grafiken. Sie zeigen deutlich, dass Rollen, Nicken und Gieren zu funktionieren scheinen. Herzliche Glückwünsche! Das ist schon mehr Fortschritt als die meisten Leute machen.
Ich vermute, dass der von Ihnen präsentierte Code "den falschen" MAG_Heading-Wert berechnet, der sich von dem von Ihnen erwarteten MAG_Heading-Wert unterscheidet.
Es wäre für uns viel einfacher, Ihnen zu helfen, wenn Sie uns Folgendes geben würden: (Dies ist der Abschnitt "Beschreiben der Symptome" in "So stellen Sie Fragen auf intelligente Weise". )
Ich muss also spekulieren, dass Sie vielleicht auf die gleichen Probleme stoßen, die ich mir selbst mache :-).
Es scheint andere Leute zu geben, die an anderer Stelle sehr ähnlichen Code diskutieren: 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 ; etc.
quelle
Der Anwendungshinweis für das LSM303 enthält eine nützliche Anleitung zum Kalibrieren eines Kompasses mit Neigungskompensation, der für Ihr Problem geeignet ist. Es ist ziemlich detailliert, sonst hätte ich die Berechnungen hier umgeschrieben. Beachten Sie, dass die Beschleunigungsmesserwerte für die Berechnung der vollständigen Nick-, Roll- und Gierbewegungen erforderlich sind, da eine Drehung um die Achse der Magnetfeldlinien zu keiner Änderung der Magnetometerwerte führt. Ebenso für die Schwerkraft mit dem Beschleunigungsmesser.
quelle