Objectifs des projets : 

  • Comprendre le principe et les enjeux des composants PSoC.
  • Mettre en œuvre la programmation/configuration d’un PSOC à tous les niveaux dans des applications robotiques.

Présentation des projets : 

Support de présentation projeté lors de la première séance de TD

 

 

X1 - Asservissement numérique sur FPGA

Objectifs du sous-projet

  • Maitriser la configuration de la partie logique configurable (FPGA) du PSoC.
  • Réaliser un asservissement numérique sur FPGA (asservissement de la vitesse d’un moteur à courant continu).
  • Faire réaliser par un robot une trajectoire simple mais précise.

Pré-requis

Mise à niveau en VHDL-FPGA

Matériel et documentations

Proposition de déroulement du sous-projet

  • Prise en main des outils et du matériel
  • Réalisation des signaux de commande d’un moteur à courant continu
  • Réalisation d’une trajectoire pour un robot non asservi
  • Réalisation d’un composant de mesure de la vitesse d’un moteur et visualisation des données sur PC
  • Réalisation d’une boucle d’asservissement en vitesse (correcteur PI) pour un moteur
  • Réglage des paramètres du correcteur
    • Procédure de réglage expérimental des paramètres d'un correcteur PI (méthode empirique de Ziegler-Nichols) décrite dans le document sur la correction PID
    • Si les oscillations ne sont pas observables (limitation liée au maximum de commande), on peut adapter le réglage empirique de cette manière : 
      • mise à 0 du coefficient  de correction intégral Ki
      • augmentation du gain proportionnel Kp jusqu'à apparition d'un léger dépassement pour une consigne en échelon choisie au milieu de la plage de consigne possibles.
      • Réduction du gain proportionnel à 90% de la valeur précédente
      • Augmentation du gain intégral (en partant d'une valeur faible <10% de Kp) jusqu'à ré-aparition d'un léger dépassement de la consigne
      • Affinage des valeurs en fonction du compromis souhaité (rapidité/stabilité/dépassement)
  • Réalisation d’une trajectoire pour un robot asservi (machine à état temporelle)
  • Réalisation d’un asservissement en position pour des trajectoires simples (ligne droite et rotation sur place).

Evaluation

  • Rapport de projet (1 par binôme) à déposer au plus tard la veille du jour de la soutenance ici
    • Compte pour 50% de la note de l'UE
  • Soutenance orale 
    • une présentation de 10 min par binome
    • Vous devez considérer que votre auditoire est spécialiste de FPGA/VHDL, mais ne connait rien de votre projet (pas même le sujet).
    • le temps est un critère de notation, entrainez-vous !
    • temps de parole à répartir
    • Grille d'aide pour la préparation de la présentation (mais pas utilisée telle quelle pour la notation)
    • Compte pour 50% de la note de l'UE

 

X2 - PSoC

Objectifs du sous-projet

  • Maitriser la configuration de la partie logique programmable (FPGA) du PSoC.
  • Réaliser un robot capable de décrire précisément des trajectoires complexes, ou faire un suivi de ligne avancé.
  • Construire un ensemble complet de drivers permettant d'interragir avec l'ensemble des éléments constitutifs du robot.
  • Réaliser un robot capable de suivre une ligne au sol en évitant les obstacles sur son chemin.

Proposition de déroulement du sous-projet

  • Prise en main des outils Vivado + Vitis
    • Suivi d'un tutoriel pour réaliser une interraction PS-PL : Récupération par le processeur de l'état d'un bouton (câblé sur PL) et alumage d'une LED (sur PL) en utilisant l'IP AXI-GPIO
    • Suivi d'un tutoriel pour la réalisation d'IPs personnalisées avec interface AXI
    • Il existe un bug dans les outils de xilinx qui génère une erreur lors de la compilation de la plateforme lorsque l'on utilise le driver d'une IP custom générée en suivant la procédure précédente. Pour corriger ce bug, il faut remplacer le fichier Makefile de l'IP une fois générée (dans le dossier nomIP/drivers/nomIP/src) par ce Makefile (avant de l'inclure dans votre design et de générer le fichier XSA).
  • Réalisation d'une IP avec interface AXI pour le controle (asservi) d'un moteur en vitesse
    • On fournit pour cela les sources de ce qui était demandé dans la partie précédente du projet pour être certains de partir sur de bonnes bases.
      • Asservissement de vitesse d'un moteur avec correction Proportionnelle-Intégrale
        • L'entité de pus haut niveau qui instancie les autres est AsservRB444_PI.
        • Elle contient une base de temps que vous pouvez utiliser également pour d'autres parties du projet.
        • Elle ne gère qu'un seul moteur, un paramètre générique permet d'inverser facilement le signal de direction.
        • Par soucis de simplicité les multiplications utilisées dans le correcteur n'utilisent pas les multiplieurs dédiés des tuiles DSP de la PL. Vous avez toutes les compétences pour modifier cela si vous le souhaitez.
        • Pour éviter un problème de synchronisation, il est recommandé d'utiliser pour tous les composants PL qui nécessitent une interraction avec le processeur (via AXI) une horloge issue du même domaine d'horloge (pour cela, parametrez l'IP "Zynq processing system" pour créer une horloge à la bonne fréquence).
      • Si vous souhaitez obtenir des courbes d'évolution de la vitesse en fonction des paramètres du correcteur : 
        • vous pouvez modifier les coefficients de correction proportionnelle (Kp) ou intégrale (KiTe) à l'instantiation du correcteur CorrecteurPI (Attention à l'instabilité provoquée par un gain intégral trop élevé).
        • On fournit la descripton du Décodeur Binaire/ASCII (cf branchements dans la documentation des composants fournis dans la précédente partie)
        •  Il est recommandé d'utiliser un composant de ce type permettant de synchroniser la transmission des données via l'UART et l'application de l'échelon de consigne de vitesse (la sortie EN_rs232 de ce composant est à relier à l'entrée debutTransmission du composant transmissionDonnee).
  • Réalisation d'un programme (sur PS à l'aide du driver de l'IP du controle de moteur précédent ) pour réaliser une trajectoire carrée simple

Option 1 : controle de trajectoire asservi en position : 

  • Réaliser une IP-AXI pour l'odométrie (qui doit renvoyer deux registres 32 bits contenant la somme (signée) des déplacement réalisée par chacune des roues depuis le démarrage du robot).
    • A chaque impultion de codeur, le registre correspondant doit s'intrémenter (ou se décrémenter si la roue a reculé).
  • Configurer sur la PS une interruption périodique (1ms par exemple) pour lire les valeurs des registres précédents et mettre à jour la position estimée du robot (x,y,theta)  (en supposant que l'orignie du repère est la position du robot au démarrage).
  • (Optionnel) : Envoyer régulièrement la position estimée du robot par odométrie via la liaison UART situé sur la PL (pour l'envoi sans fil en bluetooth). Afin d'afficher le déplacement du robot sur une carte sur un PC distant.
  • A l'aide de fonction B-splines ou courbes de Bézier (par exemple), générer un ensemble fini de points définissant la trajectoire souhaitée du robot (pour faire un créneau par exemple)
  • Réaliser un asservissement de position sur cette trajectoire : 
    • Donner une consigne de vitesse aux deux moteurs cohérente par rapport à la position courante du robot (odométrie) et la position cible (la vitesse du robot doit être proportiennelle à la distance qu'il reste à parcourir).
    • Définir une nouvelle interruption périodique (100ms par exemple) qui vient régulièrement changer la position cible en suivant la trajectoire générée précédement.

Option 2 : suiveur de ligne

  • Réaliser l'interface PS-PL nécéssaire pour pouvoir, depuis le processeur, interragir avec tous les éléments du robot : 
    • Capteurs de ligne
    • Détecteurs de collisions
    • Télémetres IR
    • Capteur de couleur
  • Programmer sur PS le suivi de ligne
  • Ajouter la détection d'obstacle (sur interruption), pour arreter le robot en cas de choc
  • Ajouter la détection de bande perpendiculaires et la zone de couleur associée
    • Réaliser une action différente à chaque couleur (pause, demi-tour droite, demi-tour gauche par exemple) avant de reprendre le suivi
  • Réaliser la détection d'obstacle à distance (20cm par exemple) puis le contournement de l'obstacle du coté le plus oportun.

Option 3 : suiveur de ligne avancé (par caméra) (non testé pour l'instant)

  • Réaliser l'interface matérielle pour permettre l'aquisition d'images sur la PS avec une caméra
  • Réaliser un traitement de l'image pour détecter la position de la ligne devant le robot
  • Asservir les vitesses des roues pour suivre la ligne
  • Detecter les bandes blanches perpendiculaires par vision embarquée et la couleur des zones associées
    • Réaliser une action différente à chaque couleur (pause, demi-tour droite, demi-tour gauche par exemple) avant de reprendre le suivi

Evaluation

  • Rapport de projet (1 par binôme) à déposer au plus tard la veille du jour de la soutenance ici
    • Compte pour 50% de la note de l'UE
  • Soutenance orale 
    • une présentation de 10 min par binome
    • Vous devez considérer que votre auditoire est spécialiste de FPGA/VHDL/PSoC, mais ne connait rien de votre projet (pas même le sujet).
    • le temps est un critère de notation, entrainez-vous !
    • temps de parole à répartir
    • Grille d'aide pour la préparation de la présentation (mais pas utilisée telle quelle pour la notation)
    • Compte pour 50% de la note de l'UE

X3 - OS et vision embarquée

Objectifs du sous-projet

  • Introduire un système d'exploitation embarqué (linux) sur PSoC.
  • Construire un ensemble complet de drivers permettant d'interragir avec l'ensemble des éléments constitutifs du robot via le système d'exploitation.
  • Introduire le traitement d'image pour la vision embarquée (bibliothèque OpenCV)
  • Réaliser un robot capable de détecter un objet particulier dans une scène, de s'en rapprocher, de le saisir et de le ramener au point de départ.