Quantcast
Channel: Kommentare zu: Das Extended Kalman Filter einfach erklärt
Viewing all 38 articles
Browse latest View live

Von: Mathias

$
0
0

Hallo Herr Balzer,
ihr Blog hat mir schon sehr geholfen das (erweiterte) Kalmanfilter zu verstehen. Aber könnten sie in der Tabelle, die das Kalmanfilter und das erweiterte Kalmanfilter vergleichend darstellt, die Formelzeichen an die aus ihrem Artikel zum 2-D-Kalmanfilter anpassen oder nochmal eine Legende zu den Formeln erstellen? Denn in dem Artikel zum 2-D-Kalman ist weder ein A noch ein Q oder C als Variablen verzeichnet.

Herzlichen Dank,
Mathias Artus


Von: Niklas

$
0
0

Könnte es ein, dass im Teil „Unterschied Kalman Filter und Extended Kalman Filter“ Predict und Update vertauscht wurden?
Die Messung kommt sollte im Update Schritt einbezogen werden. Im Predict Schritt wird – in diesem Beispiel – nur Geschwindigkeit*Zeit auf die Position addiert und das tut ja die Funktion g_A (bzw. im KF die Matrix A).

Von: Martin Hünermund

$
0
0

Ich bin beim Implementieren meines eigenen Extended Kalman Filters im hier aufgeführten Matlab Code über die Definition der Messfunktion h gestolpert und habe einige Zeit versucht zu verstehen warum diese so gewählt wurde.
Zur Erklärung:
Die Messdaten werden aus dem State des Filters genommen und ein Rauschen draufaddiert um reale Messdaten zu simulieren.
Hätte man reale, externe Messdaten, würde man in der Messfunktion in diesem hier vorgestellten Bsp einen Null-Vektor zurückgeben (keine Abhängigkeit vom State) und stattdessen in der Zeile wo z gesetzt wird (direkt nach dem for) die Messdaten setzen:
z = messdaten(:,k)

Von: Martin Hünermund

$
0
0

Ganz sicher bin ich mir an der Stelle jedoch nicht.

Von: Paul Balzer

Von: Vince

$
0
0

Hallo,
da ich nirgendwo nachfragen kann, hoffe ich hier auf eine kleine Unterstützung und Hilfe.

Ich soll ein Kalman Filter schreiben, welcher die Position des Robots glättet.
Dafür bekomme ich lediglich die Position (X,Y) in jedem Schritt.
Wenn ich eine Systemgleichung der Art: X(t) = X(t-1) + V(t-1) * dT,
Mein Zustandsvektor wäre [X,Y,Vx,Vy] muss ich dann die EKF benutzen?
Ist es überhaupt sinnvoll, solche Systemgleichung zu benutzen, da V(t) oder a(t) ja von delta X bzw. delta Y abgeleitet werden.

Ich würde mich über die Hilfe sehr sehr freuen.

Schöne Grüße, Vince

Von: Motorblog » Das Extended Kalman Filter ausführlich erklärt [Video]

$
0
0

[…] die Beiträge zum Kalman Filter (Teil1 und Teil2) sowie der Beitrag zum Extended Kalman Filter die am Häufigsten gelesenen des Motorblogs sind, habe ich zum Extended Kalman Filter noch mal […]

Von: Paul Balzer

$
0
0

Hallo Niklas, ich glaube du hast Recht, das habe ich vertauscht! Hab die Grafik aktualisiert. Danke


Von: Paul Balzer

Von: Paul Balzer

$
0
0

Hallo Martin,
ich habe den Artikel noch mal etwas überarbeitet, weil ich die Matlab Lösung nicht so schön finde. Die ist in der Tat verwirrend, weil dort numerisch differenziert wird und auch mit den Funktionen hin & her gesprungen wird.
Schau dir mal das eingebettete Video an mit der Python Implementierung, dann wird es deutlicher hoffe ich!
Grüße

Von: Marcel

$
0
0

Hallo Paul,

auch ich hab da mal ein paar Fragen, vielleicht mache ich ja auch etwas grundsätzliches falsch.
Zuerst aber einmal ein großes Lob, das ist wirklich gut gelungen und leicht verständlich in der Tat.

Aber ich verstehe es noch nicht wie ich das anstelle, wenn ich in Echtzeit die Messwerte verarbeiten möchte. Das Pythonskript habe ich mir angeschaut, aber leider bin ich damit nicht so sehr vertraut, ein Matlabskript hast du nicht zufällig, oder eine empfehlung wo man das ebenso einfach nachlesen kann?

x_k = [x_km1(4);
x_km1(5);
x_km1(6);
u1;
u2;
-(2*x_km1(5)*x_km1(6)+g*sin(x_km1(3))-u1*cos(x_km1(3)))/(x_km1(2))];

ist meine Zustandsgleichung und ich würde gern dafür ein EKF entwerfen. Dabei bin ich glaub ich etwas auf dem Holzweg und wäre über jeden Tipp erfreut.

Viele Grüße
Marcel

Von: baer

$
0
0

Auch von mir vielen Dank für diese tolle Zusammenfassung! :-)
Obwohl ich auch nicht ganz verstehe wie man auf das Systemmodell kommt, aber da gibt es vermutlich auch genug Beiträge.
Ich war außerdem etwas verwundert, dass der MatLabcode beim Ausführen keine Ergebnisse anzeigt. Der Blick in die Originalsourcen hat offenbart, dass hier der Plot (bewusst?) weggelassen wurde..

Von: Steffen

$
0
0

Stimmt der Satz unter dem Vergleich zwischen Kalman und EKF: „[…]Das selbe bei der Messgleichung im Predict Schritt.“? Sollte es nicht heißen: “ …im Correct Schritt?

Viele Grüße

