Ball On Wheel

Système de commande SoC-FPGA pour " Ball on Wheel"
Responsable
MESSERLI Etienne
Période
mars 2017 - décembre 2017
Tags
  • FPGA
Axes
Conception intégrale de systèmes embarqués

L’objectif de ce projet consiste à développer un démonstrateur pour l’institut REDS.
Il s'agit de réaliser la commande d'un système "Ball-on-Wheel" à l'aide d'un SoC-FPGA.

Lien de la vidéo: https://youtu.be/oFN28XETKwM  

Le but d’un système "Ball-on-wheel" est le maintien d’une bille en équilibre sur le haut d’une roue. La position de la bille est obtenue à l'aide d'une caméra située à la verticale de celle-ci. Cette position linéaire est convertie en angle afin d'obtenir le déphasage angulaire de la bille par rapport à la verticale. Ensuite, le système asservi la position de la roue via une commande en couple du moteur, donc en contrôlant la vitesse de rotation de la roue.

Voici une vue de la roue avec la bille sur le haut de celle-ci:

demo_bow_roue_test

En 2014, un travail de Bachelor "Conception d’un système de réglage "Ball on Wheel" avec caméra rapide a été réalisé par Steve Vassaux au sein de l'institut iAi de l'école. Ce travail a permis de réaliser un démonstrateur comprenant un banc mécanique, une caméra rapide, un moteur avec un drive et de développer un algorithme d'asservissement. Durant ce travail, la régulation a été implémentée dans un PC temps réel de prototypage rapide. Cette plateforme de commande utilise directement l'algorithme Matlab via « Simulink Real-Time » pour la commande du banc de démonstration "Ball on Wheel". Les communications entre le PC et les périphériques, soit la caméra et le drive du moteur, sont basées sur le protocole temps réel EtherCAT.

L’objectif du présent projet est de remplacer l’ordinateur temps réel utilisé précédemment par une commande low-cost et compacte basée sur un SoC-FPGA. La caméra 2D rapide sera remplacée par un capteur CCD linéaire permettant d’acquérir des images à une fréquence de 18,5 kHz. D'autre part, nous allons utiliser des protocoles de communication plus simples, soit un bus caméra-link pour la caméra et une commande analogique en tension pour le drive. Le démonstrateur ainsi réalisé permettra de démontrer la performance de traitement disponible avec cette nouvelle technologie de SoC-FPGA.

Architecture de la commande avec le SoC-FPGA

La commande embarquée est basée sur une carte de développement DE10 de Terasic. Elle comprend un circuit SoC-FPGA Cyclone V d'Intel-Altera. Voici la vue de cette carte avec les connections utilisées pour ce projet:

de10_standard_test

Cette carte comprend un circuit Intel Cyclone® V SE 5CSXFC6D6F31C6N. Ce type de circuit comprend deux parties, soit un HPS (Hard processor system) et une FPGA. Le HPS comprend un dual core ARM Cortex-A9. La FPGA comprend 110K d'éléments logiques programmables (LEs: Logic elements) et 5'761Kbits de mémoire.

Voici l'architecture générale de la commande embarquée avec la carte DE10, soit:

generalPowerPoint_low

La position de la bille est mesurée par un capteur CCD linéaire de 2x2048 pixels permettant des acquisitions à une fréquence de 18,5 kHz. Ce capteur dispose d'une connexion de type "Camera-link". Celle-ci est connectée sur une carte d'interface Cameralink to HSMC permettant de transférer l'image dans la FPGA. Un système numérique a été développé pour gérer le bus camera-link et l'acquisition de la position de la bille. Ce design détecte l'emplacement des deux transitions correspondant aux bords de la bille et stocke les échantillons dans un tampon. Ces transitions sont fournies au HPS qui va calculer la position angulaire de la bille. Le design permet aussi de mémoriser l'image complète dans un FIFo pour permettre une visualisation sur un PC pour le réglage de la caméra.

Voici une vue de l'image de la bille au sommet de la roue:

