Forum: Mikrocontroller und Digitale Elektronik Kompass mit Magnetometer und Beschleunigungssensor


von Tim S. (169)


Lesenswert?

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?

von Heiko Jakob (Gast)


Lesenswert?

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

von Tim S. (169)


Lesenswert?

Servus,
also ich habe dies nicht ganz verstanden, denn ich bekomme meine Daten 
in 10Hz Takt. Ich denke der Abstand ist klein genug. Brauche ich hierfür 
ein Kalmanfilter?


gruß,
tim

von Floh (Gast)


Lesenswert?

Tim S. schrieb:
> Es sei hinzugefügt, dass diese Werte
> ziemlich präziese sind.

Tim S. schrieb:
> Die Ergebnisse sind allerdings sehr schlecht und weichen sehr stark vom
> richtigen Kurs ab.

Zahlenwerte wären was Tolles, um abzuschätzen was da passiert.

von Heiko J. (heiko_j)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.