PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auswertung eines "3D Kompass"



MrNiemand
07.03.2007, 11:40
Hallo zusammen,

durch Zufall bin ich an folgenden Sensor gekommen http://www.pnicorp.com/productDetail?nodeId=cMM3

Damit kann ich bereits erfolgreich den Winkel zum Nordpol messen/berechnen . Wie halt auch bei einem normalen KompassModul wie z.b. dem CMPS03 o.ä.

Ich würde nun gerne den Winkel unabhängig von der Neigung des Modules berechnen, allerdings hab ich nicht die leisteste Idee, geschweigedessen einen Ansatz, wie ich da vorgehen könnte.

Kann mir da jemand auf die Sprünge helfen? Ich grüble schon seit Tagen, komm aber absolut nicht weiter.

MrNiemand
08.03.2007, 12:16
schade das es keine Antworten gibt. An was liegt es? Ist mein Problem einfach zu unklar geschildert?

Manf
08.03.2007, 12:36
Es geht sicher darum, die gemessenen Koordinaten in Kugelkoordinaten umzurechnen:
http://de.wikipedia.org/wiki/Kugelkoordinaten

http://upload.wikimedia.org/math/f/4/e/f4e446d70c4b413fc2d52855a2704976.png
http://upload.wikimedia.org/math/0/7/7/07776aaadb96920df6cc5e0dcd40b3a8.png

MrNiemand
08.03.2007, 21:52
@Manf: Danke für den Wikipedia Link.

Allerdings weis ich nicht, wie ich das ganze umsetzen kann.
Mein Problem ist ja folgendes: Wenn ich mit den x/y Sensoren mit Hilfe des Arctan den Winkel zum Erdmagnetfeld berechne, ist ja alles in Butter.

Wenn ich nun aber das Modul nach vorne, bzw. nach links kippe, erhalte ich ja nicht mehr den korrekten Winkel. Eben diesen Effekt will ich kompensieren.

Später wäre es natürlich nicht schlecht, wenn ich auch die Kippung nach links bzw vorne messen könnte (wenn mein Bot z.b. an einer Steigung steht).

@ voopster: Wie meinst du das mit dem Lagesensor? Meinst du mir reichen die Messwerte der 3 Magnetfeldsensoren nicht?

Das Modul habe ich ja schon, vor Arbeit scheue ich mich nicht, und solange das Modul eben liegt, funktioniert es auch schon astrein.

Manf
08.03.2007, 22:08
Kannst Du denn drei Komponenten der magnetischen Feldstärke messen?
x, y, und z
Aus denen sollte dann das Feld in Kugelkoordinaten ausgerechnet werden damit man die Komponenten r, phi und theta erhält.

Ist das bis dahin noch machbar oder geht es um die Berechnung der Winkelfunktionen?
Manfred

MrNiemand
08.03.2007, 22:17
Ja, die drei Feldstärken kann ich messen.

die Berechnung der Kugelkoordinaten leuchtet mir soweit auch ein.
Ist zum Glück ja auch nicht wirklich aufwendig, so dass das mein µC locker erledingen kann.
Aber wie komme ich von da aus zu meinen korregierten Winkeln?
Mein Mathematikwissen reicht zwar, um gegebene Zusammenhänge zu verstehen, aber mir daraus jetzt die Formeln herzuleiten, die ich benötige, schaffe ich allein leider nicht. Ich denke dafür einfach zu 2 dimensional.

Manf
09.03.2007, 08:32
Wenn die Richtung des Magnetfelds relativ zum Fahrzeug bekannt ist, dann kann es zum Beispiel wie links im Bild horizontal und in Richtung nach Norden stehen.
Die gleiche Richtung des Magnetfelds relativ zum Fahrzeug ergibt sich bei einer Drehung des Fahrzeugs um eine Achse parallel zum Magnetfeld.

voidpointer
09.03.2007, 08:33
Hallo,

leider bin ich auf dem Gebiet auch kein Profi, aber weil mich die Anwendung dieses Sensors auch interessiert, möchte ich mich mal an der Diskussion beteiligen. Ich kann mich erinnern, dass es vor einiger Zeit mal einen Thread bei mikrocontroller.net gab, wo jemand einen 3D-Magnetsensor im Modellflugzeug verwendet hat. Vielleicht suchst Du dort mal.