line_calib_ball

L'acquisition de la position de la bille a nécessité de nombreux essais d'éclairage à l'aide de leds. La disposition de celle-ci modifie fortement la qualité de la mesure. Il est aussi important d'attacher une attention toute particulière au réglage de la caméra, soit de l'ouverture et de la netteté. Lorsque le système est correctement réglé, la précision de la position est largement subpixel avec une interpolation linéaire des deux pixels voisins du niveau de seuil (ligne rouge). La précision est de l'ordre de 1/10 de pixel.

Une carte d'extension a été développée afin de connecter différents signaux venant du drive moteur. Nous disposons d'un convertisseur numérique/analogique pour contrôler le drive (couple du moteur), une entrée pour le codeur incrémental et un bus CAN. Le système numérique gère le convertisseur numérique/analogique via un bus SPI. Il reçoit la consigne de couple du HPS via un registre. Le design comprend un système numérique permettant de déterminer la position du moteur à l'aide des deux signaux A-B du codeur incrémental. La position est transmise au HPS via un registre.

Voici une vue du design du système numériques implémenté dans la FPGA.

archiFPGA

 

L'algorithme d'asservissement conçu par Steve Vassaud a été migré dans un programme C pour l'implémenter sur le HPS. Ce programme assure la convertion de la position de la bille en angle. Il implémente l'algorithme qui utilise quatre grandeurs, soit: position et vitesse de la bille et position et vitesse de la roue. Le programme implément en outre 3 modes de fonctionnements, soit position statique, vitesse constante et ocillation. Voici une vue de l'algorithme de régulation du couple du moteur:


regul_poster

Le système de démonstration final comprend la structure montrée ci-dessous. Il y a la possibilité de connecter un PC afin de visualiser l'image de la caméra et permettre de réaliser les réglages de la caméra. Voici la structure et les connections du banc complet:

branchements

 

Lors de l'étape de finalisation de la démonstration, nous avons installé la carte de développement DE10 ainsi que la carte d'extension et la carte d'adaptation "Cameralink to HSMC" sur la mécanique du banc. Voici une vue du banc final

branchements

 

Voici deux vues du banc de démonstration de devant et de derrière:

demo_bow_vue_devant

demo_bow_vue_arriere


Voici une vue de la démonstration "Ball on Wheel" avec le PC montrant l'image de la caméra linéaire.

demo_bow_roue_led_pc

 

La démonstration permet de démontrer 3 modes de fonctionnements différents. Des boutons de la carte DE10 permettent de choisir le mode souhaité. Voici les boutons disponibles:

buttons_effect

 

Voici une description des trois modes de fonctionnement:

  • Mode statique: ce mode est sélectionné par le bouton "STATIQUE"
    • La bille est maintenue à la verticale de la roue, le tout maintenu le plus immobile possible.
    • Dans ce mode il est possible d'enclencher le régulateur dérivateur à l'aide du bouton "DERIV ON/OFF". Il permet d’éliminer les vibrations que la bille a autour de sa position d’origine et d’illustrer la fonctionnalité dérivation d’un système de régulation. La led située au dessus de l’interrupteur témoigne de si ce dernier est actif ou pas. Cette fonctionnalité n’est appliquée que dans le mode statique.
  • Mode vitesse constante: ce mode est sélectionné par le bouton "VIT. CSTE"
    • La roue tourne à vitesse constante avec la bille maintenue à sa verticale.
  • Mode oscillation: ce mode est sélectionné par le bouton "OSCILLANT"
    • La bille exécute une oscillation autour de la position d'équilibre vertical.

Le projet a été réalisé par Nathan Pittet. Le projet a démarré par son travail de Bachelor réalisé au sein de l'institut REDS en collaboartion avec le professeur Raoul Herzog de l'institut iAi. La finalisation a été financée par la fondation Charles et Irma Stähli-Boss pour une durée de 2 mois et par l'institut REDS pour une durée d'un mois.