Forum: Mikrocontroller und Digitale Elektronik Kalman Filter Klasse


von Marcel D. (dmarcel21)


Lesenswert?

Hallo,

ich arbeite momentan an einen FlightController für einen Quadrocopter, 
um dessen Neigung zu berechnen, verwende ich ein Gyroscope und einen 
Beschleunigungssensor. Um die Daten beider Sensoren zu einen Winkel zu 
vereinen möchte ich einen Kalman Filter verwenden, da ich schon alle 
andere Methoden probiert habe. (Komplementärfilter, Hoch - und Tiefpass)
Bei diesen Methoden war das Problem, dass durch die Vibration der 
Motoren der Winkel verfälscht wurde. Darum möchte nun eben den Kalman 
Filter verwenden, da er unter anderem solche Änderungen rausfiltert.

Ich progamiere in AVR Studio (also in c) auf einen ATmega64.
Hat jemand eine fertige Klasse, welcher ich nur die Werte beider 
Sensoren übergeben muss, um einen Winkel zu erhalten?

Danke im Voraus für eure Hilfe

von Walleby (Gast)


Lesenswert?

Hallo,

schau mal auf dieser Seite:

http://www.den-uijl.nl/electronics/gyro.html#Kalman

Die Grundlage ist zware ein Arduino Nano, aber die Funktionen und der 
Ablauf sind ja dargestellt.

Die solltest du dann eigentlich relativ einfach auf dein System 
übertragen können.

MfG Walleby

von Marcel D. (dmarcel21)


Lesenswert?

Danke für die schnelle Antwort. Ich werde es mir mal ansehen und es 
versuchen auf mein System anzupassen.

von Marcel D. (dmarcel21)


Lesenswert?

Ich habe es mal ausprobiert und funktioniert nicht so wie es sollte...
Hat jemand eine fertige Klasse oder einen Link?

Danke

von Peter K. (Gast)


Lesenswert?

Marcel D. V. schrieb:
> Hat jemand eine fertige Klasse

Klassen gibt es in c nicht nur funktionen.

und der kalman aus dem Link funktioniert, du musst nur die 
Zahlenparameter an deine Gyros und accelerometer anpassen.

Marcel D. V. schrieb:
> Ich habe es mal ausprobiert und funktioniert nicht so wie es sollte...

was genau macht er anders als ers sollte?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Um die Parameter richtig einzustellen, ist es von Vorteil, die Funktion
de Kalman-Filters wenigstens im Ansatz verstanden zu haben. Dann ist man
aber auch in der Lage, die paar Zeilen Code für den Algorithmus selber
zu schreiben.

Aber auch mit schlecht eingestellten Parametern sollte das Filter,
gutmütig wie es ist, halbwegs vernünftige Ergebnisse liefern. Ist die
Parameterwahl nicht völlig unsinnig (bspw. ein negative Werte, wo der
Theorie nach positive stehen sollten), leidet darunter lediglich die
Dynamik, d.h. das Filter reagiert u.U. deutlich langsamer auf Änderungen
der Messgröße.

Peter Kremsner schrieb:
> Marcel D. V. schrieb:
>> Ich habe es mal ausprobiert und funktioniert nicht so wie es sollte...
>
> was genau macht er anders als ers sollte?

Genau das ist jetzt die Frage.

von Marcel D. (dmarcel21)


Lesenswert?

Die beiden Winkel ändern sich nur bei einer Drehung.
Sobald man in einer Position stehen bleibt. Geht der Winkel wieder auf 
0° zurück.

von Peter K. (Gast)


Lesenswert?

Ich denke das sind keine Winkel sondern Winkelgeschwindigkeiten, durch 
die Integration über die Zeit erhältst du daraus den Winkel

von Marcel D. (dmarcel21)


Lesenswert?

Ja das wäre logisch.
Abr komisch ist, dass dort ja der Beschleunigunssensor schon 
einberechnet worden ist.

von Peter K. (Gast)


Lesenswert?

Marcel D. V. schrieb:
> Ja das wäre logisch.
> Abr komisch ist, dass dort ja der Beschleunigunssensor schon
> einberechnet worden ist.

Warum?
Eine Beschleunigung ist auch keine Geschwindigkeit, ein Gyroskop gibt 
dir eine Drehrate aus und der Beschleunigungssensor eine beschleunigung

Aus der Fusion von Drehrate und Beschleunigung kann ich jetzt eine 
gefilterte Drehrate und Beschleunigung berechnen.

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.