Un projet de Computer Vision où notre objectif était de piloter un drône à l'aide de cibles visuelles dans l'environnement.
- Des images sont prises par les deux caméras du drone en simulation sur Unreal Engine 4 puis envoyées à un programme Python qui s’exécute en parallèle.
- Un preprocessing est appliqué aux images puis une détection de coins par la méthode d'Harris est effectuée.
- À partir des points détectés, les arêtes sont testées et filtrées pour sélectionner des les arêtes fortes entre une zone blanche et une zone noire.
- Des quadrilatères sont extraits depuis ces arêtes en utilisant des règles simples et une transformation en perspective est appliquée pour récupérer une image rectifiée de chaque cible candidate.
- Si l'image extraite correspond à une cible (marqueurs ARuco), on récupère son numéro d'identification et on utilise de la géométrie dans l'espace pour estimer sa position et sa rotation relativement à la caméra.
- Cette information est finalement envoyée au drone qui applique une moyenne temporelle sur les estimations afin de se guider dans l'environnement.
Dans la vidéo qui suit, on voit le drone en train d'évoluer dans un environnement simulé. Les cibles sur blocs jaunes sont celles que le drone doit suivre tandis que les autres sont des parasites pour tester sa capacité à distinguer les cibles. Sur la droite se trouvent les deux vues des caméras (600x600 pixels chacune) du drone, l'une pointant vers l'avant et l'autre vers le bas. Les repères rouge-vert-bleu que l'on voit apparaître répétitivement sont les estimations que le drone fait des positions et rotations des cibles. La flèche jaune au-dessus du drone représente la direction moyenne estimée vers laquelle il doit se diriger quand il est prêt à aller à la prochaine cible. Enfin, on peut voir l'état de navigation du drone en haut à droite de l'écran.
Note finale : un contrôleur PID est utilisé pour diriger le drone vers une cible donnée. Pour rendre les choses plus faciles (le principal intérêt du projet étant la Computer Vision), la gravité est automatiquement compensée et le drone est capable d'une odométrie et de mesures de vitesses parfaites.