Kompass mit Magnetsensor BM1422AGMV

Gast #7222348
Lesenswert?

Hallo!

Ich versuche aktuell mittels BM1422AGMV Magnetsensor einen Kompass zu 
bauen.

Ich bis bereits soweit, dass ich mit einem Raspberry Pi die Werte für X, 
Y und Z bekomme. Der Offset ist auch schon grob kalibriert.

Aber wie fahre ich nun mit diesen Werten fort?

Ich habe überlegt, eine Feinkalibrierung zu machen, indem das Gerät in 
allen Achsen um 360° gedreht wird, währenddessen pro Achse Max und Min 
Werte erfasst werden und am Ende der Kalibrierung ein Fein-Offset 
berechnet wird, das dann immer von den Messwerten abgezogen wird.

Dies habe ich auch schon realisiert, aber irgendwie führt das nicht zum 
gewünschten Ergebnis. Die Winkelwerte (die auch schon berechnet werden) 
passen einfach nicht und weichen auch nach jeder Kalibrierung irgendwie 
anders ab.

Hat jemand eine Idee, was ich vom Prinzip her falsch mache?

Bin für alle Ratschläge dankbar, inkl. Links, Libraries, etc...

Danke für jeden Hinweis im Voraus!
#7222351
Lesenswert?

Dein problem ist dass je nach wohnort das magnetfeld schräg in die erde 
geht. Je nördlicher je steiler. Schau mal wo x= maximal und y,z=minimal 
hinzeigt. Richtig, nach schräg unten.

Lösen kannst du das indem du zum äquator umziehst.
Oder indem der sensor mit wasserwaage ausgerichtet wird und du Z 
vernachlässigst.
Gast #7222470
Lesenswert?