Also erstmal kenn ich mich nicht mit der Beschaffenheit des Erdmagnetfeldes aus. Die Frage ist, ob das Magnetfeld homogen ist (überall gleich stark) und weiter, wie es der Sensor erfasst. Das müsstest Du Dir anlesen. Ich gehe erstmal davon aus, dass der Sensor in der Lage ist, die drei Raumachsen zu trennen, also z.B. keine Überlagerung der Y- und Z-Achse stattfindet.

Wenn diese Voraussetzungen gegeben sind, würde ich vielleicht so vorgehen: Messe zunächst die Feldstärke der Z-Achse. Über den Arcus-Sinus von (Messwert / Maximalwert) erhält man die Neigung der Z-Achse zum Erdradius, also den Rollwinkel oder Gierwinkel oder die Kombination von beiden. Ob der Wert ein Rollwinkel oder Gierwinkel ist, stellt man dann durch analoge Berechung des Messwerts für die Y-Achse fest. Wenn man diesen Wert hat kann man schließlich den Messwert für die X-Achse interpretieren. Letztlich muss noch die Deklination des Erdmagnetfeldes herausgerechnet werden.

Sorry für den etwas naiven und möglicherweise unvollständigen Ansatz. Ich hatte zwar im Studium Höhere Mathematik, aber das liegt alles schon recht lang zurück. Letztlich läuft es ja auf die Anwendung von Rotationsmatritzen hinaus. Bin mir auch nicht ganz sicher, ob der Ansatz richtig ist, weil das Magnetfeld ja nur eine Komponente hat und nicht drei unabhängige. Kann Dir nur empfehlen, bei Wikipedia mal Artikel zu "Erdmagnetfeld", aber auch "Eulersche Winkel", "Drehmatrix", "3D-Computergrafik", insbesondere "Rendering-Pipeline" und "Koordinatentransformation" anzuschauen und die externen Links zu verfolgen.

Ich würde mich aber freuen, wenn Du hier nochmal über die Fortschritte mit dem Sensor berichtest.

Gruß, Achim.

MrNiemand
09.03.2007, 09:14
Also anbei mal 3 Messreihen, eine Drehung ohne Kippen, mit 45° Kippen und mit 90° kippen. (Messfehler können entstanden sein, weil ich das Modul mit der Hand drehe!)

Die Messwerte (X, Y,Z) gehen von -10 bis 10 im Idealfall (mache im µC *10 bei den Berechnungen, da sonst die Rundungsfehler zu groß wären).

YWinkel und ZWinkel laut der Berechnung von voidpointer. Winkel und Xneu habe ich nur zum Testen drin, der Kippwinkel ganz oben in Zeile1 ist eine normalerweise unbekannte Größe!

Ach ja die Diagramme verstecken sich ziemlich weit rechts. O:)

Bei mikrocontroller.net hab ich den erwähnten Thread leider nicht gefunden.

voidpointer
09.03.2007, 10:20
Also jetzt habe ich mich auch nochmal belesen. Am besten, Ihr vergesst die Arcus-Sinus-Lösung! (vielleicht sollte ich sie löschen)

Wie Manf schon richtig dargestellt hat, sind die Feldlinien des Erdmagnetfelds in unseren Breiten um 66 Grad geneigt (Inklination). Und das Feld hat keine drei orthogonalen Komponenten, sondern nur eine. Der 3D-Kompass misst lediglich die drei Anteile des Magnetfeldes. Die Gesamtstärke des Magnetfeldes ergibt sich dann wie folgt:
B = Wurzel(x²+y²+z²)
Diese Formel habe ich mal auf Deine Messwerte angesetzt und in der Grafik dargestellt. Der Wert liegt immer in der Nähe von 10 - die Formel würde also passen.

Damit ergibt sich das Dilemma aus Manfs Grafik: Aus den gemessenen Werten lässt sich nicht eindeutig auf die Orientierung des Sensors im Raum schließen. @Manf: ist doch so gemeint, oder? Das heisst für mich, dass ein 3D-Kompass (auch 3D-Magnetometer genannt) allein nicht aussreicht, sondern nur eine Ergänzung zu Accelerometern und/oder Gyro-Sensoren sein kann...

