Kompass mit Magnetometer und Beschleunigungssensor

OP #2709997
Hallo Leute,
ich bin mittlerweile echt verzweifelt. Ich habe einen 9dof Sensor 
(MinIMU-9 Gyro, Accelerometer, und Compass) und möchte unter anderem 
einen Kompass bauen.
Die Ergebnisse ohne Neigung sind ziemlich gut.
Für den Fall von größeren Neigungem habe ich aus mehreren Quellen 
erfahren, dass ich folgende Formel anwenden muss:

X_h=X*cos(\alpha)+Y*sin(\gamma)sin(\alpha)-Z*cos(\gamma)*sin(\alpha)

Y_h=Y*cos(\gamma)-Z*sin(\gamma)

"\alpha" und "\gamma" sind pitch und roll winkel vom 
Beschleunigungssensor und Gyro. Es sei hinzugefügt, dass diese Werte 
ziemlich präziese sind.


Mit dieser soll eine "tilt-compensation" erreicht werden.
Anschleißend soll ich über arctangens(Y_h/X_h) die korrekten Winkel 
angezeigt werden.
Die Ergebnisse sind allerdings sehr schlecht und weichen sehr stark vom 
richtigen Kurs ab.

Was kann ich noch machen?
Gast #2710036
Das Zauberwort heist: Kalmanfilter.
Selbst wenn Du die Daten von all deinen Sensoren korrekt zusammen 
rechnest um auf die aktuelle Lage, Position und Richtungsvektor zu 
kommen wirst Du feststellen das deine Messintervalle viel zu gross sind. 
Daher musst Du aus deinen bereits erfassten Daten vorhersagen treffen 
und diese mit dem nächsten gemessenen Wert verrechnen.

Gruss Heiko
#2710558
Tim S. schrieb:
> also ich habe dies nicht ganz verstanden, denn ich bekomme meine Daten
> in 10Hz Takt. Ich denke der Abstand ist klein genug.
Deine Sensoren machen im Normalfall ja Messungen über den Durschnitt in 
sagen wir mal ca. 0.5 ms (bei 2kHz Abtastfrequenz bei normalen 
Gyros/Accel, Zeit zwischen den realen Messvorgängen vernachlässigt). Ein 
Intervall bei 10 Hz sind 100 ms. Du kennst also den real gemessenen 
Zustand deines Modells zu 99,5 % überhaupt nicht. Wenn man jetzt noch 
den Fehler des Sensors mit einrechnet liegen wir bei 99,9 % von denen 
wir nichts wissen.

Die Daten in mit der Samplingfrequenz des Sensors zu holen ist zwar 
nett, aber overkill für den µC und im Normalfall unnötig und deckt auch 
nicht die zeit ab die der Sensor braucht um sich auf die nächste Messung 
zurückzusetzten. Du wirst also immer einen nicht zu vernachlässigenden 
Messfehler haben. Aber Du hast ja noch andere Daten welche Du zu rate 
ziehen kannst, dein erwähntes Magnetometer z.B.

> Brauche ich hierfür
> ein Kalmanfilter?

Genau, dafür brauchst Du das Kalmanfilter. Es geht mit genügend 
Hirnschmalz und Trial'n'Error natürlich auch anders, aber um irgendein 
Filter kommst Du nicht drum herum. Hier im Forum gibt es schon einige 
Threads zu diesem Thema. Du kannst dir auch mal den Sourcecode von 
Ardupilot oder Paparazzi anschauen.

http://www.mikrocontroller.net/forum/all?filter=Kalman
http://paparazzi.enac.fr/wiki/Main_Page

P.s. Vergiss nicht dein Magnetometer auf die lokale Deklination zu 
kalibrieren.

http://www.ngdc.noaa.gov/geomag/WMM/thirdpartycontributions.shtml

Gruß Heiko

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.