Ist ein Kalman-Filter zum Filtern der Positionen projizierter Punkte unter Berücksichtigung der Euler-Winkel des Erfassungsgeräts geeignet?


17

Mein System ist das folgende. Ich benutze die Kamera eines Mobilgeräts, um ein Objekt zu verfolgen. Durch diese Verfolgung erhalte ich vier 3D-Punkte, die ich auf den Bildschirm projiziere, um vier 2D-Punkte zu erhalten. Diese 8 Werte sind aufgrund der Erkennung etwas verrauscht. Ich möchte sie filtern, um die Bewegung flüssiger und realistischer zu gestalten. Als zweite Messung verwende ich den Gyroskopausgang des Geräts, der drei Euler-Winkel (dh die Gerätelage) liefert. Diese sind genauer und mit einer höheren Frequenz (bis zu 100 Hz) als 2D-Positionen (um 20 Hz).

Mein erster Versuch war mit einem einfachen Tiefpassfilter, aber die Verzögerung war wichtig. Deshalb versuche ich jetzt, einen Kalman-Filter zu verwenden, in der Hoffnung, dass er die Positionen mit geringer Verzögerung glätten kann. Wie in einer früheren Frage zu sehen , ist ein wichtiger Punkt in einem Kalman-Filter die Beziehung zwischen den Messungen und den internen Zustandsvariablen. Hier sind die Messungen sowohl meine 8 2D-Punktkoordinaten als auch die 3 Euler-Winkel, aber ich bin nicht sicher, was ich als interne Zustandsvariablen verwenden und wie ich die Euler-Winkel mit den 2D-Punkten verbinden soll. Daher ist die Hauptfrage, ob ein Kalman-Filter überhaupt für dieses Problem geeignet ist. Und wenn ja, wie?


Wenn der gesamte Zweck darin besteht, die Werte mit minimaler Verzögerung zu glätten, können Sie versuchen, einen Minimalphasenfilter zu verwenden, falls Sie dies nicht bereits versucht haben. Es würde mich überraschen, wenn Sie mit der Kalman-Filterung eine bessere Verzögerung als die minimale Phasenverzögerung erzielen können. Bei linearen Filtern würde ich erwarten, dass ein Minimalphasenfilter die kleinstmögliche Verzögerung ergibt.
Niaren

@niaren: Danke für den Kommentar, ich werde das auch studieren.
Stéphane Péchard

1
Es ist unklar, was Ihre Maße sind. Im Kalman-Filter-Framework beziehen sich "Messungen" auf die Größen, die Sie tatsächlich beobachten. Wenn Sie vier 3D-Punkte messen (z. B. durch Zusammenführen mehrerer Kamerabilder), sind dies Ihre Messungen. Sie müssen auch entscheiden, welche Statusvariablen Sie schätzen möchten. Versuchen Sie, die 3D-Objektpositionen im Laufe der Zeit zu verfolgen? Wenn ja, sind dies Ihre Zustandsvariablen. Es kann angebracht sein, die 2D-Darstellung nur zur Anzeige zu verwenden und nicht als Teil Ihres Modells zu verwenden. Zusätzliche Details helfen, einen Ansatz vorzuschlagen.
Jason R

Wie Jsaon sagt, sind Ihre Messungen nicht klar. Sie sagen: From this tracking, I get four 3D points that I project on a mobile device screen, to get four 2D points. These 8 values are kinda noisyund später sagen Sie What's available to me is the device's gyroscope output, which provides three Euler angles (i.e. the device attitude).. Welches ist es? Die vier 2D-Punkte oder die drei Euler-Winkel? Oder fährt der Bearbeitungszug Euler-Winkel -> 3D-Punkte -> 2D-Punkte?
Peter K.

Eigentlich habe ich zwei Messreihen: die von der Kamera erfassten Punktpositionen und die Euler-Winkel, aber die Zuordnung ist nicht trivial. Außerdem interessieren mich nur die gefilterten Positionen als Ausgabe. Ich werde die Frage bearbeiten, um zu klären.
Stéphane Péchard

Antworten:


4

Tiefpassfilterung

Es wäre gut zu wissen, was Sie mit "einfachem Tiefpassfilter" meinen.

Zum Beispiel, wenn Ihre Messungen zum Zeitpunkt sindk

pk=[xkyk]

und Ihre tiefpassgefilterten Schätzungen sind:

pkLPF=αpk-1LPF+(1-α)pk

dann haben Sie eine ziemlich große Gruppenverzögerung im Filter von ungefähr (für Alpha nahe 1). 1/(1-α)

Modellierung des Signals: Simplistic Approach

Um den Kalman-Filter (oder einen ähnlichen Ansatz) verwenden zu können, benötigen Sie ein Modell für die Erfassung und Aktualisierung Ihrer Messungen.

Normalerweise sieht das so aus:

wobei ϵ k das Prozess- (Fahr-) Rauschen ist, A die Zustandsübergangsmatrix ist und B Ihre Eingangsmatrix ist.

pk+1TRUE=EINpkTRUE+Bϵk
ϵkEINB

Und dann gemessen sind: p k = C p T R U E k + D ν k wobei ν k ist der Ausgang (Messung) Rauschen, C die Ausgangsmatrix, und D ist der Messrauschmatrix.pk

pk=CpkTRUE+Dνk
νkCD

Hier wird der "Zustand" des Modells als die wahren Positionen ausgewählt, und die gemessenen Dinge sind die Ausgabe.

Sie können dann die Kalman-Filtergleichungen auf diese anwenden, um Zustandsschätzungen der wahren Position zu erhalten.pkTRUE^

Dieser Ansatz ist jedoch vereinfachend, da er keine Kenntnisse darüber verwendet, wie sich die Punkte bewegen könnten (und keine Kenntnisse darüber, wie sich die 4 Punkte bewegen könnten).

Modellierung des Signals: Start eines besseren Ansatzes

Diese Seite zeigt, wie Sie das Problem mit den Positionen und Euler-Winkeln einrichten. Es macht etwas anderes als das, was Sie brauchen, aber der Zustand ist:

pkTRUE=[xk yk zk x˙k y˙k z˙k x¨k y¨k z¨k ϕ ψ θ ϕ˙ ψ˙ θ˙ ϕ¨ ψ¨ θ¨ ]T

und die messungen (ausgang) ist

pk=[xk yk zk ϕ ψ θ ]T

xkTRUE=n=0kx˙nTRUEnΔt+12n=0kx¨nTRUE(nΔt)2
x,y,z

Dies ist nur die klassische "Bewegungsgleichung". Siehe Gleichung (3) hier.


pk=αpk-1+(α-1)pk

α

Δt;12(Δ2)

Δt1/fs

1
fsΔtΔt12Δt2

0

Ihr Tiefpassfilter könnte wie folgt aussehen:

pk=αpk-1+(1-α)zk

zkkpkk

Der LPF kann zum nächsten verformt werden:

pk=pk-1+K(zk-pk-1)
K=(1-α)

K

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.