W.A. schrieb:
> Wenn man keine Ahnung hat, einfach mal die ...... halten.
und du meinst du kannst "DEINE" um so weiter aufreisen :-(

Alt G. schrieb:
> Lösen kannst du das indem du zum äquator umziehst.
> Oder indem der sensor mit wasserwaage ausgerichtet wird und du Z
> vernachlässigst.

Diese Aussage ist richtig ! Das heisst ja nicht, dass dies die einzige 
Lösung sein muss.
Gast #7222491
Lesenswert?

Zuerst muss man einen Ort finden, an dem das Erdmagnetfeld unverfälscht 
wirkt. In Gebäuden ist das oftmals nicht der Fall. Prüfen kann man das, 
indem man mit einem Kompass (mit Kompassnadel) die angezeigte 
Nord-Richtung feststellt. Ändert sich diese, wenn man den Kompass 
verschiebt, ist das Erdmagnetfeld in Richtung und vermutlich auch Stärke 
beeinflusst.

Wenn man nun um eine Achse dreht, müssen die andere Achsen vollkommen 
stabil bleiben. Das geht, wenn man einen Drehteller auf einer festen 
Fläche montiert. Die Fläche muss dann abwechselnd horizontal oder 
vertikal ausgerichtet sein, wobei sie für jede Messreihe möglichst exakt 
um 90° gedreht bzw. gekippt werden muss. Dass die für die Fläche, den 
Drehteller und die Halterung nur unmagnetische Materialien verwendet 
werden dürfen, sollte klar sein. (Gern werden dabei Schrauben, 
Kugellager, Schraubzwingen o.ä. übersehen und auch ein im Handwerk 
üblicher Winkelmesser hat oftmals magnetische Teile.)
Gast #7222658
Lesenswert?

Danke schon mal für alle Antworten!

Ich glaube, ich kann jetzt besser vorstellen, wo das Problem liegt. 
(Schiefes Magnetfeld...)

Wenn ich das Gerät beim Kalibrieren einfach am Tisch herumdrehe, kommen 
danach schon recht gute Winkelwerte heraus. Das Problem ist aber, dass 
das Gerät so ähnlich wie ein Handy, lageunabhängig messen soll, also 
auch wenn es dann hochkant oder in einem bestimmten Winkel geneigt steht 
und nicht mehr einfach am Tisch liegt.

Wenn ich es richtig verstehe, sollte man dann trotzdem immer die Werte 
in der horizontalen Ebene messen, richtig? Also müsste ich den 
Neigungswinkel des Gerätes miteinbeziehen (dieser wird glücklicherweise 
ebenfalls gemessen) und das Koordinatensystem transformieren? Gibt es 
eine fertige Library für sowas? Ich werde vermutlich nicht der erste 
Mensch sein, der sowas macht...

Danke für alle weiteren Hinweise im Voraus!
Gast #7224575
Lesenswert?

Hallo!

Gyroskop habe ich leider nicht verbaut nur Magnetsensor und 
Beschleunigungssensor. Dafür ist das Gerät, wenn gemessen werden soll, 
in Ruhe. Und das gerne für 1-2 Minuten.

Ich habe mich an folgende Anleitung gehalten:
http://robo.sntiitk.in/2017/12/21/Beginners-Guide-to-IMU.html
und folgende Formeln in meinen Code eingepflegt:

pitch = 180 * atan2(accelX, sqrt(accelY*accelY + accelZ*accelZ))/PI;
roll = 180 * atan2(accelY, sqrt(accelX*accelX + accelZ*accelZ))/PI;


mag_x = magReadX*cos(pitch) + magReadY*sin(roll)*sin(pitch) + 
magReadZ*cos(roll)*sin(pitch)
mag_y = magReadY * cos(roll) - magReadZ * sin(roll)
yaw = 180 * atan2(-mag_y,mag_x)/M_PI;


Dabei habe ich darauf geachtet, dass ich die Werte der Achsen der 
einzelnen Chips so in die Formeln einpflege, dass es die Werte für die 
Achse des gesamten Gerätes sind. (z.B. hat der Magnetsensor seine 
x-Achse in Richtung -y des Gerätes, also wird statt dem y-Wert -x 
eingespielt.)

Ebenso habe ich darauf geachtet, dass die Winkelwerte in Radianten in 
die entsprechenden Funktionen eingespeist werden.

Auch habe ich beim Magnetsensor die Werte normiert, also durch (max-min) 
dividiert.

Roll und Pitch passen auch, soweit ich das beurteilen kann.

Yaw passt, solang das Gerät am Tisch steht. wenn Pitch und Roll 
zunehmen, passt es nicht mehr. Wieso?
#7224640
Lesenswert?

Vorgehen ist einen vektor aus MAG und einen aus ACC zu bilden. Dann 
projezierst du den MAG vektor auf die XY ebene des ACC vektors. Das ist 
dann nord.

Anders ausgedrückt du musst den MAG vektor, der im sensor 
koordinatensystem ist, in das ACC koordinatensystem drehen. Das ist eine 
3D vektor rotation. Erst dann machst du den atan2(x,y).

Deine formeln funktionieren auf dem tisch weil da die sensor XY ebene da 
mit der ACC xy ebene übereinstimmt.
Gast #7226142
Lesenswert?

my2ct schrieb:
> Frager schrieb:
>> Sind die Richtigen irgendwo beschrieben?
>
> Die kommen sogar im Vernünftigen Schulunterricht bei der Vektorrechnung
> dran - Skalarprodukt und 3D-Drehmatrix.

Wo gibt es noch vernünftigen Schulunterricht? Oder was machen die 
älteren Semester, bei den das schon zu lange her ist?

Also ich schau da immer in meinen "Bronstein" (Taschenbuch der 
Mathematik, Verlag Harri Deutsch) -- und finde da das Kapitel 
"Analytische Geometrie des Raumes" mit dem Unterkapitel "Transformation 
rechtwinkliger Koordinaten".

Sollte auch antiquarisch für einen schmalen Euro erhältlich sein.
Gast #7226711
Lesenswert?

Mir ist natürlich bewusst, dass man das alles mathematisch selber 
herleiten kann und ich denke schon, dass ich das noch schaffen würde, 
aber soetwas muss es doch schon fertig geben? Man muss ja auch nicht 
Schaltungen diskret aufbauen, die es schon als fertige ICs gibt!?

Außerdem schauen die Formeln, die ich aus der Anleitung kopiert und auch 
hier gepostet habe, für mich so aus, als würden die genau das machen. Es 
wird ja Roll und Pitch mithilfe des Beschleunigeungssensors errechnet 
und dann in die Formeln danach eingesetzt. Warum würde man sonst Roll 
und Pitch für die Berechnung der Himmelsrichtung brauchen, wenn nicht, 
um den Magnetfeld-Vektor in die Ebene zu bringen, die horizontal zum 
Boden ist?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren