SAE Robot - Contrôle et Vision - BUT3 - S5


Projet SAE Robot - Contrôle et Vision artificielle
Camera je vois pro

Photo de la camera JeVois-Pro, boostée à l'IA (jevoisinc.com)

Généralités :
Date de début : Septembre 2024 - BUT 3 S5
Durée : 4 mois
Groupe : 2 personnes
Caractéristiques :
Complexité 70%
Recherche 95%
Ouverture 60%
Travail personnel 100%
Compétences travaillées :
Asservissement PID : Régulateurs position/vitesse, correcteurs PD, stabilisation sur plan incliné
Vision artificielle : OpenCV, détection d'objets, projection 3D, segmentation HSV
Programmation embarquée : PIC, machines à états, protocole UART, gestion temps réel
Navigation robotique : Génération de trajectoires, waypoints, odométrie, FeedForward

Note : Les niveaux présentés dans "Caractéristiques" sont subjectifs. La signification précise est détaillée dans Détails des caractéristiques des projets universitaires.



J'ai développé un système de contrôle avancé pour robot mobile autonome, intégrant asservissement PID, génération de trajectoires et vision artificielle. Ce projet s'articule autour du portage de fonctionnalités existantes sur une nouvelle carte électronique et de l'intégration d'un système de vision JeVois-Pro pour la détection d'objets.

Portage et asservissement PID

J'ai implémenté un système d'asservissement PID double pour contrôler la vitesse linéaire et angulaire du robot. Le correcteur utilise trois composantes : proportionnelle (Kp) pour la réponse immédiate, intégrale (Ki) pour éliminer l'erreur statique, et dérivée (Kd) pour réduire les oscillations.

La validation du système a été réalisée par des tests sur planche inclinée. Le robot maintient parfaitement sa position malgré la gravité et les perturbations externes, démontrant la robustesse de l'asservissement. Cette approche garantit une stabilité en vitesse nulle même sous contraintes mécaniques.

Générateur de trajectoire

J'ai développé un générateur de trajectoire basé sur une machine à états pour gérer les déplacements entre waypoints. Le système calcule l'angle cible avec atan2, puis exécute séquentiellement la rotation (état ROTATING) et l'avancement linéaire (état ADVANCING). Cette approche séquentielle est adaptée aux robots non-holonomes qui ne peuvent combiner rotation et translation simultanément.

La gestion dynamique des vitesses s'effectue par accélération/décélération progressive basée sur la distance restante. La position est mise à jour en temps réel via les composantes trigonométriques, assurant un suivi précis de la trajectoire planifiée.

Trajectoire en carré du robot
Trajectoire en carré de 1m de côté : validation du générateur avec waypoints

L'application de validation consiste en une trajectoire carrée de 1 mètre de côté. Les résultats montrent une précision satisfaisante avec des erreurs de positionnement minimales. Cependant, j'ai identifié la nécessité d'un asservissement en position (régulateur PD) pour améliorer la précision lors des virages serrés.

Schéma correcteur PD
Architecture du correcteur PD avec FeedForward pour l'asservissement en position
Vision artificielle JeVois-Pro

J'ai intégré une caméra JeVois-Pro embarquant Linux Ubuntu pour la détection d'objets rouges. Le système utilise OpenCV avec conversion en espace HSV pour la segmentation couleur, application de masques pour les plages rouges inférieures et supérieures, puis filtrage par aire des contours détectés. L'algorithme calcule les centroïdes et génère des rectangles englobants pour simplifier la localisation.

Algorithme de traitement vision
Pipeline de traitement d'image : de l'acquisition à la transmission

La projection 3D exploite les coordonnées 2D centrées pour calculer les angles alpha (plan vertical) et thêta (plan horizontal). J'utilise des matrices de rotation pour déterminer le vecteur direction 3D de l'objet. La constante focale de référence (focalRef = 789 px) a été calibrée expérimentalement avec des objets positionnés à 45°.

Angles alpha et theta
Calcul des angles α et θ pour la projection 3D des objets détectés

La localisation finale utilise une droite paramétrique $r(t) = c + t \cdot d$ avec intersection sur le plan table (z=0). Le paramètre $t = -c_z/d_z$ permet de calculer les coordonnées (x,y) de l'objet. Cette approche garantit une localisation précise avec seulement quelques opérations arithmétiques simples.

Simulation projection 3D
Simulation de projection : transformation des points 2D en coordonnées 3D sur la table
Intégration système

J'ai mis en place un protocole UART robuste pour la transmission des données de vision. La structure de trame inclut un octet de début (0xFE), le code fonction, la longueur, les données (positions multipliées par 1000) et un checksum XOR. Cette approche réutilise le protocole existant robot-PC en garantissant l'intégrité des transmissions.

Sur le PIC, j'ai implémenté un gestionnaire UART2 dédié avec buffer circulaire. La réception du code fonction 0x04 déclenche l'extraction des positions relatives, leur conversion en coordonnées absolues (compensation offset caméra-robot), et leur stockage dans le tableau de waypoints. Cette architecture sépare clairement réception/traitement du générateur de trajectoire.

L'utilisation de coordonnées absolues garantit la validité des waypoints même lors de création pendant un déplacement. Cette approche évite les erreurs de navigation dues aux références relatives obsolètes, assurant cohérence et fiabilité dans la planification dynamique.

Résultats et perspectives

Ce projet démontre l'intégration réussie de systèmes complexes : asservissement PID performant validé sur plan incliné, générateur de trajectoire fonctionnel avec précision satisfaisante, et système de vision opérationnel pour la détection/localisation d'objets. L'architecture modulaire facilite les extensions futures.

Les perspectives d'amélioration incluent l'implémentation du régulateur PD en position pour affiner la précision des virages, l'ajout d'un mécanisme anti-doublons pour optimiser la gestion des waypoints, et l'extension du système de vision à d'autres couleurs/formes d'objets. Cette base solide ouvre la voie vers des applications robotiques plus avancées.