2016-02-03 6 views
0

J'ai mis en œuvre un filtre kalman linéaire 3d pour suivre la position de l'objet. voici les détails du KF. Mon état est la position 3d seulement et mon entrée (vecteur de contrôle) est la vitesse 3d (vx, vy, vz). et la mesure est la position 3D.importance de l'intervalle de temps dans le filtre de kalman pour le suivi de position

intervalle de temps dt = dans la mise à jour d'état std_vx, std_vy, std_vz - écart-type de l'entrée de commande, par exemple 2 mtrs/s

std_cooperative_pos_x, std_cooperative_pos_y, std_cooperative_pos_z - écart-type de l'erreur de mesure par ex. environ 40 mtrs chaque axe

A = numpy.matrix ([[1,0,0], [0,1,0], [0,0,1]]) # Etat matrice de transition

B = numpy.matrix ([[dt, 0,0], [0, dt, 0], [0,0, dt]]) # entrée de commande marix

H = numpy.matrix ([[1,0 , 0], [0,1,0], [0,0,1]])

Q = numpy.matrix ([[std_vx std_vx dt, 0, 0], [0, std_vy std_vy dt, 0], [0, 0, std_vz std_vz dt]]) # = Erreur d'entrée, proc ess erreur

R = numpy.matrix ([[std_cooperative_pos_x 2,0,0], [0, std_cooperative_pos_y 2,0], [0,0, std_cooperative_pos_z ** 2]]) # mesure co- variance matrice

P = numpy.matrix ([[1,0,0], [0,1,0], [0,0,1]])

voici mes quelques questions:

  1. combien l'intervalle de temps qui est la valeur dt est important dans la performance du filtre. comme je veux dt tels que 10 sec, ou 20 sec ..... ou jusqu'à 200 secondes. pour les valeurs dt jusqu'à 10 secondes, je suis en mesure d'obtenir une amélioration de ma piste, mais au-delà de ce qui ne fonctionne pas. Je fais quelque chose de mal ou de naturel.

  2. J'ai mis en œuvre un filtre linéaire est juste que la combinaison de la position et de la vitesse dans le temps semble être seulement linéaire.

merci d'avance pour votre temps et votre aide.

Répondre

1

La matrice de bruit de processus 'Q' est une matrice de covariance - elle doit contenir des variances plutôt que des écarts-types. Vous avez:

Q = numpy.matrix([[std_vxstd_vxdt, 0, 0],[0, std_vystd_vydt, 0],[0, 0 ,std_vzstd_vzdt]]) # = Ex error in input , process error 

Vous voulez:

Q = numpy.matrix([[std_vxstd_vx*std_vxstd_vx * dt *dt, 0, 0], ... 

Comme vous pouvez le voir, la matrice de bruit de processus avec dt^croît 2. Donc, l'intervalle de temps est très important si c'est le temps entre les mesures. Vous n'avez besoin que d'une étape de propagation entre les mesures pour ce filtre. Il n'y a aucun avantage à plusieurs étapes (un dt plus petit) sauf si vous êtes en train d'approcher une propagation d'état non linéaire ou si vous avez plus de mesures disponibles.

+0

chère @keith Brodie merci pour votre temps et votre aide. J'ai quelques doutes. – vicky

+0

chère @keith Brodie merci pour votre temps et votre aide. J'ai quelques doutes. 1.ma matrice d'état est seulement [x, y, z] pos & l'entrée de contrôle est vel [vx, vy, vz]. Si mon concept est correct (nouveau pour ce filtre) alors l'erreur dans l'entrée de contrôle se propage en (t) fois. donc incapable de comprendre la multiplication comme t * t dans la matrice Q. 2. J'ai deux types d'erreur dans l'entrée de commande, c'est-à-dire que l'un est l'erreur dans les mesures de vitesse et l'autre est sa fluctuation sur la période d'intervalle de temps t ou dt, soit 10 secondes ou 60 secondes. comment traiter ce problème de fluctuation de l'entrée de contrôle (par exemple, la vitesse), pour de bons résultats. – vicky

+0

Salut Vicky, 1) la matrice Q est la covariance du changement d'état attendu sur l'intervalle de temps dt. Les éléments sur la diagonale doivent être des variances, pas des écarts-types. 2) Si vous connaissez la variation de la variance du bruit de position à chaque mesure, vous devez modifier la matrice R pour la refléter. Le changement de temps entre les mesures peut être accommodé en ajustant dt. –