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!
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.
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.
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.)
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!
IMU.
Heisst du verkuppelst gyro, acc umd mag werte.
Findet sich bei jeder opensource quadcopter-soft die magnetsensor kann.
Darum sind bei mpu9050 z.b. auch alle 3 sensoren in einem chip drin.
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?
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.
Frager schrieb:> Sind die Richtigen irgendwo beschrieben?
Die kommen sogar im Vernünftigen Schulunterricht bei der Vektorrechnung
dran - Skalarprodukt und 3D-Drehmatrix.
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.
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?
Denkst du irgendwer hat lust für lau deine fomeln zu checken?
Warum schaust du nicht wie andere das machen?
Betaflight IMU?
Ardupilot IMU?
Jede opensource kompass-android app?
Hier Mimimi zu schreien bringt nix.
Frager schrieb:> Hab's gelöst. Da ihr so viel geholfen habt, poste ich euch meine> Lösung
Toll für dich. Hab leider keine zeit das durchzusehen.
Hast ja recht lange gebraucht. Ein narkolepsie problem?