Hallo. Ich habe mit einem 3-achsigen Magnetfeldsensor einen elektronischen Kompass realisiert. Dieser funktioniert schon ziemlich gut, allerdings nur,wenn ich ihn in horizontaler Lage halte. Zusätzlich möchte aber nun noch eine Neigungskompensation mit Hilfe eines Beschleunigungssensors für den Kompass realisieren. Im Internet habe ich schon mehrere Pdf´s gefunden,die größtenteils alle auf die selben Formeln zur Neigungskompensation zurückgreifen: X' = X*cos(alpha) + Y*sin(alpha)*sin(beta) - Z*cos(beta)*sin(alpha) Y' = Y*cos(beta) + Z*sin(beta) azimuth = atan(Y'/X') / PI * 180 Diese Formel habe ich in meinen Controller programmiert. Wenn ich mir nun die azimuth-Werte z.B. bei einer X-Achsen-Neigung des Beschleunigungssensors um +/-20° ausgeben lassen,dann schwanken diese in einem Bereich von ca. 80° (azimuth nei -20°:ca. 310°; azimuth bei Nulllage: 16°; azimuth bei +20°: 30°) Meine Frage nun: Was ist an der Formel falsch bzw. muss ich noch weitere Berechnungen ergänzen,damit ich bei Neigung des Kompasses die Richtung nahezu konstant bleibt? Mfg,Sven
Hat keiner nen Tipp? Irgendwie bezweifle ich,dass dies diese Formel korrekt ist! Überprüfen kann ich dies eigentlich gut,da ich ein Eval-Board von dem HMC5843 hier habe mit mitgelieferter Simulationssoftware.Dabei wird die Neigung auch gut kompensiert und die ausgegebene Richtung bleibt konstant. Wenn ich nämlich die Werte der einzelnen Achsen des Magnetsensors bzw. des Beschleunigungssensors in die Formeln wie in obigem Post einsetze,dann kommen bei Neigung des Magnetsensors völlig andere Richtungswerte raus. MfG,Sven
Sven schrieb: > Hat keiner nen Tipp? Was ist X, Y und Z? Wo kommen alpha und beta her? Hast du auch nicht vergessen in Radianten und nicht in Grad einzusetzen? Hast du dir die entsprechenden Werte angesehen? Hast du schon versucht die Formel herzuleiten? (Auch wenn das ganze 3D ist, recht viel mehr als Phythagoras und sin/cos im rechtwinkeligen Dreieck brauchst du dazu nicht. Kugel aufmalen, Ausgangswerte einzeichnen, Endwerte einzeichnen, und festlegen um welche Achsen du in welcher Reihenfolge drehen musst um den 3D Vektor in die Äquatorebene zurückzubringen. Mit Rotationsmatrizen gehts einfacher, aber wenn du damit keine Erfahrung hast, gehts auch so.)
Ich hätte in dem Formelsatz auf jeden Fall eine klare Symmetrie zwischen zwei von den drei Raumachsen erwartet. Da muss also etwas falsch sein oder fehlen.
X,Y und Z sind die Werte der entsprechenden Magnetsensorachsen. alpha ist der Winkel der X-Achse des Beschleunigungssensors (Pitch) und beta und demzufolge der Winkel der Y-Achse des Beschl.-Sensors (Roll). Ja,ich rechne mit den Radienten. Naja,herleiten selbst nicht direkt,aber ich habe genügend App-notes in denen dies gemacht wurde.Ich selbst kann die Herleitung auch nachvollziehen und wie schon bereits oben erwähnt, kommen am Ende in fast jeder App-Note die beiden Formeln für X' und Y' wie von mir bereits oben beschrieben raus. Mal ein Beispiel der Achsenwerte vom Eval-Board,wobei alpha und beta die Werte sind,die wie folgt berechnet werden: ADC-Wert*Sensorauflösung: X Y Z alpha beta Sensorneigung 18 -430 -360 0.002 0.007 keine Neigung 47 -292 -446 -0.32 0.004 Sensor um -20° entlang der X-Achse geneigt Bei der -20°-Neigung sollte nun eigentlich der gleiche Richtungswert rauskommen,als wenn der Sensor nicht geneigt wird!
didadu schrieb: > Ich hätte in dem Formelsatz auf jeden Fall eine klare Symmetrie zwischen > zwei von den drei Raumachsen erwartet. > > Da muss also etwas falsch sein oder fehlen. Nicht unbedingt. Wenn man sich die allgmeine Rotationsmatrix (Drehung um alle 3 Raumachsen) ansieht und algebraisch ausrechnet, dann sieht man, dass die Matrix nicht symetrisch bezüglich der Diagonalen ist, obwohl es die Ausgangsmatrizen sind. Das ist auch gut so, sonst könnte man eine Matrix nicht mehr in Eulerwinkel zerlegen :-) Edit: Eines ist allerdings wirklich seltsam: Im Ausdruck für Y' kommt alpha nicht vor.
> alpha ist der Winkel der X-Achse des Beschleunigungssensors (Pitch) > und beta und demzufolge der Winkel der Y-Achse des Beschl.-Sensors > (Roll). > X Y Z alpha beta Sensorneigung > 18 -430 -360 0.002 0.007 keine Neigung > 47 -292 -446 -0.32 0.004 Sensor um -20° entlang der X-Achse > geneigt ich denke du hast da einen Hund in den Winkeln. Wenn alpha der Winkel der X-Achse ist, dann ist alpha eine Drehung um die Y-Achse (oder Z? hast du ein rechteHand-System bei dem Z nach oben schaut?). Bei einer Drehung um die Y-Achse ändern aber X und Z die Werte. Bei dir ändern sich aber Y und Z
Ja das ist richtig.Wenn ich den Sensor um die Y-Achse rotiere,dann ändern sich die Werte für X und Z.So ist es auch bei mir.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.