Bitte ergänzen. Gruß, Achim.

Manf
09.03.2007, 11:03
Soweit sind wir schon einmal, schön, dass auch die Werte zusamengefasst wurden. Ich würde jetzt erst mal nichts löschen.
Wenn man den Sensor nun gezielt in der Ebene dreht, dann sollte sich ja damit die Schielflage dieser Ebene ermitteln lassen.
Manfred

MrNiemand
09.03.2007, 11:03
Ok, wenn man nach Manfs Bild geht, gibt es mehrere Ausrichtungen, bei selber Magnetfeldrichtung. Aber die Frage ist, wird die Lösung bei zu Hilfenahme des 3ten Sensors nicht wieder eindeutig?

Manf
09.03.2007, 12:04
Dafür ist es gut schrittweise vorzugehen.
Im Bild ist links das Fahrzeug gezeigt wie es flach mit Nordausrichtung am Boden steht. Die anderen beiden Bilder zeigen Anordnungen bei denen das Fahrzeug um die Achse der Ausrichtung des Feldes gedreht ist.
Gemessen wird also das Gleiche, in den drei Komponenten x,y,z.

Das ist genau die Bedingung für die anderen Anordnungen. Dass es die anderen Stellungen gibt und dass sie in einer entsprechend unebenen Umgebung nicht ausgeschlossen werden können heißt dann, dass zur Bestimung der Nordrichtung noch etwas an Information dazu kommen muss.
Manfred

MrNiemand
09.03.2007, 12:16
Hm, vom ersten zum zweiten Bild, müssten doch zumindest die x u. y Sensoren um 90° gedrehte Werte liefern, oder nicht? Wobei eigentlich auch Z.

Wenn ich mir den Unterschied mal so ansehe, ist das ja genau der Fall den ich bei der 0° Drehung und bei der 45° Drehung gemessen habe.

(Den 3ten Fall kann ich soweit mal ausschließen, da hier mein Bot andere Probleme hätte).

voidpointer
09.03.2007, 12:16
Aber die Frage ist, wird die Lösung bei zu Hilfenahme des 3ten Sensors nicht wieder eindeutig?
Wenn die Feldlinien genau senkrecht durch den Sensor gehen, liefert Z die volle Feldstärke, aber X und Y müssten dann 0 liefern. Das ist ähnlich, als bekäme man am Nordpol den Befehl, nach Süden zu gehen ;-)

Übrigens habe ich den Thread wiedergefunden. Google "magnetometer site:mikrocontroller.net" findet u.a.:
http://www.mikrocontroller.net/topic/22977

Gruß, Achim.

Manf
09.03.2007, 13:01
Übrigens habe ich den Thread wiedergefunden. Google "magnetometer site:mikrocontroller.net" findet u.a.:
http://www.mikrocontroller.net/topic/22977
Nichts gegen das Netz das sicher seine Stärken hat, aber bei einem derart bunten Thread von ca. 88 Stellungnahmen sollte man schon eine Stelle angeben.

voidpointer
09.03.2007, 13:20
...aber bei einem derart bunten Thread von ca. 88 Stellungnahmen sollte man schon eine Stelle angeben.
Hm, das würde den Beitrag vielleicht aus dem Zusammenhang reissen. Ausserdem funktioniert die Browsersuche nach "Magnetometer" recht gut.
Aber im Nachhinein betrachtet bietet die Diskussion im Thread nicht so viel Stoff, wie ich in Erinnerung hatte.

Edit: konkret gemeint war der Beitrag von "Harald Hügel" und folgende...

MrNiemand
09.03.2007, 22:09
Also ich hab den Thread mal soweit durch gemacht, dort kommen sie offensichtlich zum selben Schluss, das wenn das Modell in einer Achse nicht stabil ist, eine weitere Information benötigt wird, um die Winkel zu berechnen.

MrNiemand
06.04.2007, 17:49
Also, ich kann jetzt die Neigung in x/y messen, dank dem adis16201 von analog devices. Kann mir jemand verraten, wie ich nun damit die Messwerte der 3 Magnetfeldsensoren so "drehen" kann, das es Neigungsunabhängig wird?