Réalisation d'un robot autonome - BUT2 - S3


Projet Robot - Réalisation d'un robot autonome
Image représentative

Interface de supervision développée en C# (WPF)

Généralités :
Date de début : 04/09/2023 - BUT 2
Durée : 5 mois
Groupe : 2 personnes
Caractéristiques :
Complexité 50%
Recherche 50%
Ouverture 60%
Travail personnel 70%
Compétences travaillées :
Navigation autonome : Stratégie contre-réaction linéaire, capteurs télémètriques IR, évitement d'obstacles
Programmation embarquée : dsPIC33EP512GM306, interruptions UART, buffers circulaires
Protocoles série : Trames structurées, checksum, liaison USB-UART FT232RL
Interface C# WPF : POO, polymorphisme, visualisation temps réel
Électronique : Configuration UART, remappage broches, interfaçage capteurs
Gestion de données et structures : Buffers circulaires, FIFO, SerialProtocolManager, décodage de trames

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.



Ce projet universitaire de BUT 2 GEII a consisté à développer un système complet de navigation autonome pour robot mobile, intégrant à la fois les aspects algorithmiques d'évitement d'obstacles et l'interface de supervision. Le robot, équipé de cinq télémètres infrarouges disposés en arc de cercle, devait être capable de naviguer de manière autonome tout en transmettant ses données de fonctionnement vers une interface de pilotage développée en C# WPF.

L'objectif principal était double : implémenter une stratégie de navigation par contre-réaction linéaire sur le microcontrôleur dsPIC33EP512GM306, et développer une application Windows permettant la visualisation temps réel et le contrôle des paramètres via liaison série USB. Cette approche bidirectionnelle permettait une supervision complète du comportement du robot.

Stratégie de navigation autonome
Communication série et protocole

La communication entre le robot et l'interface PC s'effectue via une liaison série USB utilisant un module FT232RL configuré à 115200 bauds, 8 bits de données, 1 bit de stop, sans parité. Cette configuration assure un débit suffisant pour la transmission temps réel des données de télémétrie et des commandes de pilotage.

Un protocole de communication structuré a été développé avec un format de trame standardisé : SOF (0xFE), code fonction (2 octets), taille payload (2 octets), payload (n octets), checksum (1 octet). Quatre types de commandes ont été implémentés : transmission de texte (0x0080), commande LED (0x0020), transmission distances télémètres (0x0030), et transmission consignes vitesses (0x0040).

Extrait du schéma de câblage du robot
Extrait du schéma de câblage du robot

L'implémentation sur microcontrôleur utilise des buffers circulaires de 128 octets pour optimiser la gestion mémoire et éviter les débordements. Deux approches ont été testées : une première utilisant l'opérateur modulo, puis une version optimisée sans modulo pour réduire la charge processeur. Le décodage des trames s'appuie sur une machine à états permettant le traitement octet par octet sans attendre la réception complète de la trame.

La configuration UART du dsPIC33EP512GM306 utilise les broches remappables RPI24 (RX) et RPI36 (TX) avec remappage approprié. Les interruptions de réception et transmission sont gérées via des ISR dédiées assurant un fonctionnement asynchrone optimal.

Interface de supervision

L'interface de supervision a été développée en C# WPF, exploitant les capacités graphiques de DirectX pour un rendu fluide des éléments visuels. L'architecture logicielle repose sur une approche orientée objet avec une classe SerialProtocolManager gérant l'encodage/décodage des trames, et des classes SerialCommand spécialisées pour chaque type de commande.

Capture d'écran de l'interface principal
Interface de supervision développée en C# (WPF)

Le polymorphisme des méthodes Process() et MakePayload() permet une gestion transparente des différents types de commandes. La classe Robot centralise toutes les données télémètriques et de contrôle, servant de modèle de données partagé entre les différents composants de l'interface.

L'interface utilisateur présente une disposition ergonomique avec visualisation temps réel des distances télémètriques, affichage des consignes de vitesse des moteurs, contrôle des LEDs, et zone de communication bidirectionnelle. Le design adopte une esthétique professionnelle avec couleurs sobres et éléments intuitifs, optimisant l'interaction homme-machine.

Les fonctionnalités incluent la visualisation graphique des données télémètriques avec mise à jour temps réel, le contrôle individuel des LEDs du robot, l'affichage des consignes de vitesse moteur, et une console de communication permettant l'envoi de commandes textuelles personnalisées. Un système de démonstration génère des valeurs aléatoires pour tester l'interface sans connexion physique au robot.

Résultats et perspectives

La stratégie de contre-réaction linéaire démontre une efficacité satisfaisante dans les configurations de type couloir avec des mouvements relativement fluides. La vitesse d'adaptation aux obstacles permet une navigation sûre à vitesse d'exploration standard. Cependant, certaines limitations ont été identifiées : comportement inadéquat lorsque tous les capteurs sauf le central détectent des obstacles, et tendance aux demi-tours brutaux lors d'approche rapide d'obstacles.

L'interface de supervision répond pleinement aux objectifs avec une communication bidirectionnelle stable et une visualisation temps réel efficace. L'architecture orientée objet facilite la maintenance et l'extension des fonctionnalités. La fréquence d'acquisition de 40 Hz assure une réactivité appropriée pour les applications de robotique mobile autonome.

Les perspectives d'amélioration incluent l'implémentation d'algorithmes de navigation plus sophistiqués, l'ajout de capteurs complémentaires, et l'extension de l'interface vers une architecture web pour faciliter l'accessibilité multi-plateforme. L'optimisation des buffers circulaires pourrait également bénéficier d'une approche par interruptions DMA pour réduire davantage la charge processeur.