Von: Paul Balzer

$
0
0

Das stimmt! Danke, habe es geändert.

Von: tillmann

$
0
0

Hallo Paul, zunächst mal vielen Dank für deine Mühe, das so detailliert darzustellen! Ich habe selbst Erfahrung mit Schätzung/Kalman-Filter und so weiter und frage mich Folgendes: in deiner zeitdiskreten Dynamik gehst du von konstanter Geschwindigkeit und konstanter Gierrate aus, i.e.

v_{x,k+1} = v_{x,k}
\omega_{k+1} = \omega_{k}

und deinem Matlab-Beispiel zufolge sind diese auch näherungsweise konstant. Für deine Implementierung in Python jedoch, siehe

http://nbviewer.ipython.org/github/balzer82/Kalman/blob/master/Extended-Kalman-Filter-CTRV.ipynb?create=1

verwendest du auch dieses Modell und dort ist die Geschwindigkeit alles andere als konstant.. siehe Plots kurz vor Position x/y. Meine Frage: funktioniert das CRTV-Modell trotzdem, weil du das Prozessrauschen hinreichend groß gewählt hast? Wie sind deine Erfahrungen damit?

Vielen Dank für deine Antwort!


Von: Paul Balzer

$
0
0

Hallo Tillmann,
die Aussage, dass es konstant ist, bezieht sich nur darauf, dass es innerhalb einer Rechenschrittweite (delta T) keine großen Änderungen gibt.
Am Beispiel der Längsgeschwindigkeit: Nehmen wir mal ein Auto, was von 0…100km/h in 5s beschleunigt. Das ist schon sportlich. Die Beschleunigung ist 5,5m/s2. Wenn du das Kalman Filter mit einer Rechenschrittweite von dt=0,02s rechnest, dann ändert sich die Geschwindigkeit von dem Auto innerhalb dieser 0,02s um 0,11m/s. Das ist zwar nicht 0m/s (was konstant wäre), aber auch nicht sooo viel.
Solltest du einen Prozess filtern wollen, der sich schneller ändert oder wenn du die Rechenschrittweite nicht so klein wählen kannst, dann kannst du auch noch eine Dimension höher gehen und das CTRA Dynamikmodell (Contant Turnrate, Constant Acceleration) wählen. Da ist innerhalb einer Rechenschrittweite die Beschleunigung konstant, was im Beispiel des Autos ja dann so wäre (nämlich 5,5m/s2).
Wenn du die Process Noise Covariance Matrix aber so gestaltest, dass eine Abweichung von der idealen Annahme möglich ist, dann konvergiert das Filter auch mit dem CTRV und alles ist gut.

Von: Paul Balzer

$
0
0

Hallo Baer,
ja, wie man auf diese Systemmodelle kommt, wird wohl immer ein Geheimnis der Physiker und Maschinendynamiker bleiben… :)
Aber dafür gibt es zum Glück Bücher, wo die gängigsten so drin stehen. Viel interessanter ist die Wahl der Q und P Matrix, da widersprechen sich die Literaturquellen auch alle. Das ist also das so genannte Filter-Tuning, wofür es ganze Professuren gibt.

Das stimmt, im Matlab Code ist keine Anweisung zum Erstellen des Plots enthalten.

Von: tillmann

$
0
0

Hallo Paul, genau das waren meine Überlegungen: kleine Änderungen der Geschwindigkeit lässt du mithilfe der Matrix für das Prozessrauschen zu. Dein zeitdiskretes Modell für Geschwindigkeit und Gierrate sind

v_{x,k+1} = v_{x,k} + w_{k,1}
\omega_{k+1} = \omega_{k} + w_{k,2},

wobei w_{k,1} und w_{k,2} je zero-mean Gaussian white noise darstellen, welche ein gewisses ‚Rauschen‘ von Geschwindigkeit und Gierrate modellieren.

Klar — wenn es die Anwendung zulässt, z.B. Fahrt auf einer Autobahn, und das Modell hinreichend gut zu sein scheint, dann spricht nichts dagegen, diesen Ansatz zu wählen.

Thumbs up :)

Von: Ben Schwarzbrot

$
0
0

Hey Paul,
vielen Dank, klasse Beitrag.
Wenn es darum geht, die Lage im Raum bzgl. der Winkel zu identifizieren, wie wäre dann mein Zustandsvektor?
Ich habe 3-Achs Gyros und 3-Achs Acc´s zur Verfügung.

x=[ax ay az rx ry rz]

passt das, oder muss ich die Winkel, die ich später mal wissen will, in diesen Vektor mit einbeziehen?

Vielen Dank und viele Grüße
Ben

Von: Paul Balzer

$
0
0
Hm. Irgendwie schon. Wo willst du den Wert sonst her nehmen, wenn er nicht im Zustandsvektor mit berechnet wird. Wenn du die Lage einer 6DoF IMU im Raum berechnen willst, dann gehen die üblichen Algorithmen davon aus, dass die Erdbeschleunigung (in Ruhe) die einzige ist und dann wird die "Richtung nach unten" berechnet. Damit weißt du aber immer noch nicht, in welche Richtung in der Horizontalen die IMU zeigt. Dafür brauchst du eine 9DoF IMU (mit Magnetsensor) oder du kannst eben nur die Drehraten aufintegrieren und das wird dann ungenau mit zunehmender Zeit. Falls du es einfach nur gelöst haben willst (und nicht zum lernen mal selbst machen willst), würde ich dir empfehlen die <a href="http://www.tinkerforge.com/de/doc/Hardware/Bricks/IMU_V2_Brick.html" target="_blank" rel="nofollow">Tinkerforge IMU 2.0</a> zu kaufen, die Jungs haben das gut gemacht!
Viewing all 38 articles
Browse latest View live