Hallo! Ich arbeite zur Zeit an einem kleinen Hobby-Projekt, bei dem ich ein GPS Sensor nutze. Die Daten, welche ich daraus erhalte sind allerdings nicht allzu gut und vor allem sind da sehr viele Ausreißer bei. Ich habe nun nach einer Ladung Recherche erfahren, dass ein Kalman Filter da Wunder wirkt. Allerdings hab ich überhaupt keine Ahnung davon und selbst nach einiger Recherche tappe ich noch immer im Dunkeln. Hat da eventuell jemand ne Idee, wie ich dieses Filter einsetze, oder gar ein paar Code Schnipsel? Grüße, Woda
Eine wirklich sehr einfache und anschauliche Erklärung des Kalman Filters finde ich diese hier: http://www.cbcity.de/das-kalman-filter-einfach-erklaert-teil-1 Hat man mal die Funktionsweise verstanden, ist das Filter wirklich genial. Wenn auch im Einsatz nicht ganz unkompliziert, da die diversen Filterkonstanten erst bestimmt werden müssen. Für den Einsatz auf einem uC sollte aber eine Floating Point Einheit vorhanden sein. Andernfalls tut man sich recht schwer damit.
So ein Kalmanfilter ist eigentlich gedacht für verschiedene Sensoren aus zu werten nach ein Ergebnis. Wenn sie nur eine GPS haben, brauchen sie Kalman nicht. Wenn zusatzlich noch ein IMU (inertial measurement unit) forhanden ist, oder odometrie macht das mehr Sinn. Das Problem bei GPS ist das die genauigkeit abhangt von fiele externe factoren, ein Filter kan helfen, aber macht das GPS-update auch langsamer.
@Sebastian Ich hab mir die Seite angeschaut und die war auch wirklich sehr hilfreich! Allerdings habe ich zwar jetzt ein Grundverständniss dafür, aber immernoch keinen Schimmer, wie man das implementieren könnte. Hast du sowas schonmal implementiert und Erfahrung damit? @RP6 Hast du eine Idee, wie man auch ohne Kalman Filter die Werte aufbessern kann und auch nachfolgende Werte vorhersagen kann? Dachte mir, dass da das Kalman Filter die einfachste Lösung sei.
Ein Kalmann-Filter fusioniert verschiedene Sensorwerte. Du hast nur einen Sensor mit Ausreißern, also willst du eigentlich die Ausreißer rausfiltern. Vielleicht reicht ein einfacher Medianfilter: Du merkst dir immer die letzten drei (fünf, sieben, nein, elf) Werte, sortierst sie und nimmst den mittleren.
RP6conrad schrieb: > So ein Kalmanfilter ist eigentlich gedacht für verschiedene Sensoren aus > zu werten nach ein Ergebnis. Wenn sie nur eine GPS haben, brauchen sie > Kalman nicht. Nein Nein Nein! Das ist einfach falsch. Sorry. Das Kalmanfilter wird recht häufig mit Sensorfusion verwendet - das ist aber nicht der Sinn des Kalmanfilters. Das Prinzip des Kalmanfilters hat nichts damit zu tun, dass mehrere Sensorwerte fusioniert werden. Siehe auch http://www.cbcity.de/das-kalman-filter-einfach-erklaert-teil-1 http://www.cbcity.de/das-kalman-filter-einfach-erklaert-teil-2 http://www.cbcity.de/das-extended-kalman-filter-einfach-erklaert Sebastian K. schrieb: > Für den Einsatz auf einem uC sollte aber eine Floating Point Einheit > vorhanden sein. Andernfalls tut man sich recht schwer damit. Oder man rechnet eben mit Ganzzahlen ... das geht auch auf einem 8-Bit Mikrocontroller mit 4 MHz völlig ohne Probleme. Natürlich macht es die FPU schöner, einfacher und schneller. Aber eine FPU ist für mich keine Vorraussetzung für ein Kalmanfilter. Woda schrieb: > @RP6 > Hast du eine Idee, wie man auch ohne Kalman Filter die Werte aufbessern > kann und auch nachfolgende Werte vorhersagen kann? Dachte mir, dass da > das Kalman Filter die einfachste Lösung sei. Viel einfacher als das Kalman Filter ist das Alpha Beta Filter. Das ist so eine Art "Kalmanfilter für Arme". Aber vor allem ist es viel einfacher zu verstehen. Google mal danach. Woda schrieb: > erfahren, dass ein Kalman > Filter da Wunder wirkt. Prinzipiell musst du natürlich aber sehen, dass auch ein noch so gutes Filter keine Informationen herausholen kann die nicht messbar sind. Wie der Name bereits besagt reduziert ein Filter den Informationsgehalt. Dieses wegnehmen von Informationen macht es aber u.U. erst möglich die gemessenen Daten sinnvoll zu nutzen. Die Sensorfusion mit einer IMU ist mit Sicherheit ein gängiges Verfahren um sich zusätzlich Informationen dazuzuholen. Ich verweise da gerne auf Open Source Drohnen - die haben nämlich genau deine Problematik auch. Sie brauchen eigentlich eine sehr genaue Position, haben aber nur GPS, eine schlechte IMU aus MEMS-Sensoren und wollen daraus eine Flugregelung bauen die möglichst auf wenige cm genau die Position halten soll. Da viele Projekte dort Open Source sind bin ich mir sicher, dass sich da was findet für dich ... Ansonsten erzähl doch mehr von deinem Projekt. Dann bekommst du vielleicht noch einige andere Ideen.
Vielleicht auch interessant. Code funktioniert auch habe ich vor ein paar Jahren mal mit einen paar Analog Device Sensoren ausprobiert. sg
Die ganzen Informationen habe ich soweit mal durchgeschaut, allerdings fehlt mir noch immer der genaue Durchblick, wie ich genau die Matrizen fülle. Es geht bei meinem Projekt im Prinzip auch nur darum, dass ich das GPS in einem Auto verwende und dadurch die Messdaten recht ungenau werden. Daher möchte ich die Daten etwas filtern. Die Idee mit dem Alpha Beta Filter ist auch super, aber ich möchte es erstmal mit dem Kalman Filter durchziehen :-) Hat jemand ein Beispiel, mit ähnlicher Grundidee, dass ich mir den Aufbau der Matrizen abgucken kann? :-)
Woda schrieb: > Die ganzen Informationen habe ich soweit mal durchgeschaut, allerdings > fehlt mir noch immer der genaue Durchblick, wie ich genau die Matrizen > fülle. Du brauchst erstmal ein mathematisches Modell. Allgemein ein nichtlineares Modell sieht wie folgt aus x' = f(x,u), y = h(x). x ist die Systemzustände, u der Systemeingang. x' = Ax + Bu wenn dein System linear ist. y = Cx. Konkret zu deinem System: x = [Position, Geschwindigkeit, Beschleunigung], u = 0.
Was du messen kannst ist die Position, die Geschwindigkeit und Beschleunigung müssen geschätzt werden.
:
Bearbeitet durch User
ISBN 9783486705720 Integrierte Navigationssysteme: Sensordatenfusion, GPS und Inertiale Navigation Da wird auch auf die Anwendung von Kalman-Filtern eingegangen.
Hallo, ich hab mal nach einer Implementierung für den STM32 gesucht und hab da Folgendes gefunden: https://github.com/simondlevy/TinyEKF Eine weitere, wirklich nette, graphische Erklärung zum Kalman-Filter findet man hier: http://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ viel Spaß!
Schonmal vielen Dank allerseits! Der Aufbau der einzelnen Matrizen etc. hat super geklappt. Jetzt habe ich aber noch das Problem, dass man mit GPS-Koordinaten ja nicht direkt rechnen kann (oder?). Ich habe die Koordinaten im Dezimalminuten Format, kann mir jemand sagen, wie ich am elegantesten diese Werte im Filter, welcher auf metrische Werte ausgelegt ist, nutze? Ich habe den Ansatz, dass ich die Werte einfach in ein anderes Koordinatensystem stecke, mit dem ersten Wert als (0,0) Ausgangswert und jeweils die Entfernung der Werte aufaddiere. Grüße, Woda
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.