Ich arbeite an einem Magnetometer AK8975 als Teil einer IMU. Was für mich sehr schwierig zu sein scheint. Dieser Chip gibt als Ausgabe einen 3D-Vektor aus, der das Erdmagnetfeld an jedem beliebigen Ort auf der Erde oder in der Nähe davon beschreibt.
Ich habe zwei Arten von Kursberechnungsalgorithmen ausprobiert: Einer ist einfach arctan(-y/x)
und der andere ist Neigungs- (Neigungs-) und Querneigungs- (Rollen-) Mathematik, wie unten erwähnt. Sowohl bei Neigung als auch bei Böschungen wird ein falsches Ausgangssignal ausgegeben.
Ich bin in der Lage, die korrekte Richtung bezüglich der Erde zu erhalten (unter Verwendung einfacher verfügbarer offener Studienressourcen), wenn sie gedreht wird und dabei horizontal bezüglich des Grundrisses bleibt, indem ich einen der beiden Algorithmen verwende.
Ich habe die Kalibrierung für weiche und harte Eisenfehler versucht. Ich könnte es in 3D plotten und zeigt eine perfekte 3D-Kugel. Funktioniert immer noch nicht bei Neigung oder Deklination.
Jeder Hinweis wird hilfreich sein.
Der Code und seine Implementierungen sind 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) ;
}
Wobei magnetom_x
, #_y
und #_z
Komponenten eines 3D-Vektors sind, die eigentlich RAW-Werte vom Magnetometer sind. Rollen und Nicken stammen von einem mysteriösen Kalman-Filter-Ausgang von Onboard-Beschleunigungsmesser und Gyroskop. Diese drei Sensoren befinden sich in ATAVRSBIN1 . Rollen und Nicken sind bis zu diesem Zeitpunkt in Ordnung.
Nun hätte eine einfache Kursberechnung nach journal_of_sensors_renaudin et al_2010c.pdf erfolgen sollen MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
und mit Ausgleich wie oben.
Gesamtcode ist einfach von OPEN AHRS .
Daten im Format Roll, Pitch und Yaw. Ich habe das Gerät nur mit der Hand gedreht. Die ersten drei haben sich jeweils nur auf Rollen, Nicken und Gieren konzentriert. Bei Rest zwei wird das Gerät zuerst um 45 Grad entlang X gedreht (gerollt), dann entlang des lokalen Z des Magnetometers gedreht. Dann wurde dasselbe mit einer Drehung um etwa 45 Grad entlang Y (schräg) wiederholt, dann entlang des lokalen Z des Magnetometers gedreht.
Die Diagramme wurden im Bereich von -180 bis 180 Grad dargestellt.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf Roll.
Winkel in Grad in einer Datei Die YAW-Eigenschaften auf Pitch.
Winkel in Grad in einer Datei Die YAW-Eigenschaften von Yaw selbst.
Winkel in Grad in einer Datei Die YAW-Eigenschaften beim Gieren mit 45 Grad Rollwinkel.
Winkel in Grad in einer Datei Die GIER-Eigenschaften beim Gieren mit 45 Grad Neigung.
Hinweis: Für die letzten 2 Bilder: Zuerst in Ausgangsposition gehalten, das ist für alle gleich (siehe txt-Dateien). Dann um 45 Grad gerollt und dann unter Verwendung des ebenen Geräts (mit Magnetometer) entlang der Z-Achse des Magnetometers gedreht.
In ähnlicher Weise wurde das Gerät für das letzte Bild um 45 Grad geneigt, dann entlang der Z-Achse des Magnetometers.
Ich hoffe, diese helfen bei der Lösung meines Problems.
Neue Entwicklungen sind wie folgt:
Ich habe etwas an der Überschrift gearbeitet. Ich habe folgende Ausgabe. csv
Ich mag deine Grafiken. Sie zeigen deutlich, dass Rollen, Neigen und Gieren zu funktionieren scheinen. Herzliche Glückwünsche! Das ist schon mehr Fortschritt, als die meisten Menschen machen.
Ich vermute, dass der von Ihnen präsentierte Code "den falschen" MAG_Heading-Wert berechnet, der sich von dem erwarteten MAG_Heading-Wert unterscheidet.
Es wäre viel einfacher für uns, Ihnen zu helfen, wenn Sie uns Folgendes geben würden: (Dies ist der Abschnitt „Beschreiben Sie die Symptome“ von „How To Ask Questions The Smart Way“ )
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!!! -Neu -IMU !!! ; http://www.rcgroups.com/forums/showthread.php?t=1436742&page=6 ; http://aeroquad.com/showthread.php?691-Halten-Sie-den-Kurs-mit-HMC5843-Magnetometer ; usw.
Der Anwendungshinweis für das LSM303 enthält eine nützliche Anleitung zur Kalibrierung eines neigungskompensierten Kompasses, die auf Ihr Problem anwendbar ist. Es ist ziemlich detailliert, sonst hätte ich die Berechnungen hier umgeschrieben. Beachten Sie, dass die Beschleunigungsmesserwerte für vollständige Nick-, Roll- und Gierberechnungen 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.
Raul2047
Martin Thomson
Jason R
Joda
Rick2047
Rick2047
Raketenmagnet
Vicatcu
Rick2047
Rick2047
Rick2047
Kevin Vermeer
davidcary
Klatsch
Rick2047
davidcary
Rick2047
Benutzer108380
Benutzer108380
pazel1374