PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kalman Filter sehr langsam (Gyro + Beschleunigungssensor)



djdune
02.07.2012, 19:41
Hallo liebe Gemeinde!

Nachdem ich nun seit Wochen Probleme hab, ein ordentliches Ergebnis eines Kalmanfilters zu bekommen, hoffe ich dass mir hier vielleichtjemand weiterhelfen.
Ich habe mich viel in den Filter eingelesen, jedoch hab ich mich dann dazu entschieden, Beispiel zu adaptieren.
Als Grundlage verwende ich den Filter von Tom Pycke: http://tom.pycke.be/mav/92/kalman-demo-application
Nach unzähligen Anpassungen der Variablen, Zeiten, Etc kommt bei mir immer noch sowas raus:
http://youtu.be/SB921pnLwAE
1. Zu beginn schwingt er sich sehr seltsam ein.
2. Er ist sehr langsam und schwingt immer etwas über.
Wenn ich die Parameter ändere, dass er schneller ist, also ziemlich gleich dem Beschleunigungssensor ist, werde Störungen durch Wackeln und stoßen nicht mehr richtig rausgefiltert.

Noch ein paar Eckdaten:
5DOF Board von Sparkfun wo ich je die Y Kanäle benutze (IDG300, ADXL330); Sind eigentlich die Nachfolger der sehr verbreiteten Sensoren ADXL320 (allerdings mit nur +-3g) und des IDG*nummerWeißIchNichtAuswendig*
Controller ist ein STM32F103 ARM Cortex M3 Controller
Hab den Code sehr simpel gehalten, sogar ADC ohne DMA um Fehlerquellen ausschließen zu können.
Bei Bedarf gibts noch Code, jedoch denke ich dass es irgendwelche Parameter Probleme sind, da ich ein sehr ähnliches Problem hatte als ich noch einen PIC18 zur Auswertung verwendet hatte.
Habe auch mittlerweile die Serielle Bluetooth Verbindung gegen Kabel getauscht, was aber auch keine Änderung gebracht hatte.

Bin für jeden Tipp dankbar!

ranke
03.07.2012, 09:31
Ich habe da auch keine Erfahrung. Kannst Du noch kurz schreiben was es für eine Plattform wird (ein copter, nehme ich an?) und was Du mit dem Filter bezwecken willst. In Deinem Video sieht man die Lage des Boards sehr gut durch das Signal des Beschleunigungssensors widergegeben, das kalmangefilterte Signal sieht tatsächlich nicht brauchbar aus.

djdune
03.07.2012, 09:52
Es soll ein selbstbalancierter 2-Rad Bot werden. Ich habe bereits ein paar Kalman Beispiele mit Videos gesehen, wo das wunderbar gefiltert wird und sehr schöne Ergebnisse ausgibt. Obwohl ich auch schon viel gesucht habe, konnte ich keine ordentlich verständliche Erklärung finden, wie man auf die Initialisierungsparameter des Filters kommt.

ranke
03.07.2012, 18:26
... konnte ich keine ordentlich verständliche Erklärung finden, wie man auf die Initialisierungsparameter des Filters kommt.

Soweit ich die Sache verstehe geht es darum, einen verlässlicheren Wert für die Neigung des inversen Pendels gegenüber der Richtung der Gravitation zu finden, als das mit der Werten aus Beschleunigungssensor oder Gyro alleine möglich wäre.
Die vom Beschleunigungssensor gelieferten Werte sind wahrscheinlich nicht schlecht, haben aber folgende Fehler:
1. Rauschen und (pseudo-)zufällige Störungen resultierend z.B. aus Bodenunebenheiten
2. Je nach Montage des Sensors (Abstand vom Drehpunkt) wird sich ein systematischer Fehler des Beschleunigungsvektors (in Richtung und Betrag) aufgrund der Winkelbeschleunigung des Pendels einstellen.
Je nachdem, welchen der Fehler man mit den Werten aus dem Gyro kompensieren will, wird man vermutlich unterschiedliche Parameter benötigen.
Größe und Vorzeichen des unter 2. genannten Fehlers ist stark vom Montageort des Sensors abhängig, deshalb mag es da auch keine fixen Lösungen geben. Wenn man den Montageort und das Trägheitsmoment des Pendels kennt, dann sollte man diesen Fehler aber abschätzen können und den Algoritmus daraufhin optimieren können.

djdune
03.07.2012, 20:53
Das Grundprizip hab ich verstanden, aber deine Zusätzliche Erklärung (vor allem in deutsch :) ) hat mir das ganze noch mehr gelichet. Vielen Dank dafür!
Jedoch wundert mich, dass der Filter von Günther (http://www.gerold-online.de/cms/wheelie/mein-wheelie/kalman-filter.html) bei der selben ...Messmethode wesentlich bessere Ergebnisse liefert.
Ist halt sehr schwierig den Fehler zu finden, wenn man nicht weiß wo man anfangen soll. Hab auch noch Beschleunigungssensor mit SPI, den ich als Referenz verwenden könnte und um überhaupt mal zu sehen, ob nicht vielleicht schon bei der Analogmessung Fehler auftreten.

ranke
04.07.2012, 11:12
Ist halt sehr schwierig den Fehler zu finden, wenn man nicht weiß wo man anfangen soll.


In Deinem ersten Post hast Du ja ein kurzes Video verlinkt. Dort sehen die Anzeigen für Beschleunigung und Drehrate recht plausibel aus. Deshalb vermute ich das Problem im nachgeschalteten Algoritmus.

djdune
04.07.2012, 18:00
Nach vielem probieren lichtet sich es schon ein wenig. Nach Verbessern des ADC lesens und wieder mit 12bit einlesen sieht das Ergebnis schon besser aus.
Ich glaube auch dass die Visualisierung stark verfälscht, darum habe ich noch ein live Liniendiagramm eingebaut und da sieht das Ergebnis schon sehr brauchbar aus.
Mittlerweile geht er auch fast 1:1 in der Geschwindigkeit. Die genauen Parameter werde ich dann am 2Rad Bot direkt bestimmen und dann man schaun, ob es so passt.
Ich danke dir für deine Denkanstöße!