Moving Average Kalman


Durchgehende Durchschnitte glätten den Lärm der Preisdatenströme auf Kosten der Verzögerung (Verzögerung) In den alten Tagen konnten Sie Geschwindigkeit haben, auf Kosten der reduzierten Glättung In den alten Tagen konnten Sie nur Ihre Glättung auf Kosten von Lag Denken, wie Viele Stunden, die Sie versuchten, Ihre Mittel schnell und glatt zu bekommen, erinnern Sie sich, wie ärgerlich es ist, um zu sehen, zunehmende Geschwindigkeit verursacht erhöhte Lärm Denken Sie daran, wie Sie wünschten niedrige Verzögerung und niedrige Geräusche Müde von der Arbeit, wie Sie Ihren Kuchen und essen Sie es nicht verzweifeln, jetzt Die Dinge haben sich geändert, können Sie Ihren Kuchen und Sie können es essen Precision Lagless Durchschnitt im Vergleich zu anderen fortgeschrittenen Filter-Modelle Von den grundlegenden Industriestandard Durchschnitt (Filter) der gewichteten gleitenden Durchschnitt ist schneller als die exponentielle, aber bietet keine gute Glättung, in Kontrast der Exponential hat hervorragende Glättung, aber riesige Mengen an Verzögerung (Lag). Moderne quothigh techquot Filter, obwohl die Verbesserung der alten Grundmodelle, haben inhärente Schwächen. Einige davon werden im Jurik-JMA-Filter beobachtet und die schlimmsten dieser Schwächen sind Überschwingen. Jurik Forschung offen zugeben, um mit einem minimalen Überschwingen, die dazu neigt, irgendeine Form von prädiktiven Algorithmus anzugeben, der seinen Code arbeitet. Denken Sie daran, dass Filter beabsichtigt sind zu beobachten, was jetzt und in der Vergangenheit geschieht. Vorhersage, was als nächstes passieren wird, ist eine illegale Funktion im Werkzeugkoffer von Precision Trading Systems, die Daten werden nur geglättet und verzögert. Oder man könnte sagen, Trends werden genau gefolgt, anstatt zu sagen, welcher Weg weiter zu gehen, wie es bei diesen illegalen Filteralgorithmen der Fall ist. Der Präzisions-Lagless-Durchschnitt versucht nicht, den nächsten Preiswert vorherzusagen. Der Hull-Durchschnitt wird von vielen behauptet, so schnell und glatt wie die JMA von Jurik Forschung, es hat eine gute Geschwindigkeit und niedrige Verzögerung. Das Problem mit der Formel, die im Rumpf-Durchschnitt verwendet wird, ist, dass es sehr einfach ist und führt zu Preisverzerrungen, die eine schlechte Genauigkeit haben, die durch Gewichtung zu stark (x 2) auf die aktuellsten Daten (Boden (Länge 2)) und dann Subtraktion der alten verursacht wird Daten, die zu schweren Überschreitungsproblemen führen, die in manchen Fällen viele Standardabweichungen von den tatsächlichen Werten entfernt sind. Der Präzisions-Lagless-Durchschnitt hat ein ZERO-Überschwingen. Das folgende Diagramm zeigt die immense Geschwindigkeitsdifferenz auf einem 30-Perioden-PLA und 30 Perioden-Rumpf-Durchschnitt. Die PLA war vier Takte vor dem Hull-Durchschnitt auf beiden Hauptdrehpunkten, die auf dem 5-Minuten-Chart der FT-SE100 Future (das ist ein 14 Unterschied in Lag). Wenn Sie die Durchschnittswerte an den Wendepunkten gehandelt haben, um in diesem Beispiel den Schlusskurs zu beenden, signalisierte PLA bei 3.977,5 und Hull war eine Kleinigkeit später bei 3.937, knapp 40,5 Punkte oder monetär 405 pro Vertrag. Das lange Signal auf PLA lag bei 3936 im Vergleich zu Hulls 3.956,5, was einer Kostenersparnis von 205 pro Vertrag mit dem PLA-Signal entspricht. Ist es ein Vogel. Ist es ein Flugzeug. Nein, die Präzisions-Lagless-Durchschnittsfilter wie der VIDAYA-Durchschnitt von Tuscar Chande, die die Flüchtigkeit verwenden, um ihre Längen zu verändern, haben eine andere Art von Formel, die ihre Länge ändert, aber dieser Vorgang wird nicht mit irgendeiner Logik ausgeführt. Während sie manchmal sehr gut arbeiten können, kann dies auch zu einem Filter führen, der sowohl Verzögerung als auch Überschwingen erleiden kann. Der Zeitreihen-Durchschnitt, der in der Tat ein sehr schneller Durchschnitt ist, könnte auch umbenannt werden, um die quadratische Überschreitung dieser Ungenauigkeit zu machen, macht es für eine ernsthafte Bewertung von Daten für den Handel nicht nutzbar. Der Kalman-Filter verzögert sich häufig zurück oder überschreitet Preisarrays aufgrund seiner über eifrigen Algorithmen. Andere Filter Faktoren in Preis Impuls zu versuchen, vorherzusagen, was in der nächsten Preisintervall passieren wird, und dies ist auch eine fehlerhafte Strategie, da sie überschwemmen, wenn hohe Impulsablesung umgekehrt, so dass der Filter hoch und trocken und Meilen entfernt von der tatsächlichen Preis Aktivität . Der Präzisions-Lagless-Durchschnitt verwendet eine reine und einfache Logik, um den nächsten Ausgangswert zu bestimmen. Viele ausgezeichnete Mathematiker haben versucht und versäumt, verzögerte Durchschnitte zu schaffen, und im Allgemeinen ist die Vernunft ihre extreme Mathematik Intellekt ist nicht durch ein hohes Maß an commonsense Logik gesichert. Precision Lagless Average (PLA) ist aus rein logischen Grundalgorithmen aufgebaut, die viele verschiedene Werte untersuchen, die in Arrays gespeichert sind und wählt, welchen Wert an die Ausgabe senden soll. PLAs überlegene Geschwindigkeit, Glättung und Genauigkeit machen es zu einem hervorragenden Trading-Tool für Aktien, Futures, Forex, Anleihen etc. Und wie bei allen Produkten von Precision Trading-Systeme entwickelt, ist das zugrunde liegende Thema das gleiche. Geschrieben für Händler, DURCH EINEN TRADER. PLA Länge 14 und 50 auf E-Mini Nasdaq futureHow Kalman Filters Arbeit, Teil 1 Das ist, Sie multiplizieren Sie einfach die Wahrscheinlichkeit, dass Sie in einem Land mit der Wahrscheinlichkeit waren, sich in einem Restaurant in diesem Land zu finden, da man schon in Das Land, um die neue Wahrscheinlichkeit zu erhalten. (Die letzte Spalte ist eigentlich nicht eine Wahrscheinlichkeit, bis sie so skaliert ist, dass es auf 1 summiert, aber nur die relativen Werte sind wichtig, also ist es eine Wahrscheinlichkeit so weit wie jeder kümmert.) Nach ein paar Momenten bringt die Kellnerin dir Sushi, also sinkt ihr Die Chancen für Tadschikistan und Paraguay und entsprechend erhöhen die Chancen auf Japan, Taiwan, und solche Orte, wo Sushi-Restaurants sind relativ häufig. Prob Von Sushi gegeben Restaurant, Land Sie holen die Stäbchen und probieren Sie das Sushi, entdecken, dass seine hervorragende. Japan ist jetzt bei weitem der wahrscheinlichste Ort, und obwohl es noch möglich ist, dass youre in den Vereinigten Staaten, seine nicht annähernd so wahrscheinlich (leider für die USA). Prob Von guten Sushi Diese ldquoprobabilitiesrdquo werden immer schwer zu lesen mit all diesen Nullen vor. Alles, was zählt, ist die relativ Wahrscheinlichkeit, also vielleicht skalierst du diese letzte Spalte um die Summe der ganzen Spalte. Jetzt ist es wieder eine Wahrscheinlichkeit, und es sieht so etwas aus: Nun, da youre ziemlich sicher sein Japan, machst du eine neue Liste von Orten in Japan, um zu sehen, ob du es weiter einschränken kannst. Du schreibst Fukuoka, Osaka, Nagoya, Hamamatsu, Tokyo, Sendai, Sapporo, etc. alle gleich wahrscheinlich (und vielleicht auch Taiwan, nur für den Fall). Jetzt kommt die Kellnerin unagi. Sie können unagi überall, aber seine viel häufiger in Hamamatsu, so dass Sie die Chancen auf Hamamatsu erhöhen und leicht verringern die Chancen überall sonst. Durch die Fortsetzung auf diese Weise können Sie schließlich in der Lage sein zu finden, dass youre Essen in einem köstlichen Restaurant in Hamamatsu Station mdash eine ziemlich glückliche zufällige ziehen. Theres gar nichts Besonderes an dem Prozess, den du durchgemacht hast (außer dass du so gute Restaurantdaten hast), und jeder würde zustimmen, dass es ziemlich vernünftig war. Es war auch im Grunde ein Partikelfilter. Eine Methode zur Bestimmung unbekannter Dinge, wie Ort, von Messungen von anderen Dingen, wie Küche, mit verschiedenen Wahrscheinlichkeiten über das, was youd beobachten unter verschiedenen Hypothesen. In der Tat, seine Art wie eine automatisierte Anwendung der wissenschaftlichen Methode. Isnt it Wenn es als Teil eines Algorithmus durchgeführt wird, wird diese Art von Ding rekursive Zustandsschätzung genannt. Leider erhalten nur ein kleiner Teil der Maschinenbauer, Elektroingenieure und Datenwissenschaftler eine formale Ausbildung zum Thema und noch weniger ein intuitives Verständnis für den Prozess zu entwickeln oder Kenntnisse über die praktische Umsetzung zu haben. Zwar gibt es sehr viele gute Bücher über die Mathematik hinter sich und die Details, wie man es auf bestimmte spezifische Probleme anwenden, wird dieser Artikel einen anderen Ansatz nehmen. Nun konzentrieren sich auf die Entwicklung: eine Intuition für rekursive Staatsschätzung, ein breites Wissen über die stärksten und allgemeinsten Typen und eine gute Vorstellung von den Implementierungsdetails. Sobald man eine gute Grundlage für diese Dinge hat, wird es viel einfacher, spezifische Algorithmen in der Filterliteratur aufzupassen, sie anzupassen, sie an Code anzupassen, Probleme zu korrigieren und die Leistung anderen zu erklären. Interessanterweise werden die intuitivsten Formen der rekursiven Schätzung erst vor kurzem populär, so würden sie ihre Geschichte ganz rückwärts betrachten: ausgehend von den jüngsten Typen wie Partikelfiltern und der Rückkehr in die alte Vergangenheit (die 1960er Jahre) für die Durchbruch, der die Apollo Navigationsalgorithmen ermöglichte, ein Raumfahrzeug auf einem Kurs zum Mond zu halten: der Kalman-Filter. Das Zielpublikum ist Ingenieure, Wissenschaftler, Macher und Programmierer, die ein System entwerfen müssen, um einen Prozess zu verstehen, zusammen mit den Systemingenieuren und Teamführern, die ein besseres Verständnis dafür benötigen, was ihre Teams bauen. Um sich dem Thema zu nähern, beginnen wir mit einer groben Skizze von Filterideen. Dann füllen Sie die Skizze mit mehr und mehr Detail aus. Der erste Teil könnte ein paar Stunden dauern, und der zweite Teil wird etwa die Hälfte dauern, je nachdem, wie tief man sich entschließt, zu lesen. Dann gibt es einige Anhänge für zusätzliche Implementierungshinweise und Übung mit diesen Themen. Jeder kann den grundlegenden Ideen folgen, aber eine kleine Wahrscheinlichkeitstheorie und grundlegende lineare Algebra wird dazu beitragen, die Mathematik und das Referenzmaterial zu folgen, wie wir detaillierter werden. Nun zeigen Sie einige gute Ressourcen auf dem Weg. Damit können wir loslegen. Die hier gefundenen vier Filter, zusammen mit dem Code, der alle Bilder erzeugt hat, können hier für MATLAB heruntergeladen werden. Die Partikelfilter Partikelfilter können ziemlich einfach sein, und es gibt etwa so viele Formen wie es Probleme zu lösen gibt. Nun schauen Sie sich eine einfache Art von Partikel-Filter namens Bootstrap-Filter, um ein Verständnis der Grundlagen zu bauen. Eine Iteration eines Partikelfilters Partikelfilter arbeiten wie folgt: Zuerst fragen wir, ldquoWhat Sachen könnte passieren, und wie wahrscheinlich ist jeder thingrdquo Dann ldquoFor jedes Ding, das geschehen könnte, was würde ich erwarten, oberverdqua Dann ldquoHow wahrscheinlich ist Jede Sache, da was ich jetzt tatsächlich beobachtet habe. Dann wiederholen wir uns. Angenommen, wir kennen die ursprüngliche Position eines hüpfenden Balles, wissen aber nicht viel über die Geschwindigkeit. Lets erstellen eine Reihe von ldquohypothesisrdquo Bälle, zufällig verstreut um, wo wir denken, die echte Ball ist und mit zufälligen Geschwindigkeiten. Und sagen wir, dass, soweit wir wissen, dies alle gleichermaßen wahrscheinlich Kandidaten für die wahre Bälle Position und Geschwindigkeit (sein Zustand) sind. Diese Liste der hypothetischen Bälle ist wie die Liste der Länder. Jeder hypothetische Bällezustand wird als Teilchen bezeichnet. Und die Wahrscheinlichkeit, dass das Teilchen am besten den wahren Zustand darstellt, ist das Partikelgewicht. Also, für jedes Teilchen haben wir eine hypothetische Kugeln Position und Geschwindigkeit, sowie ein Maß für die Wahrscheinlichkeit von 0 bis 1, dass der Ball die Wahrheit beschreibt, wobei 1 vollkommene Sicherheit ist und 0 überhaupt keine Möglichkeit darstellt. Z. B. Das Partikelgewicht für Süd-Georgia-Insel geht genau auf 0, da es keine Sushi-Restaurants auf der Insel Süd-Georgia gibt (trotz aller Fische, die dort verbraucht werden). Nun, einen Moment später, bekommen wir eine Messung der Kugeln Position. Wie kam der Ball zu dieser Position? Ist es aufgestanden und langsam zurückgekehrt, ging es hinunter, hüpfte aus dem Boden und komm zurück. Wir wissen es noch nicht. Jeder Weg ist gleichermaßen wahrscheinlich. Wir wissen auch, dass die Messung nicht perfekt ist, hat es etwas Lärm. Also, lasst uns jede Hypothese, propagieren sie vorwärts zum Zeitpunkt der Messung, und sehen, wie gut es die reale Messung voraussagt. Er läßt den Zustand (die beiden Positionsbegriffe und die Geschwindigkeitsbegriffe) des (i) ten Teilchens bei der letzten Abtastzeit anrufen. Und läßt den Zustand bei der aktuellen Samplezeit anrufen. Wir verwenden Hüte, um Schätzungen und (k) für die Probe zu bezeichnen. Wir wissen, wie bouncing Bälle arbeiten, so können wir von der vorherigen Zeit auf die aktuelle Zeit mit einer Ausbreitungsfunktion zu verbreiten. (F). Für die Simulationstechniken, die in diesen Arten von Ausbreitungsfunktionen verwendet werden, siehe ldquoHow Simulationen Workrdquo. Dies aktualisiert die Position und die Geschwindigkeit für jede der (n) Teilchen, indem sie mit der vorherigen Position und Geschwindigkeit beginnt und die Parabel berechnet, die der Ball aufgrund der Schwerkraft erzeugt, wenn er den Boden schneidet, und die Flugbahn vom Boden nach oben, etc. Bis es die aktuelle Zeit erreicht. Die Ausbreitungsfunktion ist also eine kleine Simulation. Angesichts der aktualisierten Position prognostizieren wir, was für ein Teilchen zu messen ist, mit einer bekannten Beobachtungsfunktion, (h). Wo der Hut eine vorhergesagte Messung bezeichnet. Um uns von der realen Messung zu unterscheiden (zk). Für unser Problem gibt die Beobachtungsfunktion einfach die Position des Balles zurück. Einige Teilchen prognostizieren die Messung ganz gut, und andere tun schlecht. Wir können den Unterschied zwischen jeder Bälle neue Position und die Messung ((zk - Hut)) und sagen, ldquoWas sind die Chancen zu sehen, ein Messfehler dieses große, was wir wissen, wie laut die Messungen können berdquo Die wirklich schlechte Vorhersagen Haben niedrige Chancen, während die guten Vorhersagen hohe Quoten haben werden. Also, wir haben eine Wahrscheinlichkeit für den Messfehler für jede hypothetische Kugel. Wir können jedes Partikelgewicht mit dieser Wahrscheinlichkeit multiplizieren. Das Ergebnis ist, dass Partikel, die am besten vorhersagen, die Messung am Ende mit dem höchsten Gewicht. Lets zeigen, dass durch die Schattierung der Trajektorien nach ihren neuen Gewichten: (Beachten Sie, dass nach diesem Multiplikation die Summe der Gewichte nicht 1. Wir können renormalisieren, indem wir alle Gewichte durch die Summe aller Gewichte teilen.) Aktualisierte Gewichte für hypothetische Trajektorien Mit diesen Gewichten können wir den gewichteten Durchschnitt aller hypothetischen Kugeln berechnen. Dies könnte die beste Schätzung des Staates (es gibt auch viele andere Möglichkeiten, wie wir die Wahrscheinlichkeiten verwenden könnten, um eine beste Schätzung zu berechnen, mit dem gewichteten Durchschnitt ist die einfachste). An diesem Punkt haben wir eine aktualisierte Zustandsschätzung und damit verbundene Unsicherheit. Hier als endliche Sammlung von Partikeln dargestellt. Wir konnten jetzt noch einmal auf eine weitere Messung warten und diesen Prozess noch einmal durchlaufen. Mi propagiere jeden Ball zur Zeit der Messung, berechne die Wahrscheinlichkeit des Fehlers zwischen der Messung und dem propagierten Ball und aktualisiere diese Ballenwahrscheinlichkeit. So geht es durch einen weiteren Zyklus. Eine andere Iteration, Hinzufügen in Resampling und Regularisierung Eine neue Messung und propagierte Partikel Einige Partikel vorhersagen die neue Messung gut, und einige nicht mehr gut vorhersagen. Aktualisiere die Wahrscheinlichkeit von jedem. Beachten Sie, dass einige unserer ursprünglichen hypothetischen Bälle jetzt nutzlos sind. Theres nur so, wie sie die Wahrheit darstellen. Plus, theyre alle beginnen, sich ziemlich weit auszubreiten. Irgendwann sind alle alle zu weit weg von der Wahrheit, und unser Filter wird auseinanderfallen. Der Schlüssel, der die Partikelfilterarbeit macht, ist, dass der Satz von Partikeln jedes Mal in einer Weile (oder sogar nach jedem Update) neu berechnet wird, genau wie wenn wir von einer Liste von potenziellen weltweiten Standorten zu einer feineren Liste von Standorten in Japan umgestellt haben. Es gibt eine Menge von Möglichkeiten, dies zu tun, aber Herde ein einfaches: Erstellen Sie einen neuen Satz von Partikeln nach dem Zufallsprinzip Auswahl von Partikel aus dem aktuellen Satz nach dem Partikelgewicht. So werden im allgemeinen Partikel mit einem Gewicht von 0,04 doppelt so oft gezogen wie Partikel mit einem Gewicht von 0,02. Sobald der neue Satz von Partikeln erstellt ist, setzen Sie alle Gewichte zurück auf 1N. Die Dispersion der Unsicherheit ist nun in Gegenwart verschiedener Partikel und nicht durch die Partikelgewichte dargestellt. Nur um klar zu sein: Es werden viele duplizierte Partikel an dieser Stelle sein. Berechnen Sie die Probenkovarianz des neuen Satzes von Teilchen oder ein anderes Maß ihrer Dispersion. Die Probenkovarianz ist besonders einfach: Pk frac sumin (Hutstange) (Hutstange) T wobei (bar) der Durchschnitt aller Teilchen ist und (T) ldquotransposerdquo ist. Machen Sie einen Haufen von Gaußschen zufälligen Ziehungen aus der Beispielkovarianzmatrix (siehe Anhang). Multiplizieren Sie diese Draws mit einem kleinen Tuning-Parameter, der eine Reihe von Störungen gibt. Fügen Sie jedem Partikel eine Störung hinzu. Dies schafft eine Reihe neuer Partikel, die um die Hochwahrscheinlichkeitsbereiche des Zustandsraumes verstreut sind. Die ersten beiden Schritte werden als Resampling bezeichnet. Und die letzten zwei werden als Regulierung der Teilchen bezeichnet. Lets tun das für den aktuellen Satz von Partikeln: Umriss eines Bootstrap-Filters Wir können nun mit der nächsten Messung fortfahren, und dann die nächste und die nächste, halten mit dem Prozess weve eingerichtet: Um den (relativ) einfachen Bootstrap-Filter zu sehen In diesem Beispiel verwendet, klicken Sie hier oder laden Sie die Beispieldateien hier. Propagate der Partikel. Bestimmen Sie, wie wahrscheinlich jedes Teilchen die neue Messung erhält. Aktualisiere ihre Gewichte (und renormalisieren, damit die Summe aller Gewichte zu 1 kommt). Berechnen Sie die Zustandsschätzung, z. B. Mit einem gewichteten Durchschnitt. Wenn die Partikel diesmal wiederholt werden, wählen Sie nach dem Zufallsprinzip Partikel nach ihren Gewichten aus und geben dann die Gewichte auf 1N zurück. Wenn Sie die Teilchen regelmäßig regulieren, stören Sie den neuen Satz von Teilchen mit kleinen zufälligen Ziehungen. Zurück zum Ball-Beispiel, heres das Ergebnis konvergierenden im Laufe der Zeit, mit der Ungewissheit klar Clustering um den wahren Zustand (blau): Animation von Partikeln, Messungen und Wahrheit im Laufe der Zeit. Nach zehn Sekunden: Probabilistische Robotik von Thrun, Burgard und Fox enthält Einstiegsmaterial für Partikelfilter und Sigma-Punkt-Filter und diskutiert ihre Verwendung im Roboter-Standortfindung (ein multimodales Problem, bei dem sich Partikelfilter auch bei eingebetteten Anwendungen bewährt haben ). Annahmen, Vor - und Nachteile Was für all das nötig ist Nur ein paar einfache Dinge: Man kann ungefähr beschreiben, wie sich die Staaten im Laufe der Zeit ändern. Sie können die Wahrscheinlichkeit eines hypothetischen Messfehlers näher bestimmen. Die Vorteile der Partikelfilterung sind ganz klar: Sie können einen Zustand mit sehr wenig theoretischer Arbeit und für viele verschiedene Arten von Problemen grob abschätzen. Die Unsicherheit (Partikelpartikel) kann sogar über mehrere Bereiche des Zustandsraumes verteilt werden, was eine multimodale Wahrscheinlichkeitsverteilung darstellt. Weiterhin ist das Partikelfilterverfahren leicht an verschiedene Probleme anpassbar (z. B. wann und wie zu wiederholen, wie man den Messfehler auswertet, wie man Partikel an erster Stelle positioniert). Dies macht Partikelfilterung flexibel und weitgehend nützlich. Partikel für eine multimodale Verteilung, die eindeutig um drei Hochwahrscheinlichkeiten im Zustandsraum gruppieren. Die Nachteile sind auch ganz klar: Partikelfilter erfordern in der Regel eine große Anzahl von Partikeln, die eine erhebliche Laufzeit in Anspruch nehmen können. Es ist nicht ungewöhnlich für selbst der einfachste Partikelfilter, 1000 Partikel zu verwenden, die 1000 Simulationen pro Messung erfordert. Die notwendige Anzahl von Partikeln wird enorm, wenn die Dimension des Staates wächst. (Unser Problem hätte im Wesentlichen von 1000 Partikeln profitiert, aber es wäre schwieriger gewesen, die Plots mit einer so großen Anzahl von Partikeln zu verstehen.) Die Ungewissheit als eine Menge von Partikeln und Gewichten mdash eine diskrete Wahrscheinlichkeitsverteilung mdash bedeutet, dass das Beste Schätzung des Staates ist in der Regel ziemlich grob, und so Partikelfilter arbeiten schlecht für Probleme, die hohe Genauigkeit erfordern. Wenn eine bessere Leistung erforderlich ist, müssen Partikelfilter oft maßgeschneidert werden, um jedem einzelnen Zustandschätzproblem zu entsprechen, und dies kann lange dauern, nicht zuletzt, weil das Testen erfordert, dass man den Filter ausführt, der selbst eine lange Zeit dauern kann. Aus dem gleichen Grund, es ist schwer, einen nützlichen Allzweck-Partikelfilter zu finden, obwohl der Bootstrap-Filter für einfache Probleme gut ist. Bonus Partikelfilter sind ähnlich wie genetische Algorithmen, in denen sie schnell zusammengestellt werden können und oft gut genug arbeiten, da eine lange Zeit zu laufen. In der Tat ist ein Partikelfilter im Wesentlichen ein genetischer Algorithmus, bei dem jedes Partikel ein Individuum in der Population ist, die Eignung ist der Grad, in dem ein Partikel die Beobachtung prognostiziert und die primäre Form der Fortpflanzung ist Mutation. Partikelfilter gewinnen erst vor kurzem an Popularität, da die Rechenleistung und das verteilte Rechnen jetzt so billig und einfach zu handhaben sind. Weiterhin gibt es viele neue Techniken für Partikelfilter, die die Laufzeit reduzieren und die Genauigkeit erhöhen können. Für Anwendungen, die Geschwindigkeit benötigen, benötigen wir in der Regel eine andere Filterarchitektur. Die Sigma-Punkt-Filterunsicherheit als Kovarianzmatrix Bei Sigma-Punkt-Filtern (auch als unscented Filter bezeichnet) repräsentieren wir keine Unsicherheit mit einem großen Bündel von gestreuten Partikeln, sondern wir nehmen an, dass die Unsicherheit eine Gaußsche (normale) Verteilung hat und ist Zentriert auf die aktuellste Schätzung: Unter Verwendung einer Kovarianzmatrix, die als die 3sigma-Grenze dargestellt ist, verglichen mit Partikeln können wir daher die Unsicherheit mit einer Kovarianzmatrix darstellen, wie wir für die Partikel oben berechnet haben. Zeigten die Kovarianz als eine Ellipse um die staatliche Schätzung, wo die Ellipse an der 3sigma-Grenze gezeichnet wird (der wahre Zustand ist also innerhalb dieser Ellipse etwa 99,7 der Zeit). Die 1000 Teilchen werden nur zum Vergleich genommen. Die Eigenvektoren der Kovarianzmatrix sind die Hauptachsen des Ellipsoids, und die Quadratwurzeln der Eigenwerte sind die Halbachsenlängen des 1sigma-Ellipsoids entlang der entsprechenden Hauptachsen. Daraus können wir die relevanten Ellipsen aus Gründen der Visualisierung konstruieren. Ausbreitung Wenn eine neue Messung eintritt, müssen wir diese Ungewissheit vorwärts zur Zeit der Messung weitergeben. Wie machen wir das Sigma-Punkt-Filter, indem wir zuerst ein paar Sigma-Punkte um die aktuelle Schätzung setzen. Sigma-Punkte sind die gleichen wie Partikel, aber wir sind besonders wichtig, wo wir sie platzieren, und wir brauchen nicht, um einzelne Gewichte zu verfolgen. Die Sigma-Punkte sitzen auf den Hauptachsen des Unsicherheits-Ellipsoids um die aktuelle Schätzung (meist eine viel kleinere Ellipse als die, die wir gezeichnet haben). Beachten Sie, dass nur zwei Dimensionen des Problems zu sehen sind, gibt es Sigma-Punkte in den beiden Geschwindigkeitsabmessungen auch, sowie in den Rauschmaßen, die gut noch weiter unten kommen. Die Schätzung aus dem letzten Sample (Hut) und jedem Sigma-Punkt (Hut) wird dann zur Zeit der neuen Messung weitergeleitet. Neue Mess - und Ausbreitungs-Sigma-Punkte (Das Plus-Zeichen bedeutet, dass die Schätzung mit den damals verfügbaren Messungen korrigiert wurde, die sich weiter unten abdecken.) Genau wie bei Partikelfiltern neigen die Sigma-Punkte dazu, sich zu verbreiten (Ungewissheit wächst meist während der Ausbreitung) . Und genau wie bei Partikelfiltern können wir eine neue Zustandsschätzung als gewichteten Durchschnitt der Sigma-Punkte berechnen. Ähnlich wie früher ist die Ausbreitungsfunktion: aber theres etwas Neues hier: weve add (q), die Prozessrausch mdash Unbekannte repräsentiert, die die Ausbreitung beeinflussen, wie vielleicht eine zufällige Beschleunigung aufgrund von Veränderungen im Wind. Welchen Wert würden wir für sie verwenden So wie wir Sigma-Punkte im Staatsraum verbreitet haben, so haben wir auch Sigma-Punkte im Prozess-Lärm-Raum verbreitet. Also, wenn es 3 getrennte Dinge gibt, die zufällig die Ausbreitung beeinflussen, dann ist (q) ein dreidimensionaler Vektor. Bei Sigma-Punkt-Filtern wird davon ausgegangen, dass das Prozessrauschen Gaussian ist, so dass die Unsicherheit als Kovarianzmatrix (Q) angegeben ist. Auch wenn es nicht Gaussian ist, ist dies in der Regel eine gute Annäherung für jede unimodale Verteilung. Also, die Sigma-Punkte im Prozess-Lärm-Raum sind genau wie Sigma-Punkte im Zustand-Raum, und zusammen genommen sind nur die großen Sigma-Punkte. Sobald wir die Sigma-Punkte berechnet und jeweils propagiert haben, berechnen wir den mittleren vorhergesagten Zustand als gewichteten Durchschnitt: wo (Hut -) ist der ldquomiddlerdquo Sigma-Punkt. Alle Sigma-Punkte verwenden das gleiche Gewicht, (W), mit Ausnahme des Mittelpunktes, der gewöhnlich einen größeren (W0) verwendet, weil wir ihm mehr vertrauen. Wir haben jetzt die beste Vorhersage des Zustandes bei Probe (k), und wir markierten ihn mit einem Minuszeichen, um ldquobefore Korrekturen mit der neuen Messung oder a priori zu bezeichnen. Wir können dann die Stichprobenkovarianz um diese neue Schätzung berechnen und geben die Kovarianz des vorhergesagten Zustands (wieder hat der Mittelpunkt ein größeres Gewicht (Wc), als die anderen, aber die Idee ist dasselbe). Wir haben jetzt eine Vorstellung davon, was der Staat ist, wenn die Messung kommt, sowie die Ungewissheit, die mit unserer Vorhersage verbunden ist. Korrigieren der Schätzung Jetzt müssen wir natürlich die Messinformationen verwenden, um die Zustandsschätzung und Kovarianz irgendwie zu korrigieren. Genau wie wir einen prognostizierten Zustand für jeden Sigma-Punkt haben, (Hut -) und den gesamten vorhergesagten Zustand (Hut-k), machen wir eine Gesamtvorhersagemessung (Hut k), indem wir für jeden Sigma-Punkt eine Vorhersage machen: ( Wobei (r) das Messrauschen mit Kovarianz (R) ist, das analog zum Prozeßrauschen ist) und dann das gewichtete Mittel berechnen: Benutze diese vorhergesagte Messung, um den vorhergesagten Zustand so zu korrigieren: yk zk - hat k hat k hat - k K yk, wo das Pluszeichen ldquoafter Messung Korrekturrdquo oder a posteriori bedeutet. Aus historischen Gründen wird (yk) der Innovationsvektor genannt. Messvorhersagefehler oder Rest. Es ist ein Vektor, der von unserer vorhergesagten Messung auf die eigentliche Messung hinweist, und (K) bestimmt, wie ein Vektor im Messraum einer Korrektur im Zustandsraum zugeordnet ist. Für diejenigen, die nicht wissen, Aesops Junge, der weinte, ldquoWolfrdquo: Ein Junge beobachtete Schafe hoch auf einer Klippe mit Blick auf sein Dorf. Er wurde langweilig und schrie in das Dorf, ldquo Wolf Wolfrdquo Die Dorfbewohner kamen auf den mühsamen Pfad mit Heugabeln in der Hand, nur um zu entdecken, dass der Junge lachte und kein Wolf in Sicht war. Eine Woche später versuchte der Junge den gleichen Trick, und einige Dorfbewohner kamen noch. Eine Woche später sah der Junge eine sehr schöne Packung Wölfe, die sich näherten. Ldquo Wolf Wolfrdquo schrie er, aber die Dorfbewohner ignorierten ihn. LdquoWolfrdquo wieder, aber umsonst. Als der Junge es versäumte, die Schafe nach Hause zu bringen, gingen die Dorfbewohner den Weg zur Suche. Sie waren traurig, dass ihre Herde gegessen worden war und der Junge verschwunden war. Die Moral der Geschichte ist, dass die Menschen ihre internen Wahrscheinlichkeiten nur durch kleine Mengen aktualisieren, wenn es neue Informationen aus einer lärmenden Quelle gibt. Denken wir an einige wünschenswerte Eigenschaften für (K). Wenn unsere Kenntnis des Staates schon sehr gut war, und die Messungen waren so laut, dass sie werent das nützlich, dann (K) sollte kleine mdash wir wahrscheinlich nicht viel Korrektur auf die Vorhersage. Zum Beispiel, wenn jemand weint, ldquoWolfrdquo, aber dieser Kerl ist immer weinen Wolf, und nobodys gesehen einen Wolf hier hier für Alter, dann ignorieren Sie ihn, oder zumindest meistens ignorieren ihn. Auf der anderen Seite, wenn unsere Kenntnis des Staates war ziemlich schlecht, und die Messungen waren bekannt, dass ziemlich gut (Wölfe sind oft hier zu sehen, und der Kerl, der weinte, ist in der Regel recht über diese Art von Dingen), dann wed Wollen den Messungen viel mehr vertrauen. In diesem Fall möchte wed (K) groß sein (wir hätten vielleicht nicht vorausgesagt, dass Theres ein Wolf ist, aber dort scheint sicher ein jetzt zu sein). Wenn wir das in Mathe verwandeln, repräsentieren wir die Beziehung zwischen der Unsicherheit im Staat (gibt es einen Wolf) und der Messfehler (jemand schreit Wolf fälschlicherweise) mit einer Kovarianzmatrix (P). Wir stellen die Unsicherheit des Messfehlers dar (jemand schreit Wolf fehlerhaft) mit einer anderen Kovarianzmatrix (P). Wenn es wirklich sicher war, dass es gibt oder nicht ein Wolf, (P) wird ziemlich klein sein. Wenn es keine Pranksters gibt, wird (P) auch klein sein, aber nicht kleiner als unsere grundlegende Unsicherheit, ob theres ein Wolf um oder nicht. Wenn es Pranksters gibt, dann (P) wird große mdash viele Fehler. Wir berechnen diese als gewichtete Probe Kovarianzen, ähnlich wie wir für den Partikelfilter. Wenn wir zurück zum Bouncing-Ball wechseln, ist unsere Messung die Ballstellung, so dass wir sowohl (P) als auch (P) für den Positionsfehler in der gleichen Handlung zeichnen können: State-Innovations-Kovarianz und Innovationskovarianz Mit diesen Kovarianzmatrizen können wir versuchen, Einfaches Verhältnis: die Ungewissheit in unserer Vorhersage ((Hut-k) und (Hut k)) ldquooverDie Ungewissheit in unserem vorhergesagten Messfehler ((yk zk - Hut k)), in einem Matrix-Sinn: Es stellt sich heraus, dass diese ldquoratiordquo ist Eine wirklich gute wahl Für lineare Systeme wird es die Schätzung mit dem kleinsten quadratischen Fehler generell erzeugen. Es heißt der Kalman-Gewinn. Beachten Sie, wie in unserem Fall die Ellipsoide für (P) und (P) ziemlich eng beieinander liegen. Das bedeutet, dass wir viel Ungewissheit darüber haben, wo der Ball gehen wird, und wir haben ein wenig mehr Ungewissheit darüber, was gut messen. Da der Kalman-Gewinn ist wie ein Verhältnis, und unsere ldquonumeratorrdquo und ldquodenominatorrdquo Begriffe sind ziemlich eng zusammen, wird unser Gewinn in der Nähe der Identitätsmatrix für die Position Teil des Staates sein. Ein entsprechender Faktor wird den Geschwindigkeitsteil des Zustands aktualisieren. Der eigentliche Kalman-Gewinn für dieses Beispiel ist: wo die beiden Positionsbegriffe der obere Teil des Staates sind und die beiden Geschwindigkeitsbegriffe auf dem Boden liegen. Dies sagt, dass die Aktualisierung die meisten der Differenz (0,8) von der vorhergesagten Position zu der gemessenen Position sein wird, und entsprechend wird die Geschwindigkeit in der gleichen Richtung (1.2) erhöht. Wir haben jetzt die endgültige Zustandsschätzung für die aktuelle Messung: Korrigieren der Kovarianz war noch nicht ganz fertig. Die Korrektur wirkt sich auch auf die Unsicherheit in unserer neuen Schätzung aus, und wir haben die Sigma-Punkte nicht aktualisiert, so dass wir havent dargestellt haben, wie die Korrektur unsere Unsicherheit reduziert. Wir können dies auch berücksichtigen, indem wir die Sigmapunkte auch korrigieren, in gleicher Weise haben wir den Zustand korrigiert. Dann können wir die neue Kovarianzmatrix als Probenkovarianz der korrigierten Sigma-Punkte (Pk) berechnen. Allerdings gibt es keine Notwendigkeit, jeden Sigmapunkt buchstäblich zu korrigieren, weil die Definition für den Kalman - Gewinn zu einem schnelleren Weg führt: Pk Pk - K Rk KT wobei (Rk) die Kovarianz des Messfehlers ist, wie wir es vielleicht haben könnten Spezifikationsblatt für unsere Positionssensoren. Wir arbeiten hier nicht aus, aber wir können das Ergebnis sehr gut interpretieren: Der Kalman-Gewinn bestimmt, wie viel von dem Messrauschen wir von der propagierten Kovarianzmatrix subtrahieren können. Erinnern Sie sich, dass, wenn das Messrauschen groß war, dann (K) klein wäre (Messrauschen ist im ldquodenominatorrdquo), und so würde sehr wenig von dem Messrauschen abgezogen werden. Wenn das Messrauschen klein wäre, wäre (K) größer und würde einen größeren Teil des (kleineren) Messrauschens subtrahieren. Das Ergebnis ist, dass die richtige Menge an (R) im Laufe der Zeit entfernt wird. Das bedeutet, dass große Kalman-Gewinne mehr subtrahieren und eine kleine Kovarianzmatrix hinterlassen, die in der Schätzung mehr Sicherheit widerspiegelt. Hier sind die Ergebnisse. Beachten Sie, wie die 3sigma-Grenze kleiner ist als für unsere Anfangsschätzung. Das vervollständigt einen Zyklus des Sigma-Punkt-Filters Wenn eine neue Messung eintritt, können wir es noch einmal machen. Vorwärts gehen 10 Sekunden, hier sind die Ergebnisse: Ergebnisse von 10s der Simulation Schauen Sie, wie die Ungewissheit in der up-down-Element wird wirklich klein an der Spitze der Bounce, weil wir wissen, dass der Ball wird dort langsam, während die Ungewissheit in Das linksseitige Element ist am Ende ziemlich gut konstant, da sich die Rechtsgeschwindigkeit nicht ändert. Um den in diesem Beispiel verwendeten Sigma-Punkt-Filter zu sehen, klicken Sie hier oder laden Sie die Beispieldateien hier herunter. Am Ende ist die Schätzung gut auf die Wahrheit ausgerichtet, trotz der wirklich schrecklichen Messungen. Tatsächlich waren die Messungen für dieses Beispiel tatsächlich schlechter als die, die für den Partikelfilter verwendet wurden, und doch ist die Genauigkeit deutlich besser. Aufgrund der Tatsache, dass Partikel eine grobe Darstellung der Verteilung erzeugen, während Sigma-Punkt-Filter schön und glatt sind. Überblick über einen Sigma-Point-Filter Kalman-Filter und Neuronale Netze liefert hervorragende Informationen über den unscented Kalman-Filter (Sigma-Punkt-Filter) und wird häufig in der Literatur zitiert. Obwohl der relevante Abschnitt kurz ist, enthält er zahlreiche praktische Formen, mit zugänglicher Diskussion und sehr gutem Pseudocode. Richten Sie die anfänglichen Sigma-Punkte aus der letzten Zustandsschätzung und Kovarianzmatrix ein. Für jede Dimension des Prozessrauschens und für jede Dimension des Messrauschens, plus 1 mehr für den mittleren Sigma-Punkt, muss ein positiver und negativer Sigma-Punkt für jede Dimension des Zustands benötigt werden. Vermehrung jedes der Sigma-Punkte vorwärts zum Zeitpunkt der neuen Messung. Erstellen Sie die prognostizierte Messung für jeden Sigma-Punkt, einschließlich Sensor-Rauschen. Benutze eine gewichtete Summe der Sigma-Punkte als den mittleren vorhergesagten Zustand und mittlere vorhergesagte Messung. Berechnen Sie die Probenkovarianz zwischen den propagierten Sigma-Punkten über den mittleren Zustand und die vorhergesagten Messungen über die mittlere vorhergesagte Messung (P). Berechnen Sie die Probenkovarianz der Messfehler über die mittlere Messung (P). Berechnen Sie den Kalman-Gewinn, (K). Korrigieren Sie die Zustandsschätzung und Kovarianzmatrix. Annahmen, Vor - und Nachteile Wenn die verschiedenen Unsicherheitsquellen (bisherige Unsicherheit, Prozessgeräusche und Messgeräusche) unimodal und unkorreliert sind, sind Sigma-Punkt-Filter eine starke Option. Einige Vorteile: Innerhalb ihrer Annahmen sind sie im Allgemeinen genauer als Partikelfilter, da sie sich nicht auf zufällige Partikel verlassen. Theyre weit, weit schneller als Partikelfilter. Wenn ein Partikelfilter 1000 Punkte benötigen kann, kann ein Sigma-Punkt-Filter nur 9 oder so brauchen. Ihre Annahmen gelten für viele verschiedene realistische Probleme, und das Aufstellen eines Sigma-Punkt-Filters erfordert nur die Festlegung der Ausbreitungsfunktion, der Messfunktion, der Prozessrauschkovarianz und der Messrauschkovarianz, die alle auch für Partikelfilter notwendig sind. Es gibt Standard-Formen für Sigma-Punkt-Filter, so ist es relativ einfach, eine gute Referenz in einem Buch oder Zeitschrift zu finden. Wir konnten zwar einige Nachteile auflisten. Ungerade Probleme können dazu führen, dass ein Sigma-Punkt-Filter ldquofalling apartrdquo. Zum Beispiel, in unserem Ball Problem, wenn der Zeitschritt größer wäre, würden die Sigma-Punkte sehr ldquokonfusedrdquo über ein oder zwei Bounces, und kann dazu führen, dass Probe Kovarianz Matrizen, die keinen Sinn machen. Es kann schwierig sein, dies zu vermeiden, während Partikelfilter dieses Problem nicht haben würden. Während sie viel schneller als Partikelfilter sind, sind sie auch viel langsamer als ausgedehnte Kalman-Filter, die in einem Moment gut kommen. Interlude: Erwartung und Kovarianz würden in diesem Artikel sehr informell mit der Wahrscheinlichkeitstheorie sein, um sich auf die High-Level-Ideen zu konzentrieren. Hier geht es gut über ein paar Ideen, die in der Praxis nützlich sind und das Verständnis der Filter an erster Stelle. Bevor wir zum nächsten Filter weitergehen, können wir uns einen Moment Zeit nehmen, um eine Wahrscheinlichkeitstheorie zu überprüfen, die helfen wird. First is the expectation operator. If (a) is some random number, its expected value, (E(a)), is its mean, which we might call (bar) for brevity. So, if (a) represents rolls of a 6-sided die, then the expected value is 3.5, despite that we cant actually roll a 3.5. The second important idea is covariance. We looked at sample covariance above, where we used a bunch of points to calculate a covariance, but now well talk about the idea of covariance. The covariance of (a), lets say (P ), is: When (a) is a scalar, theres no ldquoco-rdquo in there its just called variance : If we call (a - bar) the error or residual. then the above tells us that the variance is simply the mean squared error of (a) about its mean. Further, the standard deviation is the square root of the variance: and so the standard deviation is also the square root of the mean squared error, sometimes called root-mean-square (RMS) error. If (b) represents rolls from a totally different die, and were rolling (a) and (b) together, then whats the covariance between (a) and (b), (P E( (a - bar) (b - bar )T )) Sometimes (a - 3.5) would be positive and sometimes negative, and likewise for (b - 3.5). Their product would be sometimes positive and sometimes negative, and averaging a bunch of these would come to 0, because the rolls are uncorrelated. That is, if (a) and (b) are uncorrelated, their covariance is 0. Nothing much is different when we upgrade from a random number to a random vector. Lets consider a two-element vector (c begin a b end T), where (a) and (b) are the same dice rolls as above. When the elements of (c) are correlated, some of those off-diagonal terms will be non-zero. For instance, lets reassign (b) so that (b 2 a 1). bar equiv E(b) E( 2 a 1 ) We can move the factor of 2 and the added 1 outside of the expectation: bar 2 E(a) 1 2 bar 1 Now for the variance part: b - bar 2 a 1 - 2 bar - 1 2 (a - bar) The variance of (b) is now: and the covariance between (a) and (b) is: Of course, (P P ), and so we would have: If we revisit the sample covariance calculation for a moment: Note that, when the mean is assumed known, we generally use (n) in the denominator when calculating the sample covariance, but when we average the samples to approximate the mean in order to subtract it to obtain the residuals, then we use (n-1) in the denominator, due to the fact that the average is probably a little biased. where (bar ) is the mean of (c), its clear that were simply averaging the residuals of the data points to approximate the true covariance. When (c) has a Gaussian (normal) distribution, we express this using the mean and covariance as: (c sim N(bar , P )). Note that, by definition, the diagonals must be greater than or equal to zero. Its not possible for the expected value of a squared random number to be negative (at least, for real random numbers, which is all we care about). If we were ever to see a negative value on a diagonal in a covariance matrix, we would know that something bad had happened in constructing that matrix. This becomes a real issue in filters, which well talk about in the implementation section. We now have plenty of probability theory to continue to the next filter. The Extended Kalman Filter At some point in the 60s, the United States sent some humans to the moon and returned them safely to the earth. The author didnt have the pleasure of being alive to witness it, but according to the literature on the subject, this was super hard . One of the difficult parts was knowing how to correct the trajectory on the way to the moon, and the program sought a self-contained way to determine the spacecrafts position relative to its nominal trajectory so that the crew could carry out course corrections. This meant combining prior beliefs about position and velocity with imperfect measurements to update the estimated position and velocity (as well as the uncertainty related to position and velocity) in real time, with the help of a digital computer. At the outset, however, no known techniques were fast or compact enough for a computer that could fit in the spacecraft. In order to create an accurate, fast, stable, and computer-friendly algorithm, the engineers and mathematicians in and around the Apollo program created the extended Kalman filter, which survives to this day as the go-to state estimator for a huge variety of problems. Extended Kalman filters (EKFs) can be extremely fast, but that speed comes with a price: two more assumptions on top of those made by the sigma-point filter, plus a little pencil-and-paper work. The first is that the propagation and measurement functions are always differentiable (they have a smooth slope at all times). Note that this isnt true for our bouncing ball example mdash whats the slope of the trajectory during the bounce It points down and then suddenly up again. So, an EKF wont work on the bouncing ball problem (We could use it between the bounces though.) The second assumption is that the uncertainty stays centered on the state estimate during propagation. Remember in the sigma-point filter, we propagated each point separately, and then calculated a sample covariance at the end. That sample covariance was not necessarily still centered on the middle sigma point EKFs, however, assume that it would be. This means that EKFs dont capture the nonlinearities of the propagation and measurement functions quite as well as sigma-point filters. Its part of the cost we pay for speed. The uncertainty is assumed to stay centered on the estimate during propagation. These assumptions are often acceptable even when not rigidly true, and this is one of the central themes in Kalman filtering: the assumptions are never rigidly true, but are often close enough to be useful. Instead of trying to stay with the bouncing ball example, lets pick a more interesting example for the discussion of extended Kalman filters. It may be that, some day soon, when we order a small, light thing online, a little aircraft will spin up at a nearby distribution warehouse minutes later and fly it to our house, dropping it on a tiny parachute aimed approximately at our doorstep. Now when we wake up to find were out of coffee filters, we can have them before we finish the morning jog. (The inclusion of the parachute is just to make sure nobody takes this example too seriously, and, really, why wouldnt we take the occassion to go to the neighborhood espresso shop) So, our task will be to create a filter to watch the package go from the aircrafts location to the target drop location. For measurements, well again use position so that the plots will be easy to read. Sample trajectory of dropped package. Before we begin, lets review some of the relevant symbols weve seen so far: Propagation and Prediction Corrected estimate and covariance for this sample Lets also take a quick look at the equations for one iteration of the extended Kalman filter, just to see what were getting into (theres no need to understand them just yet): This is often presented as either a recipe or as part of a rigid proof, and neither is very helpful for building intuition. Lets take it apart and see what we can do with it. Like all of the filters were discussing, it starts with propagation. Propagation Extended Kalman filters, like sigma-point filters, represent uncertainty with a covariance matrix, but EKFs dont rely on sigma points in order to propagate that uncertainty. In fact, the propagation function is only used once: to propagate the last estimate to the time of the current measurement. (The little plus sign in (hat ) means that it was the corrected estimate at (k-1), continuing the theme that (-) is used for predicted values and () for corrected values. So, the previous corrected state estimate is used to predict the current state.) Also, we assume that the truth, (x ), updates using the same function, plus some random process noise, (q sim N(0, Q)) (ldquoa random draw from a normal distribution with zero mean and covariance (Q)rdquo), that represents random fluctations in the air that push the falling package around: Without sigma points, how do we propagate the covariance, (P ), to sample (k) Since (f) is differentiable, we can calculate its Jacobian mdash its ldquosloperdquo, in a matrix sense mdash and use that to propagate the covariance matrix directly. Lets see how. Just like the slope of a one-dimensional function of (x) is the derivative of the function evaluated at some value of (x), the Jacobian matrix of the propagation function is the partial derivative of each element of the propagation function with respect to (wrt) each element of the state, evaluated at some value for the state. If (F) is the Jacobian matrix, and we wish to evaluate it at (x0), then for each element (i, j) of (F): We usually write this more compactly for the whole matrix as simply: Recalling that (Q) is the process noise covariance matrix, the covariance can be propagated linearly from (k-1) to (k) as: where weve dropped the arguments to (F) for simplicity. Its not immediately clear why this ldquopropagatesrdquo the covariance, but its actually pretty intuitive, once we recall what the Jacobian means and the definition of covariance. Lets start with the Jacobian. If we know (f(x0)), then we can approximate (f(x0 Delta x)) for small (Delta x) using a Taylor series expansion: f(x0 Delta x) approx f(x0) left. frac f rightrvert Delta x ldots where the ellipsis stands for higher order terms, which can be ignored for small (Delta x). Of course, (left. frac f rightrvert ) is the Jacobian of (f), evaluated at (x0). Lets suppose that the true state is some small, hypothetical perturbation from our estimated state at (k-1): And, if we ignore process noise for just a moment, then the true state at (k) is: Lets move (f(hat )) to the left side: begin xk - f(hat ) approx F Delta x xk - hat - k approx F Delta x Delta xk approx F Delta x end Thats pretty plain. The Jacobian maps a perturbation at (k-1) to a perturbation at (k), to a first-order approximation. In fact, thats the meaning of the Jacobian. And since (Delta xk) is now approximated linearly, this process is called linearization . Heres where the definition of covariance comes in: theyre all about perturbations from a mean. Our perturbation above was just hypothetical, so if we think of it as a (zero-mean, Gaussian) random error in our state estimate, then the covariance of that error is just: P Eleft( Delta x Delta x T right) P-k Eleft( Delta xk Delta xkT right) Lets substitute the fact that we now know that (Delta xk F Delta x ): P-k Eleft( F Delta x Delta x T FT right) We can move (F) outside of the expectation: P-k F Eleft( Delta x Delta x T right) FT and now we recognize (P ) sitting in the middle there: That is, the Jacobian just maps the (Delta x ) part on the left and the (Delta x T) part on the right to the future values. Easy. For the last little touch, recall that we ignored the process noise. When the true state updates, the random process noise for that sample is added on: This is easy to account for, because we assumed that the process noise was uncorrelated with the state. The covariance of the sum of two uncorrelated random vectors is just the sum of the individual covariance matrices. So, we add (Q) on to the end, and now we have the form we were looking for: where the first part is the propagation due just to the dynamics around the mean (which may expand or contract), and the second part is due to the process noise (which always expands the covariance). Putting it a different way: if a particle were located (Delta x) away from the estimate, then it would propagate, to a first order approximation, as the estimate does, plus that little extra bit, (F Delta x), and plus the process noise. The particles on all sides of the estimate would generally move outward, representing the growing uncertainty as time passes. We do all of this by simply calculating (F) and then using the equation above. Very compact. Here are the results of our propagation of the state and covariance matrix: Propagation, Redux This article isnt about proofs its about intuition. If the propagation of the covariance matrix seems intuitive enough, then you might skip down to the next section and continue. However, if youd like to run through the covariance propagation again, and build some intuition for the expectation stuff from above, then keep reading. Instead of ignoring the process noise and tacking it on right at the end, lets consider it from the beginning. The propagation of the true state is actually this: Substituting in the perturbation we defined above: begin xk approx f(hat ) F Delta x q approx hat - k F Delta x q end Moving the predicted state to the left: begin xk - hat - k approx F Delta x q Delta xk approx F Delta x q end Using this to construct the covariance matrix, like before, we get: begin P-k E left( Delta xk Delta xkT right) approx E left( (F Delta x q ) (F Delta x q )T right) approx E left( F Delta x Delta x T FT F Delta x q T q Delta x T FT q q T right) end The expectation of the sum of different things is the sum of the expectation of each of those things: begin P-k approx E( F Delta x Delta x T FT ) E( F Delta x q T ) E( q Delta x T FT ) E( q q T ) end Recall that one of the assumptions of an extended Kalman filter is that the process noise at sample (k-1) is uncorrelated with the state at (k-1) (the state error doesnt affect the noise that gets generated). Thats helpful, because the expected value of the product of two uncorrelated variables (their covariance) is 0 (remember the dice rolls above). So, the middle two terms in the above equation drop out. That leaves only: P-k approx E(F Delta x Delta x T FT) E(q q T) (F) moves outside of the expectation operator: P-k approx F E( Delta x Delta x T ) FT E(q q T) And we already have both of these quantities The first is the covariance before the propagation, (P ), and the second is the covariance of the process noise, (Q). Were back at the above form for the prediction of the covariance: P-k approx F P FT Q While weve used the expectation operator here to make the meaning of this equation really clear, in practice, one most often uses the expectation operator when constructing the process noise covariance matrix, so its a good thing to be comfortable with. Correcting the Estimate Now its time to think about using the new measurement for correction. In fact, we can do this with pieces weve seen so far. First, the Kalman gain and correction will be exactly the same as for the sigma-point filter. K P P hat k hat - k K left( zk - hat k right) We just need to calculate the state-innovation covariance, (P ), and the innovation covariance, (P ). Lets start with the latter. We saw in the beginning of this section, (eqref ), that the innovation covariance is given by: P H P-k HT R Notice how it has the same form as (F P FT Q) Thats because wed derive it in exactly the same way, using the Jacobian of the observation function, (H), and the measurement noise covariance matrix, (R). The following is exactly the same as the derivation in the propgation section, with some of the letters swapped: begin zk h(xk) rk zk h(hat - k Delta xk) rk zk approx h(hat - k) H Delta xk rk zk approx hat k H Delta xk rk zk - hat k approx H Delta xk rk Delta zk approx H Delta xk rk end Notice that (Delta zk) is the innovation vector, (y), but using the (Delta) is a little clearer here. Its covariance tells us how much variability we expect in the difference between what we measure and what we predict as the measurement, so it represents both the error associated with our prediction and the error of the measurement itself. We form the innovation covariance in exactly the same way we formed the propagated covariance (again just swapping some letters and noting that the measurement noise and estimate errors are uncorrelated): begin P E left( Delta zk Delta zkT right) E left( H Delta xk Delta xkT HT right) E left( rk rkT right) H E left( Delta xk Delta xkT right) HT R H P-k HT R end So, just like (F) propagated a perturbation of the state from one time to another, (H) maps a perturbation of the state to a perturbation in the measurement. Then (R) joins in as extra measurement noise. Forming the state-innovation covariance is even easier we just plug things in and continue with the same themes: begin P E left( Delta xk Delta zkT right) E left( Delta xk left( Delta xkT HT rTright) right) E left( Delta xk Delta xkT right) HT E left( Delta xk rT right) E left( Delta xk Delta xkT right) HT 0 P-k HT end So, (P ) just represents a perturbation in the estimate ldquoon the leftrdquo with a perturbation in the predicted measurements ldquoon the rightrdquo. Since the measurement noise and predicted measurement are uncorrelated (its the term thats cancelled in the fourth line, above), the measurement noise covariance, (R), doesnt show up in (P ) at all. Recall how we constructed (P ) for the sigma point filter: we calculated the sample covariance of the sigma points, using the difference in each sigma point from the mean in state space on the left, and the difference in the predicted measurement from the mean on the right. Thats exactly what were doing here, but in matrix fashion, to a first-order approximation. All of this first-order approximation stuff should make it clear why an extended Kalman filter is a linear filter, even when its applied to a nonlinear problem. State-innovation covariance and innovation covariance. With the state-innovation covariance matrix and innovation covariance matrix in place, we can calculate the Kalman gain and update the state estimate, as before. Correcting the Covariance Theres only one thing left: how do we update the covariance matrix to account for this correction We stated at the very beginning that the correction is: Pk P-k - K H P-k But why Thats not even symmetric What is going on here Lets think back to sigma-point filters again. There, we said we could update each sigma point individually each would therefore converge towards the measurement to some degree, and that convergence towards a single point represented the shrinking of the covariance matrix. Well, a sigma point is like a little (Delta x) from the mean, so lets make the updated covariance matrix with some corrected little perturbations. Weve already used (Delta xk) as the perturbation of the truth from the predicted state, (hat - k), so lets use (Delta xk) as the perturbation of the truth from the corrected estimate, (hat k): xk hat k Delta xk And well restate what the corrected estimate is: hat k hat - k K (zk - hat k) hat - k K Delta zk Lets plug them in. begin Delta xk xk - hat k Delta xk xk - left( hat - k K Delta zk right) Delta xk xk - hat - k - K Delta zk Delta xk Delta xk - K Delta zk end No surprise here: the corrected perturbation is slightly smaller than the original perturbation by the amount of the correction. So whats the covariance of this thing As is now the usual procedure, well just start from the definition of the covariance, plus things in, move the expectation operators around a bit, and cancel anything we can. begin Pk E left( Delta xk T right) E left( left( Delta xk - K Delta zk right) left( Delta xk - K Delta zk right)T right) end Skipping the multiplication and moving the expectation operator around, which weve done many times now: begin Pk E left( Delta xk Delta xkT right) - E left( Delta xk Delta zkT right) KT - K E left( Delta zk Delta xkT right) K E left( Delta zk Delta zkT right) KT end Recalling that (P E left( Delta x Delta zkT right) ) and (P E left( Delta zk Delta zkTright) ), we can substitute: Pk P-k - P KT - K P T K P KT Thats a little better. Its symmetric, like wed expect (no pun intended) for a covariance operation. Also, we havent made any assumptions on (K). This is actually general for any (K). But we care about the Kalman gain, so lets substitute in the Kalman gain in just one location near the end: Pk P-k - K P T - P KT left( P P right) P KT Since (P P ) is an identity matrix, we can drop it: Pk P-k - K P T - P KT P KT The two right terms cancel out: And now we just substitute (P P HT): begin Pk P-k - K left( P-k HT right)T P-k - K H P-k end And there it is Theres no magic here its just the same old process: express things in terms of perturbations, set up the covariance definition, move things around, and cancel stuff. And now that we know the (K) is constructed so that this actually is symmetric and makes sense, we can see the simple meaning of this equation: the Kalman gain tells us how much of our current covariance we can subtract off thanks to the most recent measurement. Large Kalman gains correspond to low measurement noise (measurement noise is part of (P ), which is the ldquodenominatorrdquo), and so when measurement noise is low, we can subtract off a lot of our current uncertainty. When measurement noise is high, the gain will be small, so we wont subtract off very much. Correction, Redux That was a lot of material, but each step was actually pretty small: just some matrix multiplication, a few assumptions, and the expectation operator. Thats really all it takes to work with these (it takes a little more to do proofs about why the Kalman gain is particularly good). Lets wrap up this discussion of the extended Kalman filters correction process with another animation, using some example values. Well put the state stuff in the left plot and the measurement stuff in the right plot. We start with the state estimate (0, 0) and the covariance, shown with a bunch of particles. We map the state estimate to the predicted measurement. We map the covariance in the state (all those particles) to observation space too. (This is like (H P-k HT).) We then add on the measurement noise, (R). This gives us (P H P-k HT R). We see this as an increase in the distribution of the particles in observation space. The actual measurement comes in. (We show how well each particle predicted the measurement.) (We color the corresponding particles in state space too.) The Kalman gain is calculated, and we plot the corrected state. Not surprisingly, it sits pretty well within the most likely particles. The covariance is corrected, seen here as a correction in each particle. They clearly move closer together around the corrected estimate. (We use those corrected particles to predict the observation again, just for fun. Look how they move right over towards the measurement, but not quite all the way to it.) Corrected state and covarianceThat completes the extended Kalman filter Every step of the process is actually fairly intuitive, once we have a good grasp of: first-order approximations of nonlinear functions, the definition of covariance, and the meaning of ldquouncorrelatedrdquo random variables. Finally, heres the corrected estimate and covariance for our falling coffee filters: By repeating the overall process every time we get a new measurement, we can often converge on good estimates very quickly, with just one call to (f) and (h) per measurement and a little matrix math. Here are the results for our coffee filter delivery: Extended Kalman filters are easy to code in a language like MATLAB or Julia. The EKF used in this example is available here. or download the sample files here . Outline of an Extended Kalman Filter Calculate the Jacobian of the propagation function and the process noise covariance matrix. Propagate the state. Propagate the estimate covariance. Predict the measurement. Calculate the Jacobian of the observation function and the measurement noise covariance matrix. Calculate the Kalman gain. Correct the estimate and its covariance matrix. Steps 4 through 7 correspond to the animation above. Assumptions, Advantages, and Disadvantages The extended Kalman filter makes more assumptions about the problem than the sigma-point filter, and so is slightly less general. Those assumptions are: The functions are smooth. The covariance remains centered on the propagated state. The linear approximations are sufficiently accurate for the changes to the covariance matrix over time. The process noise, measurement noise, and estimate errors are Gaussian and uncorrelated. Estimation with Applications to Tracking and Navigation by Bar-Shalom, Li, and Kirubarajan is probably the single best book on extended Kalman filtering, whether one is interested in tracking or not, and it includes advanced implementation options for speed and stability. However, its a theory-heavy book and can go very slowly until one understands some of the subtlety of probability theory. Where their assumptions approximately apply, extended Kalman filters are a great option. Indeed, they are the workhorse of state estimation in many industries and in many forms. The advantages are: They apply well to many smooth problems. Theyre fast. Theyre very well studied and have many great options for detailed implementations. The primary disadvantages of EKFs are: Creating analytical Jacobians is not always feasible. In these cases, a sigma-point filter should probably be used instead. The Jacobians are constructed from estimates . If the estimates are too far from the truth, the Jacobians will be wrong, and the corrections therefore might not ever converge on the truth (they may even be worse than the observations themselves). This is called divergence. Well see some strategies for dealing divergence in part 2. Before we go into these options and implementation details, we have one more filter architecture to cover: the Kalman filter. The Kalman Filter We finally arrive at Kalmans original algorithm for state estimation of linear systems. For linear systems, the propagation and observation functions are expected to look something like this: xk F x Fu u q zk H xk Hu uk rk where (F), (Fu), (H), and (Hu) are the system matrices and (u) is some input vector. which can contain anything that linearly affects the propagation (control inputs, gravity, biases). Its assumed to be known. Of course, (F) and (H) mean the same thing as before. Were talking specifically about the discrete Kalman filter. Theres such a thing as a continuous Kalman filter, useful when measurements are continuous (e. g. not samples of the voltage, but the voltage itself). Stunningly, it doesnt require a digital computer and can be constructed with resistors and capacitors in a big DC circuit. Each dimension of the state estimate would be the voltage in a separate path As this is laborious, the continuous Kalman filter is now a thing of the past, albeit an impressive thing that serves to remind us that we stand on the shoulders of giants. Of course, nobodys problem is actually a linear system (theyre like perfect vaccuums or point masses mdash pleasant idealizations). Further, the linear Kalman filter is just a special case of the extended Kalman filter, so why would we bother learning about it Because linear filters are very often useful on nonlinear problems . In fact, well recast our falling coffee filters filter above as a linear filter with virtually no loss in performance. The key to linear filtering is to use error states mdash states that represent small deviations from some nominal state. For instance, our package has a parachute and quickly reaches its terminal velocity, where the forces due to drag and gravity cancel. Lets call this our nominal velocity, and we can arbitrarily pick the target landing site (0, 0) as the nominal position. So, our nominal state is (xn begin 0 0 0 - vt end T), where (vt) is the terminal velocity (by the end, the velocity will nominally be downward). Our error state is just the truth minus this nominal state: Delta x x - xn Lets linearize the dynamics of this deviation near the nominal state. begin Delta xk xk - xn f(x ) - xn f(xn Delta x ) - xn approx f(xn) F Delta x - xn end Note that both (xn) and (f(xn)) are constants, so lets set (Delta xn f(xn) - xn). The resulting model is clearly linear, following the form above, where (Delta xn) is the input vector ((u ) in the above), and the input map ((Fu) above) is the identity matrix. Delta xk F Delta x Delta xn Of course, the observation function needs to be linear too, but this is trivial for our simple problem: zk begin 1 0 0 0 0 1 0 0 end Delta xk (If it had been a more difficult function, we would have gone through the same type of linearization that we did for the propagation portion.) Otherwise, the only remaining parts are the process and measurement noise covariance matrices, and theyre exactly the same whether we deal with full states or deviations. Were ready to filter just like we did before. Here are the results for the package delivery: Estimated trajectory with linear Kalman filter. Theres no noticeable difference from the extended filter. Lets look at the state estimates individually, and at the difference between the extended and linear Kalman filter estimates. Comparison of results of EKF and KF for the full simulation. Differences between the results of the EKF and KF for the full simulation. Theres a small difference, not surprisingly at the beginning, when the package isnt yet at terminal velocity, but its negligible compared to the overall accuracy of the filters. This is pretty common. There are many nonlinear problems that can be estimated quite well using a fully linear filter. This enables the filter to run extra quickly, as theres no need to re-calculate the Jacobians over time or run detailed propagation and observation functions. The key to building a linear filter is to find a good nominal point or nominal trajectory along which the Jacobians are constant. This cant be done for all problems, but its a great technique when it can be done, and its often needlessly overlooked. Steady-State Covariance Theres an interesting thing to note for Kalman filter: since (F), (H), (Q), and (R) are constant, the state does not affect the covariance . Lets take a look at the code that would update the covariance in a linear Kalman filter: Nothing here requires the state The progression from the initial covariance to a steady-state value can be entirely predicted ahead of time, before actually running the filter. And once the covariance matrix reaches a steady state, theres no point in continuing to update it. After that point, the Kalman gain is constant. As an extreme case, if it would be reasonable to initialize a filter with the steady-state covariance, then one could instead calculate the Kalman gain associated with the steady-state covariance ahead of time and implement a filter that never needs the covariance at all, such as: This steady-state form is actually called a Wiener filter. after Dr. Norbert Wiener at MIT, whose work predated Kalmans by about a decade. Without the need to calculate the Kalman gain in the loop, or to store any of the covariance matrices, this is a very lightweight filter that nonetheless has the advantages of a Kalman filter. Again, it only applies when the initial uncertainty is the steady-state value and the system matrices are constant, but in such a case, it cant be beat. Outline of a Linear (Discrete) Kalman Filter Basic linear Kalman filters are trivial to program. Click here for the filter used in this example or download the sample files here . Propagate the state. Propagate the covariance. Predict the measurement. Calculate the Kalman gain. Correct the state and covariance. Weve looked at four filter architectures and discussed how they all do similar things with different assumptions, which enable different operations, which enable differences in accuracy and speed. Particle filters are very general and are a common choice when the probability density is multimodal. They work well enough when runtime isnt a concern. Sigma-point filters use a small set of ldquoparticlesrdquo placed on an ellipsoid around the state estimate. They therefore assume that the probability density is unimodal. They also assume that the process and measurement noise are uncorrelated with each other and with the state. Theyre substantially faster than particle filters, and they handle nonlinearities better than extended Kalman filters. Extended Kalman filters assume that the propagation and observation functions are smooth and that the covariance propagates linearly and stays centered on the propagated estimate, in addition to all of the assumptions made by sigma-point filters. Theyre fast and have some options (in the next part) for being very fast. They also have a long history of working well even on problems that violate their assumptions to startling degrees, so EKFs are a great option to try for a wealth of state estimation problems. Linear Kalman filters are the same as extended Kalman filters, but (usually) propagate error states with approximately linear dynamics. Theyre a little faster, and the simplified code works well for embedded systems. There are many different types of state estimators, and many variations on each, but these four represent the basics of how estimates and uncertainty are propagated and updated sequentially as new measurements become available. But were not done. When the extended Kalman filter was created for the Apollo program, it was coded up as part of a simulation of the spacecraft, and after one small bug fix, it worked well. The engineers on Apollo could have stopped here most people declare success as soon as they see decent results in simulation. The Apollo folks, however, went forward and found that there were several more things that were necessary before the filter was practical and reliable. In fact, they discovered, the ldquodefaultrdquo Kalman filter algorithm above is poorly suited to implementation in computers Fortunately, a few tweaks enable it to: run very, very quickly, maintain stability despite the potential for build-up of roundoff errors, and estimate more accurately. In the next part. well see how these are relatively easy modifications once one has an understanding of how the filters actually work. References kf is our tool for exploring and designing detailed state estimation algorithms with a focus on stability and speed. It also has two quite long, worked examples of applying filters to specific problems, here and here . The sample code includes a particle filter, sigma-point filter, extended Kalman filter, and linear Kalman filter, as well as some utilities and the files used to generate the plots for this article. Its available here . Probabilistic Robotics by Thrun, Burgard, and Fox contains entry-level material for particle filters and sigma-point filters and discusses their use in robot location-finding (a multimodal problem where particle filters have proven useful, even in embedded applications). Kalman Filtering and Neural Networks . edited by Haykin, provides great information about the unscented Kalman filter (sigma-point filter) and is frequently cited in the literature. It includes numerous practical forms, with accessible discussion and very good pseudocode. Estimation with Applications to Tracking and Navigation by Bar-Shalom, Li, and Kirubarajan is probably the single best book on extended Kalman filtering, whether one is interested in tracking or not, and it includes advanced implementation options for speed and stability. However, its a theory-heavy book and can go very slowly until one understands some of the subtlety of probability theory. Greg Welch and Gary Bishop maintain this page for information on Kalman filtering and many related things. Its a good resource. The various IEEE journals and the AIAA Journal of Guidance, Control, and Dynamics provide numerous excellent papers on practical filters with pseudocode, simulations, and discussions of results from real-world testing. Of course, these are generally industry-specific. No book even comes close to the depth available from the journals. Fragments of the story of the development of the Kalman filter for the Apollo program are scattered all over. However, NASA maintains a brief and enjoyable write-up by Leonard A. McGee and Stanley F. Schmidt called ldquoDiscovery of the Kalman Filter as a Practical Tool for Aerospace and Industryrdquo, located here. Another much more modern write-up is ldquoApplications of Kalman Filtering in Aerospace 1960 to the Presentrdquo by Grewal (who runs a class on Kalman filtering for GPS and IMUs) and Andrews. April 26th, 2016 copy2016 An Uncommon LabPosted on: January 22, 2010 by starlino This article introduces an implementation of a simplified filtering algorithm that was inspired by Kalman filter. Der Arduino-Code wird mit einem 5DOF IMU-Gerät von GadgetGangster 8211 AccGyro getestet. Die Theorie hinter diesem Algorithmus wurde zuerst in meinem Imu Guide Artikel eingeführt. Der AccGyro wird auf einem regelmäßigen Proto-Schild auf einem Arduino Duemilanove Board montiert. Teile, die benötigt werden, um das Projekt abzuschließen: 8211 Arduino Duemilanove (oder ähnliche Arduino-Plattform) 8211 AccGyro IMU-Platine 8211 Protoshield (optional) 8211 Breadboard 8211 Anschlussdraht 22AWG Das Hook-up-Diagramm ist wie folgt: AccGyro lt8212gt Arduino 5V lt8212gt 5V GND lt8212gt GND AX lt8212gt AN0 AY lt8212gt AN1 AZ lt8212gt AN2 GX4 lt8212gt AN3 GY4 lt8212gt AN4 Sobald Sie den Hardware-Teil abgeschlossen haben, laden Sie die folgende Skizze zu Ihrem Arduino. Führen Sie das Projekt aus und stellen Sie sicher, dass Sie eine Ausgabe auf Ihrem seriellen Terminal empfangen (Sie können das Terminal von Ihrer Arduino IDE starten). Um die Daten zu analysieren, habe ich ein kleines Dienstprogramm namens SerialChart entwickelt. Es ist Open-Source so fühlen sich frei, es für Ihre eigenen Bedürfnisse anzupassen. Hier ist die Ausgabe von SerialChart Software: Der Test wurde wie folgt durchgeführt: 8211 Zuerst habe ich das Brett langsam gekippt (markierte quotsmooth Tiltingquot auf dem Screenshot) 8211 Als nächstes fuhr ich fort, das Board zu kippen, aber ich habe auch angefangen, einige Vibrationen anzubringen 8211 durch Tippen auf die Bord schnell mit dem Finger (markiert mit dem Vibrationsgeräusch). Wie Sie aus dem Diagramm sehen können, ist das gefilterte Signal (rote Linie) in der Tat eher immun gegen Lärm als die Beschleunigungsmesser-Messwerte allein (blaue Linie). Das gefilterte Signal wurde durch Kombinieren der Beschleunigungsmesser - und Gyroskop-Daten erhalten. Gyroskop-Daten sind wichtig, denn wenn man einfach die Accelerometer-Daten durchschnittlich hätte, würde man ein verzögertes Signal bekommen. Angesichts der Einfachheit des Codes und des Algorithmus bin ich mit den Ergebnissen zufrieden. Ein Merkmal, das ich hinzufügen möchte, ist die Kompensation für den Drift-Effekt, den man bei einigen Gyroskopen antreffen könnte. Allerdings erwies sich das AccGyro-Board in dieser Hinsicht als sehr stabil, da es eingebaute Hochpassfilter hat. Wenn Sie selbst gerne experimentieren möchten, empfiehlt es sich, diese Testaufstellung zuerst zu reproduzieren. Dann verschieben Sie langsam auf Ihre Anwendung braucht. Zum Beispiel können Sie den C-Code nehmen und ihn an PIC39s C18C30 oder AVR-GCC anschließen (es sollte nicht zu dificult sein). Im Folgenden finden Sie einige nützliche Ressourcen und deren Beschreibungen. SerialChart-ausführbare Dateien können hier heruntergeladen werden: Sobald Sie die SerialChart-Anwendung starten, müssen Sie die imuarduino. scc-Konfigurationsdatei für dieses Projekt (im imuarduino. zip) Archiv laden. In dieser Konfigurationsdatei müssen Sie die 39port39-Einstellungen auf den Arduino39s-COM-Port aktualisieren. Auf meinem Computer wurde Arduino auf COM3 entdeckt, bei dir könnte es anders sein. Weitere Informationen zur Konfigurationsdatei-Syntax finden Sie unter: Sie können SerialChart auch von Google Code herunterladen und kompilieren: Sie benötigen einen SVN-Client, um den Code auszuprobieren (ich benutze RapidSVN für Windows). SerialChart wurde unter Verwendung von Qt SDK von Nokia entwickelt: qt. nokiadownloads Viele Leute fragen mich was über die andere 2-Achse, hier ist der Code, der 3 Achsen ausgibt, einschließlich des SerialChart-Konfigurationsskripts. Ich habe auch einige Overhead-Code, dass Alex in den Kommentaren darauf hingewiesen, dies reduziert das Intervall zwischen den Samples. Im folgenden Beispiel drehe ich die Tafel um die X-Achse (blau), die parallel zum Boden ist. Ich mache es von Hand, also ist X nicht genau 0, sondern nah. Die Achsen, die sich ändern, sind Y (rot) und Z (grün). Bitte beachten Sie die Beziehung X2Y2Z2 1. Die gestrichenen Cyan-, Magenta - und Kalklinien sind ungefilterte Signale aus dem Beschleunigungsmesser allein (RwAcc). 162 KOMMENTARE Kommentar hinzufügen RSS 63. Emilio 30. Oktober 2011 hola, ante todo gracias por su pagina y dedicacin. Mi consulta es la siguiente En mi proyecto necesito colocar por razones de espacio la placa de un 5DOF IMU en posicin vertikal, keine horizontale es posible cambiar la orientacin de los ejes por Software para situarla en esa posicin. Gebrauchsmuster. Gracias por su atencin, y un sincero y cordial saludo 64. Luca November 18, 2011 Hallo, I8217m arbeiten an 6DOF IMU Sensoren und fand diese Anwendung (SerialChart) sehr nützlich. Dieser Beitrag soll nur ein Thema über SerialChart abgeben. Mit mehreren USB-Transceiver (d. h. FTDI-Chip), die verschiedene Entwicklungsplatinen verbinden, kann die virtuelle COM-Nummernvergabe schnell wachsen. In meinem Fall mit COM5 kann ich den seriellen Port anschließen, aber usign COM19 I can8217t: SerialChart gibt einen Meldungsfeldfehler zurück 8220Der Port COM198221 konnte nicht geöffnet werden. Könnte ein Fehler im COM-Port-Konfigurations-Parser sein, der nur für COM-Portnamen von COM1 bis COM9 sehe. Ich bekomme die gleichen Meldungen mit allen COM-Port mit zwei Ziffern. 8230 Teil 3 meiner IMU Guide und ein praktisches Arduino Experiment mit Code wurde in der Verwendung eines 5DOF IMU Artikel präsentiert und wurde Spitznamen Simplified Kalman Filter, bietet eine einfache Alternative zu den 8230 66. Xris 24. Dezember 2011 Hallo Starlino Ich versuche zu Implementiere dich serielles Diagramm in einer Anwendung, um die Daten eines Beschleunigungsmessers mit einem PIC24FJ64GB002 zu beobachten, aber mein Problem ist, dass ich ANSI C für pic24f verwende, das doesn8217t die Funktion Serial. print () hat. So gibt es irgendeine Bibliothek oder eine Methode, um das zu tun Stattdessen habe ich diesen Code verwendet, aber auf dem seriellen Diagramm bekomme ich zufällige Symbole. Hdlcsendfloat (Intervall) (8280,8221) hdlcsendfloat (Xaxis) uartsendchar (8220,8221) hdlcsendfloat (Yaxis) uartsendchar (8220,8221) 8230. Die Theorie hinter diesem Algorithmus wurde zuerst in meinem Imu Guide Artikel eingeführt. rdquo PyroFactor: Read Permalink Email This 8230 68. gunbrown 15. Januar 2012 Ich versuche zu messen Roll und Tonhöhe des bewegten Objekts (Art eines Zylinders). Ich bin ein bisschen verwirrt, ist, dass dein Algorithmus den Roll-Pitch-Grad des bewegten Objekts messen kann. Barry Beasley 23. Januar 2012 Wäre es möglich, Daten von zwei separaten seriellen Ports zu akzeptieren und die empfangenen Daten auf einem Diagramm zu zeichnen. Auch könnten wir haben Ein Merkmal, um eine Skala (s) für X amp Y Achse 70 hinzuzufügen. Starlino 23. Januar 2012 Barry: Mehrere Datenquellen wäre ein interessantes Feature. Kann die erweiterte Wunschliste hinzufügen. Für Skala können Sie Pitch-Parameter verwenden, siehe: code. googlepserialchartwikiAdvancedFeatures Zunächst einmal vielen Dank für eine wunderbare Einführung auf dem IC. Ich sehne mich nach einem solchen IC. Ich arbeite an einem umgekehrten Pendel. Ich würde gerne wissen, ob ich die Ausgabe aus dem Gyro direkt nutzen könnte, um mein Kippen in umgekehrtem Pendel zu vergleichen. 8230 UDB4 iin MicroChip8217in C30 derleyiciyle hazrlanm ak Kaynak Kodlar da mevcut olmakla birlikte ben yazlm CCS C derleyicisiyle sfrdan yazmaya karar verdim. Sensrlerin analog kl olmas ilerimi epey kolaylatsa da IMU mantn zmek 1-2 gnm ald Starlino8217nun Arduino iin yazd kalman 8211 IMU kodlarn CCS8217e evirdim. Yaznn orjinaline ulamak iin tklayn 8230 73. hacna April 12, 2012 Hi..I8217m ein Student arbeitet an einem Unterwasser Fernbedienung Fahrzeug, wo I8217m mit 5 DOF IMU, um die Position des Fahrzeugs zu bekommen. Um mit IMU Im zu verbinden mit Arduino Uno micro controller. my Problem hier, wie ich die Position des Fahrzeugs von der Beschleunigung bekommen kann, da die Arduino nur gvs Ausgabe der Beschleunigung. Wie können wir uns mit dem Arduino-Ausgang verbinden, um die Beschleunigung zu erhalten. 74. Robert 14. April 2012 Ich kaufte vor kurzem eine IMU (die im Laden mit dem Gier-Gyro-Board aufgelötet), ohne vollständig zu verstehen, wie IMUs funktionieren. Was ich wirklich brauchte, war für das Messen des Gieres für ein autonomes Unterwasserfahrzeug I8217m zu arbeiten. Ich weiß jetzt, dass, um eine genaue Lesung zu erhalten, die Sie auch ein Magnetometer benötigen und das zusammen mit einem Kalman-Filter verwenden, um die Drift loszuwerden. Allerdings denke ich nicht, dass ich eine genaue Lesung für mehr als 5-10 Sekunden (es wäre nur für die relative Positionierung beim Drehen verwendet werden). Ich habe versucht, nur auf den Gier-Gyro zuzugreifen und das nur zu benutzen, aber ich bekomme sehr schlechte Ergebnisse. Ich verstehe, dass Gyros arent die genaueste Sensor, aber meine scheint nur gut für die Erkennung der Bewegung und gibt nicht eine genaue Darstellung auf Größe oder Richtung der Winkelgeschwindigkeit. Zum Beispiel könnte ich mein Programm starten, drehe das Brett um 90 Grad und drehe es dann zurück und habe den Winkelabfall bei beiden Rotationen. Außerdem scheint sich mein Gyro niemals auf die ursprüngliche Null zurückzusetzen. Nach dem Drehen und Stoppen scheint es, dass die Nullspannung sich verändert hat und damit der Gyro anfängt, wirklich schlecht zu treiben. I8217ve versucht, die Nullspannung so genau wie möglich zu stimmen, aber das ist nicht wirklich wichtig, wenn es sich immer verändert. I8217ve spielte auch mit den Parametern für die if-Anweisung, aber das hilft nur geringfügig .. Also meine Frage ist, sind Gyros wirklich so ungenau Oder sollte ich etwas zumindest etwas nutzbar sein Bitte schau mal meinen Code an und sehe, ob du irgendwelche sehen kannst Probleme. Vielen Dank schweben yawRate Lesung aus dem Gyro Float yawZero 1.255 Null Rate Spannung Schwimmer currentAngle 0 void Setup () Serial. begin (9600) void Schleife () Holen Sie sich die Lesung aus dem Gier Gyroskop yawRate analogRead (A3) konvertieren in degreessecond yawRate 1023 yawRate 5 YawRate - yawZero Serial. println (yawRate) yawRate .002 if-Anweisung zur Minimierung der Drift, wenn (yawRategt5yawRatelt-5) mit 100 Hz yawRate 100 fügt die Winkel currentAngle yawRate stellen sicher, dass der Winkel zwischen 0-360 Grad bleibt, wenn (currentAngle 359 ) CurrentAngle - 360 Serial. println (currentAngle) Verzögerung (10) 75. starlino April 14, 2012 Ok. Paar Zeiger: 8211 Sie müssen yawZero experimentell bestimmen, don8217t nur verwenden Sie den Datenblatt Wert, können Sie schreiben einige Code, um es beim Start zu messen (dies ist, wenn das Gerät nicht bewegt), oder Hardcode es aber stellen Sie sicher, dass es regelmäßig zu aktualisieren. 8211 Ich glaube, deine Loops laufen bei 100Hz, weil println einige Zeit in Anspruch nehmen, um zu verzögern (10) verwenden millis () arduiono Funktion, um Zeit für jede Schleife zu messen 76. Robert 14. April 2012 Vielen Dank für die Antwort. Ich fand die Nullspannung experimentell (mit einem Voltmeter und mit println). Ich habe meinen Code um mit Millis geschaltet, aber I8217m immer noch das gleiche Problem wie zuvor. Der Gyro scheint nicht genau auf die gleiche Nullspannung zurückzukehren, nachdem er sich bewegt hat. Ich denke nicht, dass dies etwas ist, das man dynamisch anpassen kann, also könnte es ein Hardware-Problem sein und nicht Software 77. starlino 15. April 2012 Robert: Kannst du bitte deinen Code nochmals posten. Wenn Sie sagen, 8220gyro doesn8217t wieder genau auf die gleiche Nullspannung8221 bedeuten Sie das direkte Lesen von GZ4-Port oder die kumulative Summe der Winkel. Den Sensor neu positionieren und einen anderen Kanal wie GX4 oder GY4 ausprobieren. Du hast auch die nicht verstärkten. Nicht gefilterte Kanäle GX, GY, die du ausprobieren kannst. Kein Gyro ist perfekt. Dass sie oft mit Beschleunigungssensoren (für Neigungs-Pitch-Messung) und mit Magnetometern für (Gier-Gier-Berechnungen) verwendet werden. Wenn sie perfekt wäre. Leute würden es nicht stören, sie zu kombinieren. In jedem Fall, wenn Sie feststellen, dass dieser Sensor nicht für Sie arbeitet. Fühlen Sie sich frei, mit mir über eMail in Verbindung zu treten, um eine Rückkehr zu ordnen. 78. zam 10. Juni 2012 kann ich serialchart mit motionnode verwenden Zu Pedro: Nur GPS kann dir die Position deines Geräts zur Verfügung stellen. Du kannst es nicht gut genug mit nur Beschleunigungsmesser und Kreisel rechnen. 89. Max 3. September 2012 Hallo Starlino, ich mag deine Software 8220serial chart8221 sehr viel. Ich habe es benutzt, um serielle Daten von einem Arduino zu analysieren. Es funktionierte sehr gut mit allen arduinos vor uno r3. Aber in dieser Woche habe ich ein Arduino uno r3 gekauft. Jetzt kann ich die Daten analysieren. Es funktioniert nicht mit dem uno r3. Vielleicht wegen der neuen 8220ATmega16U28221 und dem neuen Fahrer. Es gibt immer die Nachricht 8220Could Port COM11 öffnen. 8216Machen Sie sicher, dass der Port availalbe82308221 ist, gibt es eine Lösung, die ich habe einen PC und Windows 7. Vielen Dank. Max aus Deutschland Wissenschaftslehrer 90. starlino 3. September 2012 max: war der vorherige arduino auf einem unteren Port wie (COM3, COM5), versuche, zum Geräte-Manager zu gehen und den zugewiesenen COM-Port von COM11 zu etwas niedriger wie COM3 COM4 zu ändern. Einige Leute berichteten über Probleme mit den Häfen höher als 10. 91. Max 10. September 2012 Hallo Starlino, danke für den Tipp. Jetzt funktioniert es wieder sehr gut. Es ist ein sehr nützliches Werkzeug. Und sehr schnell Danke vielmals. Max aus Deutschland. 92. Juan David 29. Oktober 2012 Hallo ich mag das Programm, aber ich möchte wissen, wie kann ich es implementieren, wenn das imu gibt Ausgabedaten in i2c, der 3 Achse des Kreisels und der Accel, ich habe die Daten in anderen Algorithmus von arduino Was muss ich in deinem Code ändern 8230 baarl ilk uu testini gerekletirdim. Projenin bu kadar gecikmesinin en byk nedeni Starlinonun IMU algoritmas zerinde srar etmem oldu. Yer testlerinde uak iyi tepki vermesine 8230 94. WhiteBard Dezember 21, 2012 Hallo. Sry für mein schlechtes Englisch. I8217m ein Postgrdauat der Abteilung Informationstechnologie der Sachalin State University. Können Sie mir bei meinem Problem helfen, ich habe bereits Daten von verschiedenen Sensoren: Beschleunigungsmesser, Gyroskope, etc. Daten gespeichert im folgenden Format: Zeit, Gyro X, Gyro Y, Gyro Z, Beschleunigungsmesser X, Beschleunigungsmesser Y, Beschleunigungsmesser Z, Kompass X , Kompass Y, Kompass Z. Die Daten sind laut. Ich muss auf Lärm reduzieren und Handlung, um die Ergebnisse mit einem Kalman-Filter zu bewerten. Helfen Sie mir bitte ändern Sie Ihr Programm, um die Daten zu verarbeiten ist nicht in Echtzeit, um mein Problem zu lösen. Vielen Dank. 95. Iwan 22. Januar 2013 Ich möchte Daten von der Serienkarte zum Arduino-Modul senden. Kannst du mir den Quellcode der Serienkarte geben Wenn möglich möchte ich ihn ändern, um Daten zu senden 8230 Arduino Code für IMU Guide Algorithmus. Mit einem 5DOF IMU Beschleunigungsmesser und Gyroskop Combo Starlino8230. 8230 97. Benhur 23. Februar 2013 Starlino, creio que todos os leitores deste site tem uma dvida contigo Obrigado por divir seus conhecimentos conosco Foi conectar ein fiao e rodar o programma que saiu funcionando 98. Tim 29. April 2013 Hallo Starlino, sehr cool Projekte I039m etwas ganz Ähnliches zu tun, aber ich habe eine Frage über die SerialChart Anwendung. I039m versucht, meine 3 Gyro-Achsen zu visualisieren, aber ich kann nur sehen, 2 von ihnen in serialchart8230 Dies ist der Code I039m für den Druck: Serial. print (a) Serial. print (quot, quot) Serial. print (b) Serial. (C) Ich habe auch mit anderen Daten versucht, aber die gleichen Ergebnisse8230 Bin ich etwas falsch gemacht Danke im Voraus 99. starlino 29. April 2013 Tim, was ist die serielle Diagramm-Konfigurationsdatei, und können Sie Sende Probe Ausgabe von Ihrem Gerät 100. Tim 30. April 2013 Dies ist, was I039m immer im Moment, 4 Zahlen in der Ausgabe, aber nur 3 Zeilen sichtbar8230 timdemeyer. befilesserialchartoutput. png 101. starlino 30. April 2013 Tim Ihr erstes Feld ist Genannt Intervall und it8217s Farbe ist transparent, sollten Sie entfernen, dass Abschnitt 102. Tim 30. April 2013 Oh ja Nachlass Alle Zeilen sind jetzt auftauchen. Vielen Dank 103. Ben-Hur 5. Mai 2013 Herzlichen Glückwunsch-Guide auf IMU und Anwendung SerialChart, seine Erklärungen sind einfach und wirklich arbeiten I039m den gleichen Job zu tun, aber mit anderen Modellen von Sensoren und meine Frage ist in Bezug auf die komplementäre Filter: 1) In dem komplementären Filter (im Arduino-Code) wird ein gewichteter RWAcc w config. wGyro RwGyro w) (1 config. wGyro) durchgeführt, der perfekt funktioniert, aber ich habe andere Artikel gesehen, von denen ich über komplementäre Filter recherche und sah Es gibt eine andere Gleichung des Typs: quadrat (0,98) (Winkel Rwgyro dt) (0,02) (Rwacc) oder quadrat a (Winkel Rwgyro dt) (1-a) RwAccquot wo ein tau (t tau) Sie sehen können, dass die beiden Formen wird einen Wert größer als ein Sensor zu einem anderen gegeben. Nur konnte ich nicht sehen, wo die Variable quotaquot in Ihrer Lösung, und verwies auf diese Zeit konstant als die anderen Artikel sprechen. Vielen Dank für Ihre Zeit 104. clark 12. Mai 2013 Serial Chart funktioniert nicht mein PC, ist das kompatibel mit Windows Starter Ich habe versucht, die ZIPPED-Version zu verwenden, aber wenn ich auf die Run-Taste gedrückt, gibt es mir eine Fehlermeldung quotCould nicht öffnen Port COM26quot aber ich bin mir sicher, dass mein Arduino bei com26 angeschlossen ist und ich schon das serielle Diagramm konfiguriere. Ich habe auch versucht, alle Anwendungen auf meinem PC zu schließen, außer Serial Chart. Aber immer noch den gleichen Fehler. Kann mir jemand helfen. 105. starlino 13. Mai 2013 Clark: Die QT-Serienbibliothek hat manchmal Probleme mit Ports höher als 10 (nur auf einigen Computern), Sie können es auf COM4 oder etwas ähnliches ändern. Lösung ist hier beschrieben: 106. Pablopaolus 22. Mai 2013 Vielen Dank für Ihre Arbeit und Entschuldigung, um Sie zu stören. I039m verrückt zu versuchen, einen orientierten Würfel in Labview ab RwEst Werte zu zeichnen. I039ve las alle Kommentare hier auf der Suche nach einer Antwort ohne Erfolg. I039ve versuchte, die Rollwinkeln mit diesen Ausdrücken zu berechnen: pitch atan2 (RwEst1, RwEst2) roll atan2 (RwEst0, sqrt (RwEst1RwEst1RwEst2RwEst2)) Aber es funktioniert nicht. Könnten Sie mir bitte eine Möglichkeit geben, diese Aufgabe zu erfüllen, ich werde Ihnen dankbar sein, wenn Sie Hilfe finden können. 107. starlino 22. Mai 2013 Pablopaolus: Bitte schauen Sie sich das DCM Tutorial auf dieser Seite an. Wenn Sie die DCM-Matrix anstelle der Tonhöhe berechnen, können Sie die Position eines beliebigen gedrehten Vektors als r8217 DCM r finden. 108. Pablopaolus 22. Mai 2013 Starlino: Vielen Dank für deine schnelle Antwort. Ich hatte bereits dein DCM Tutorial gelesen. Allerdings, da ich fand es schwieriger zu verstehen, habe ich implementiert Ihre vereinfachte Kalman Filter Algorithmus8230 aber es scheint, I039ll müssen für DCM gehen. Übrigens habe ich einen Zweifel an Ihrer DCM-Implementierung. Ist der Code in code. googleppicquadcontrollersourcebrowsetrunkimu. hr7 genug für die Berechnung der DCM-Matrix Ich meine: Bei der imuupdate () - Funktion kann ich sehen, dass Sie die dcmGyro-Matrix aktualisieren, aber ich kann irgendwo die dcmEst-Berechnung sehen, die als die geschätzte dcm-Matrix durch Fusion definiert ist Von Beschleunigungsmesser und Gyroskop. Mit anderen Worten: ist dcmGyro die Matrix, die ich verwenden kann, um zu finden r039dcmGyror Vielen Dank für die Prüfung meiner Anfrage. 109. starlino 28. Mai 2013 111. Fatima 10. Juli 2013 Ich arbeite zurzeit an einem Self-Balance-Roboter und ich möchte einen kalman-Filter für meine IMU-Sensor-Fixing und Filterung verwenden und ich möchte die Ausgabe als Neigungswinkel in die PID-Regler, und ich möchte den PID-Ausgangswinkel in die Geschwindigkeit für meinen MD49-Motortreiber umwandeln. Ich weiß, was ich machen will, aber ich weiß nicht genau, wie es geht. Also habe ich gehofft, wenn du eine Idee hast, wo ich anfangen soll und wie ich die notwendige Umwandlung machen könnte. Vielen Dank für Ihre Betrachtung Ursache Ich klinge wie ein Anfänger, was ich bin. 112. johnnymucker 8. August 2013 serial chart funktioniert nur mit com prots 1 lt 9. manuell ändern Sie Ihre com-Port-Nummer in Windows 7 (you039ll müssen google das) Ich musste es in winXP tun, um es zu arbeiten. 113. Jan Bambey 12. August 2013 Gibt es eine Lizenz für die imu arduino Ich arbeitete an MPU6050. Es ist ein 3-achsiger ACC. und 3- Achsen GYRO und Temp Sensor. Als ich versuchte, nur die Tilt-Informationen von diesem Sensor zu bekommen. Ich fand es in der gleichen Zeit die Beschleunigung, die ich nicht brauche. Eigentlich muss ich nur die Neigung in x und y Richtung lesen. Meine Frage ist. Wie kann ich die Beschleunigungserfassung abbrechen. 136. john oakley 29. April 2015 Ich versuche, eine Spur von mpu6050 zu generieren. Mein Gyro x, y Daten schnell zieht die 2 Spuren vertikal, aber sie sind sehr langsam von links nach rechts über das Diagramm zu bewegen, daher sind alle zerquetscht und unleserlich im Vergleich zu anderen Charts ive gesehen Menschen generieren. Seine wie ein oscillocope auf einer langsamen zeitbasis von ungefähr 1 seconddiv und alle daten sind in dieser zeitskala vollgestopft. Ive versucht als eine vorherige Post sagte über das Hinzufügen einer Verzögerung nach jeder Zeile. Ich nehme dies zum Beispiel an: xdata, ydata (verzögerung) und nicht xdata, (verzögerung) ydata (verzögerung) und so weiter. Ist dies der einzige Weg, um die Sweep-Geschwindigkeit zu erhöhen 137. Sarra Chebbah Mai 18, 2015 Code Matlab filtre kalman et animation 3d MPU6050

Comments