Expérience avec le filtre de Kalman sur l'exemple des données NMEA

Le but de l'article n'est pas d'expliquer les principes du filtre de Kalman, mais de le démontrer en utilisant des données réelles (brutes) comme exemple. Ceux qui le souhaitent pourront modifier le code source et expérimenter l'algorithme, j'espÚre que mon travail aidera ceux qui sont confrontés à une tùche similaire.


Les données utilisées proviennent d'un récepteur GPS au format NMEA-0183, notamment les messages GGA et VTG.


Le filtrage est nécessaire en raison du bruit du GPS. Les causes d'interférence dans les données GPS sont différentes. Les principaux:


  • atmosphĂ©riques.
  • obstacles au signal.
  • Position de l'orbite GPS. Par exemple, la faible inclinaison des orbites GPS (environ 55 °) nuit gravement Ă  la prĂ©cision dans les rĂ©gions circumpolaires de la Terre.

Tout cela au total entraßne des sauts de position, des décalages de cap et d'autres problÚmes. Et dans le travail, tout d'abord, j'avais besoin d'obtenir exactement la vitesse filtrée.


Le fait est que la vitesse mesurée par l'équipement et transmise dans le message VTG a donné des relevés peu plausibles (sauts, etc.), ce qui a compliqué les tùches de contrÎle.
Par conséquent, il a été décidé de construire un modÚle de filtre dans Octave, et aprÚs avoir reçu la vitesse en tant que dérivée des données GPS représentées par le message GGA, comparez-la avec les données de vitesse d'origine du message VTG.


Pour faciliter la comparaison, les donnĂ©es doivent ĂȘtre affichĂ©es sur un graphique.


Le filtre de Kalman fait un excellent travail de filtrage des données et de leurs dérivés.


«».


— . ( ) : - - . , Predict, Update, Invariant :


https://habr.com/ru/post/140274/
https://habr.com/ru/post/166693/
https://ru.wikipedia.org/wiki/%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%9A%D0%B0%D0%BB%D0%BC%D0%B0%D0%BD%D0%B0


Octave (open-source Matlab Linux). F . ( ):



, .
— (PAC ) C++.


— Octave .


++ , , Octave — .


GGA :


VTG :

«--» — , . Latitude Longitude.


.


, .

:
Fk — //, state-transition model.
Hk — /, observation model.
Qk — , covariance of the process noise;.
Rk — , covariance of the observation noise.
K — .
Xp — () .
Xk — .
X(k-1) — .
Pp — , .
P — .
P(k-1) — () .
z- () .


:
Xp = Fk X(k-1); .
Pp = Fk
P(k-1) * F'k + Q; .


:
K = Pp H' inv(H Pp H' + R); .
Xk = Xp + K(z — HXp); z.
P = Pp — KHPp; .


.


KalmanX KalmanY .


X Y , , Q, R, F reset ( Q R, ).


(habrGGA.m) , , .


Q, R . ( Q, R). , .


, :



( ) , Q. R = 0,2.


, :



— X Y (Latitude Longitude) , :




:



( VTG) , .


Q R, (habrGGA.m):


 if j==1   Q = [ 0.01 0;
                  0   0.01];
            Q1=Q;     
            R=0.2; R1=R;
  elseif j==2   Q = [ 0.05 0;
                      0   0.05]; 
                      Q2=Q;
            R=0.2; R1=R;
  elseif j==3    Q = [1 0;
                       0  1];
                       Q3=Q;
            R=0.2; R1=R;
  end

Pour mes besoins, la valeur Q moyenne (0,05) semble maintenant ĂȘtre la plus prĂ©fĂ©rable sur ce kit NMEA. Une sĂ©lection de coefficients plus prĂ©cise et Ă©ventuellement variable dynamiquement sera mise en Ɠuvre lors du dĂ©bogage lors des essais d'amarrage.


Fichiers joints.
habrGGA.m - le script principal (lecture des données, appel de la fonction de filtrage, tracé des graphiques)
KalmanX.m - Filtre Kalman (Latitude)
KalmanY.m - Filtre Kalman (Longitude)


All Articles