Projet IN 103
Le SLAM
Filtre de Kalman
En Matlab
SLAM = Simultaneous Localization and Mapping
Projet Robotique
ENSTA Robotique
Filtre de Kalman
I.Principe
II.Programmation avec Matlab
III.Résultat
Deux moyens de se repérer
I.Principe
Compter le nombre de tours de roues
Méthode incrémentale
1.L'odométrie
Repérage par triangulation ou avec une caméra
2. Avec des balises/amers
Problèmes
Butée contre un obstacle
Balises non disponibles/inconnues
Informations internes
Informations externes
L'erreur s'accumule
Problème de reconnaissance des balises
Volonté de précision
Utilisation conjointe des deux techniques
Nécessité de recouper les informations
Filtrage de Kalman
II.Programmation
avec
Matlab
Les étapes
Les matrices
X* = [x +xu; y + yu,...] on rajoute l'odométrie
X: position absolue [x; y; xa1; ya1; ...]
carte et position du robot
Y: coordonnées des amers Y[x1; y1; x2; y2;...]
issues de l'observation
Y*: relatif [xa1 - x, ya1 - y,..., yan - y]
Les matrices (suite)
P: Matrice de covariance des amers
Q: Matrice de covariance de l'odométrie
Mesure de l'incertitude
Erreur proportionnelle à la distance
Les données
percep : 2.610054 3.587491 1.731687 7.627319 5.969606 8.740084
odom : 0.242237 2.635034
percep : 2.059525 1.537290 1.102366 5.364240 5.407859 6.277271
odom : 0.512546 2.822456
percep : 1.397940 -1.399142 0.491180 2.388502 4.589120 3.410499
odom : 1.155917 1.797266
percep : -0.042466 -2.965487 -0.977701 0.817747 2.995906 1.842215
odom : 2.034563 1.747939
Observations avec nombre d'amers fixe
id = fopen('FullObservation.data');
textscan(id,'percep : ');
Y = textscan(id,'%f');
Y = cell2mat(Y)
[X,P,A,B,H] = initialisation(Y);
graph(X,P)
a = 0.1 %facteur de proportionnalité
Py = Matrice_covariance(Y,a);
Initialisation
Traitements des nouvelles données
%On parcourt le fichier texte
while ~feof(id);
%Partie qui traite l'odométrie
textscan(id,'odom : ');
u = textscan(id,'%f');
u = cell2mat(u);
Q = Covariance_odometrie(u,a);
[Xet,Pet] = prediction(X,u,A,B,P,Q);
graph(Xet,Pet)
hold on
Yet = H*Xet;
textscan(id,'percep : ');
Y = textscan(id,'%f');
Y = cell2mat(Y);
Py = Matrice_covariance(Y,a);
[X,P] = correction_etat( Xet,Yet,Pet,Y,H,Py);
graph(X,P)
end
Difficultés rencontrées
Lecture du fichier
Créer les matrices à la bonne taille
Observations partielles: taille de matrice variable
III.Résultat
Observation Partielle
Nombre Fixe
Conclusion
Méthode efficace pour coupler les informations
Matlab outil adapté pour ce type de calcul
IN103 Slam
By Antonin Raffin
IN103 Slam
Présentation sur le Projet d'IN103 en Matlab à l'ENSTA
- 1,071