nicht-linearer Kalmanfilter; Jacobische; Linearisierung

Neue Frage »

mzenzes Auf diesen Beitrag antworten »
nicht-linearer Kalmanfilter; Jacobische; Linearisierung
Hallo Leute,

wiedermal schlage ich mich erfolglos mit dem rum was ich eigentlich können sollte ;-)

Es dreht sich um die Anwendung eines nicht-linearen Kalmanfilters mit der OpenCv-Library.

Dort habe ich mich eingearbeitet, und stehe nun vor dem Problem, das ich meine Messgleichung linearisieren muss, um sie im Filter verwenden zu können. Dazu schreibt die Wikipedia das ich die Linearisierung mittels der Jacobischen Matrix vornehmen kann. Gut, kein Problem. Oder...?

(Im Kalman-Filter wird aus dem aktuellen Systemzustand unter anderem der zu erwartende Messvektor geschätzt, um ihn dann mit dem echten im Nachhinein zu vergleichen. Dann kann man etwas über die Güte der Filterung und Messung aussagen. Diese vorhersage wird entweder mit der Systemmatrix C gemacht, oder aber mit der linearisierung des Gleichungssystems. In dem Fall muss sie jeden Durchlauf neu linearisiert werden; Gleichungnen in Octave-Schreibweise)

Meine 3x1 Messgleichung h(X), mit dem 3x1 Systemzustandsvektor X (Messvektor in [m/s²], Zustand in [rad]):
code:
1:
2:
3:
4:
5:
g = 9.81;
h = [ -sin(X(2)) ;
       cos(X(2))*sin(X(1)) ;
       cos(X(2))*cos(X(1)) ]*g;

Dieses Gleichungssystem muss ich nun mittels der Jacobischen Matrix zur Matrix H linearisieren.
Hierbei ist dh1/dX(1) die Ableitung der ersten Gleichung nach der ersten Unbekannten usw:
code:
1:
2:
3:
4:
H = [ dh1/dX(1), dh1/dX(2), dh1/dX(3) ;
      dh2/dX(1), dh2/dX(2), dh2/dX(3) ;
      dh3/dX(1), dh3/dX(2), dh3/dX(3) ];

Oder, ausgeschrieben:
code:
1:
2:
3:
4:
H = [  0 ,                   -cos(X(2)),           0 ;
       cos(X(1))*cos(X(2)) , -sin(X(2))*sin(X(1)), 0 ;
      -sin(X(1))*cos(X(2)) , -sin(X(2))*cos(X(1)), 0 ]*g;

Nach meinem Verständniss muss ich nun, um mittels dieser Matrix wiederrum den Messvektor zu erhalten (quasi nur zur Probe Rückwärts rechnen), den Zustandsvektor numerisch verrechnen (einsetzen), und dann die Matrix mit X malnehmen.
Also H(X)*X. Klappt natürlich nciht...

Als Beispiel:
code:
1:
2:
3:
4:
5:
6:
X = [0.1;0;0];
H = [  0,     -1, 0 ;
       0.995,  0, 0 ;
      -0.0998, 0, 0 ]*g;
H*X = [ 0 ; 0.976 ; -0.0979 ];

Anhand der echten Messgleichung h ermittele ich aber den zu erwartenden Messvektor folgendermaßen:
code:
1:
2:
h = [ -0 ; 0.979 ; 9.760 ];

Was auch gemessen wird...

Tja, wo hab ich den Bock eingebaut? Was mache ich falsch?

-Die Jacobische ist meiner Meinung nach richtig, die Rechenvorschrift ja ziemlich eindeutig. Und ein bisschen sin/cos Ableiten...
-Ist das Verfahren (Jacobische) ansich schon ungeeignet? Findet sich aber in vielen Beispiel Kalman-Applikationen...
-Reihenfolge der Matrizenmultiplikation durcheinander? Eigentlich nicht, ausserdem muss ich ja auf die Dimensionen achten...
-Die numerische ausgerechnete H-Matrix sieht ja Zahlentechnisch ganz schön aus, alles was ich brauche kommt drin vor
-Da X in [rad] angegeben ist, wird wahrscheinlich selten sowas wie 1 als Element dabei sein, und durch dieses multiplizieren (H*X) erhalte ich dann immer sehr kleine Ergebnisse. Also ist irgendwo ein prinzipieller Fehler?
mzenzes Auf diesen Beitrag antworten »
RE: nicht-linearer Kalmanfilter; Jacobische; Linearisierung
Hallo

nur für die Akten: Das Thema hat sich erledigt, die Antwort findet sich hier
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »