Suivi de marqueurs fiduciaires pour drones
Ce projet, réalisé à l’ITA avec Marcos Sousa et Victor Bastos, étudie une composante précise de l’atterrissage autonome : suivre une référence visuelle même lorsque le détecteur la perd brièvement. Une caméra observe un marqueur fiduciaire, YOLOv8 fournit sa position dans l’image et un filtre de Kalman transforme ces mesures intermittentes en une estimation continue.
Le prototype ne commande pas un aéronef. Il étudie la couche de perception qui pourrait précéder le guidage et la commande d’un eVTOL ou d’un drone.
Structure du système
Chaque image traverse trois étapes :
- Détection. YOLOv8 renvoie la boîte englobante du marqueur.
- Mesure. Le centre de cette boîte devient .
- Estimation. Le filtre prédit la position suivante et la corrige dès qu’une détection est disponible.
YOLO raisonne uniquement à partir de l’image courante. Le filtre conserve un état dynamique entre les images : il lisse ainsi les centres bruités et propage la trajectoire pendant une courte occultation.


Entraînement du détecteur
Le jeu de données rassemble environ 200 photographies du marqueur prises avec un téléphone, à plusieurs distances, orientations et conditions d’éclairage. Le notebook enregistre 162 images d’entraînement, 15 images de validation et un échantillon de test de huit images. Toutes les annotations appartiennent à une seule classe : Marker.
Un YOLOv8s pré-entraîné a été affiné pendant 25 époques. Les images demandées en pixels sont complétées par l’implémentation jusqu’à ; la taille de lot est 16 et l’optimiseur est SGD. Le transfert d’apprentissage permet ici de travailler avec un jeu de données trop réduit pour apprendre les représentations visuelles à partir de zéro.
Une validation enregistrée donne une précision de , un rappel de , et . Ces valeurs confirment que le marqueur est détectable, mais la petite taille de la validation impose de les lire comme des résultats de prototype.
results = self.model.predict(source=image, conf=0.45)
for box in results[0].boxes:
x1, y1, x2, y2 = box.xyxy[0]
centers.append(((x1 + x2) / 2, (y1 + y2) / 2))
Le détecteur réduit chaque boîte retenue à son centre. L’estimateur suit donc un point bidimensionnel, et non l’échelle ou l’orientation du marqueur.
Modèle d’état
Le filtre emploie un état à vitesse constante
avec la dynamique et l’observation
où
Les covariances et décrivent respectivement l’incertitude du modèle de mouvement et celle des centres produits par le détecteur.
La prédiction précède l’observation courante :
Lorsqu’un centre est disponible, l’innovation mesure l’écart entre observation et prédiction ; le gain de Kalman les pondère selon leurs incertitudes :
La correction devient
Si YOLO ne renvoie aucune boîte, la correction est omise mais la prédiction reste disponible. C’est ce comportement que montre la démonstration lorsque le marqueur disparaît.
prediction = kf.predict()
if centers:
measurement = np.array(centers[0]).reshape(2, 1)
corrected = kf.filter(measurement)
Ce que montre le prototype
L’expérience établit le comportement qualitatif recherché : le détecteur reste exploitable malgré les variations d’angle et d’éclairage, l’estimation corrigée converge vers les mesures et le modèle de mouvement traverse de courtes pertes de visibilité. Les deux modules répondent à des questions distinctes : où l’image situe-t-elle le marqueur maintenant ? et où se trouve-t-il vraisemblablement, compte tenu de cette mesure et de sa trajectoire récente ?
L’implémentation demeure volontairement limitée. Elle suit le premier centre détecté, sans association multi-objet ni validation statistique. La période d’échantillonnage et l’accélération sont fixes, et la boucle originale effectue deux prédictions lorsqu’une détection existe. Enfin, le suivi est évalué visuellement, sans erreur de trajectoire ni métrique dédiée aux occultations.
Une version suivante devrait mesurer les timestamps, n’effectuer qu’une prédiction par image, pondérer les mises à jour par la confiance et utiliser un gating de Mahalanobis. Une trajectoire de référence permettrait ensuite de comparer l’erreur brute et l’erreur filtrée en fonction de la durée d’occultation, avant toute intégration avec un contrôleur d’atterrissage.
Références
- G. Jocher, A. Chaurasia et J. Qiu, Ultralytics YOLO, 2023.
- R. E. Kalman, « A New Approach to Linear Filtering and Prediction Problems », 1960.
Commentaires et suggestions
Questions, corrections et suggestions sont les bienvenues. Je lis chaque message avant sa publication.
Chargement des commentaires…