Machine Sherbrooke, Jeux de Génie 2018
Encore une fois, l'équipe machine de l'Université de Sherbrooke a travaillé durement pendant les 4 mois de la session d'automne pour préparer un robot capable de relever les différents défis de la compétition machine des Jeux de Génie 2018, présenté à l'Université Laval. Voici un article présentant dans les moindres détails les différents choix de conception fait par l'équipe cette année du côté de l'ingénierie électrique, mécanique et informatique du robot, en plus de présenter le parcours de compétition et le défi. Le tout s'est soldé par une 1e place pour la machine en plus de la victoire des Jeux de Génie 2018 au classement général pour la délégation de Sherbrooke!
Le défi Machine
Le défi machine 2018 est somme toute simple : ramasser des mâts au sol, bâtir des drapeaux avec des bannières disposés à l'intérieur du robot (conception propre à chaque équipe machine), puis déposer ces drapeaux fraîchement bâtis dans les socles disposés sur le parcours. L'extraction de la totalité des mâts ajoute un 4 points additionnels aux universités étant en mesure de le faire. Des points étaient aussi alloués sur la vitesse d'exécution en fonction du temps le plus rapide des autres universités. Finalement, le restant des points étaient alloués en fonction de la qualité du prototype présenté ainsi que l'ingénierie et l'innovation apportée par l'équipe sur le robot.
Les drapeaux sont constitués d'un mât (bâton de pop sicle standard) et d'une bannière dont la surface, une fois assemblé, doit recouvrir une pièce de 2 dollars canadien :
L'assemblage doit être assez solide pour être manipulé par un des juges sans que la bannière ne tombe, sans quoi l'assemblage est considéré comme incomplet.
Les bannières de l'Université de Sherbrooke sont bâties avec des pailles McDonalds sur le principe d'insertion serré : la déformation de la paille sur le mât l'y attaches fermement.
- Vue de la bannière avec la paille.
- Vue de la bannière monté sur un mât
- Vue de la déformation de la paille
Le parcours comporte différents reliefs :
- La zone de départ, où sont disposés 2 drapeaux déjà montés ainsi que 2 mâts vierges
- La prairie, contenant 1 socle.
- Le désert, bac de sable contenant 1 socle.
- La montagne, plan incliné de 15 degrés, contenant 2 socles
- La forêt, contenant 2 socles ainsi que 10 mâts disposés sur le sol.
- Le nord, composé de blocs de bois disposés les uns sur les autres sans colle ou méthode d'attache particulière. Un socle y est disposé à l'arrière
- L'espace, zone délimité par un espace vide de 8 pouces : ce dernier contient la lune (canette surélevé) ainsi que 2 socles.
La complexité du défi reposait majoritairement sur le fait qu'aucun contact visuel direct n'était permis entre le pilote et le parcours : 3 personnes autres que le pilote pouvait être disposé aux alentours du parcours pour donner des directives orales. Les essais pendant la compétition étaient aussi limité à 10 minutes par équipe. Ceci nous à influencé dans le choix d'opter pour une approche basé par itérations afin d'avoir un prototype fonctionnel rapidement; le tout pour être sûr d'avoir assez de temps pour se pratiquer à piloter le robot avant la compétition.
source : (https://i.pinimg.com/originals/8a/07/e1/8a07e14951bd12bab0ccc54727258846.png)
La machine de Sherbrooke
À l'Université de Sherbrooke, les étudiants sont appelés à réaliser beaucoup de travaux pratiques pour perfectionner leurs méthodes de conception et de design : le résultat est une approche de résolution de problème beaucoup plus efficace, épaulés par des schémas et des plans de conception complets et professionnels. De plus, la gestion d'un projet de cette envergure nécessite une organisation soutenue, des réunions fréquentes et des revues de design. Partant de cette philosophie, l'équipe de Sherbrooke a pris la décision de réaliser l'entièreté de sa machine à partir de concepts provenant de ses membres en mettant aux point différents prototypes en plus de les qualifier, de les perfectionner et finalement d'en réaliser une version finale pour la compétition.
Prototypes des systèmes mécaniques
- Traction
Vu le nombre différents de reliefs présents sur le parcours officiel, le choix de la traction s'est rapidement imposé comme étant crucial à l'élaboration du premier prototype. Partant du squelette de la machine de 2017, l'équipe a commencé à tester l'adhérence avec un système à 4 roues motrices conventionnel : les résultats furent décevants, la traction étant incapable de grimper la montagne ou encore de sortir facilement du bac de sable. Après avoir évalué différents scénarios, un membre a déniché des chenilles d'un ancien tank téléguidé, et est ensuite apparu notre système de traction :
Deux moteurs DC entraînent 2 sprockets imprimés 3D placés à l'avant de la machine. 6 roues en fibre molle montés sur des axes libres permettent aux chenilles de glisser facilement sur les pneus et d'ainsi réduire le stress mécanique sur les sprockets. La base du robot, initialement en bois, a été renforcée en acier pour le prototype de compétition.
Pour défoncer le mur et aller au-delà du nord vers l'espace, un treuil motorisé a été ajouté à l'arrière du robot : ceci a aidé à mieux répartir le poids pour ne pas glisser en grimpant la montagne, en plus d'être un élément essentiel pour traverser le trou de 8 pouces. Lors de l'approche, le pilote n'avait qu'à descendre le treuil, activer la traction des roues, et le robot pouvait ainsi facilement traverser le trou.
- Bras robotisés
L'élément mécanique qui ressort le plus de la machine de Sherbrooke est sans doute la conception et la réalisation complète de 2 bras robotisés à 6 degrés de libertés chacun, disposés du côté gauche et droite du robot. Ces bras, composés de 6 servo moteurs, offrent une très grande liberté de mouvements permettant d'aller chercher les mâts et de les déposer dans n'importe lesquels des socles présents sur le parcours (lune, sable, montagne, etc.). Le choix d'en posséder 2 complets s'est avéré très utile : d'une part, la prise des mâts à gauche autant qu'à droite a permise à notre équipe d'être rapide lors de la compétition, d'une autre part un duo offre une redondance en cas de défaillance majeure d'un des bras.
Les bras ont été modélisés et asservis par des équations mathématiques pour contrôler simultanément le rayon, la hauteur ainsi que la portée du bras tout en conservant en tout temps la pince de contrôle à l'horizontale pour l'approche et la prise des mâts.
Les 6 axes de libertés de chacun des bras :
- L'angle de rotation du bras en X
- L'angle d'élévation du bras en Y
- L'angle d'élévation du coude en Y
- L'angle d'élévation du poignet en Y
- L'angle de rotation du poignet en Z
- La pince linéaire en X
L'ensemble des pièces de soutien ont été réalisés à l'impression 3D en plastique PLA biodégradable, et le matériel de composition des bras est du bois découpé au laser : Sherbrooke s'est donné comme mission de réduire au maximum l'utilisation de matériau non recyclable, et l'approche avec le bois permet d'atteindre cet objectif en plus de permettre de facilement retravailler les prototypes!
Prototypes des systèmes informatiques
La partie informatique de la machine repose sur la réalisation d'une interface de contrôle sur PC basé sur le framework Java FX. Cette interface permet de contrôler l'ensemble des systèmes du robot via un clavier, et permet de visionner le flux vidéo des 4 caméras disposés sur le robot :
- 2 placées sur les extrémités des bras, au-dessus des pinces (voir photo précédente)
- 2 placées sur la base du robot, offrant une vue en plongée du parcours
L'interface propose différentes fenêtres de contrôle :
- Une première fenêtre, appelée “Registre”, permet d'envoyer des commandes de bases à chacun des sous-modules de contrôle pour faire des tests d'intégration et de fonctionnement.
- Une seconde fenêtre, appelée “Configuration”, permet de configurer les variables des équations mathématiques d'asservissement des bras. Lors du montage des servo-moteurs, les positions initiales et finales sont prises en notes et intégrés dans un fichier Excel de calcul et de conversion des angles, puis entrées dans l'interface par l'utilisateur. C'est également à cet endroit que le pilote affecte des touches du clavier aux commandes de mouvements du robot, qu'il sélectionne le numéro de port série pour le XBEE et qu'il sélectionne les caméras FPV à afficher dans l'interface.
- La dernière fenêtre, appelée “Conquérant” permet de visualiser le contenu des 4 feed vidéos à droite, ainsi que les valeurs de l'asservissement actuel du bras. La barre au bas permet l'entrée des commandes.
La communication entre l'interface et les caméras fut réalisée avec OpenCV : les 4 récepteurs étaient branchés par USB sur l'ordinateur. Les caméras sont de type FPV, jasant sur la bande du 5.8GHz à 42 Channels configurables. La communication entre l'interface PC et le robot s'effectue à l'aide d'un port série sans-fil XBEE à 57 600bps. La totalité de la trame de communication a été explicité en différents octets de contrôles tel qui suit :
- Octet 0 : Adresse du robot, entre 0 et 255
- Octet 1 : Adresse du périphérique. Chaque module possède une adresse : les 8 moteurs sont entre 0 et 7, les 12 PWM entre 8 et 19, et ainsi de suite pour les autres sous-modules électriques.
- Octet 2 : Commande du périphérique.
- Octet 3 : Data 0 du périphérique
- Octet 4 : Data 1 du périphérique
- Octet 5 : Checksum calculé par addition et troncage des 5 derniers octets.
L'interface a donc pu être développée en parallèle sur l'interface PC ainsi que sur la plateforme de développement électronique, réduisant le temps de développement et la modification du code d'un sens ou dans l'autre. L'interface compte environ 30 000 lignes de code.
Prototypes des systèmes électroniques
La partie électronique de la machine repose en grande partie sur la réalisation d'un circuit imprimé 4 couches de contrôle robotique complètement custom imaginé, développé puis réalisé sur la suite logicielle OrCAD Capture et PCB Editor. La plateforme est basé sur un microcontrôleur PIC 16 bits de type dsPIC33EP 100 pins : il est le cœur de contrôle du robot et possède un vaste inventaire de périphériques internes permettant de réaliser à la fois le défi machine 2018 ainsi que servir de plateforme de développement pour les futures délégations machines de Sherbrooke. Voici l'explication en détail des sous-systèmes du circuit de contrôle.
- Choix du microcontrôleur
Le microcontrôleur sélectionné (dsPIC33EP512GM310) fait partie de la famille haute gamme des dsPIC : il comporte un set de périphériques riche en intégration, en plus d'avoir suffisamment de mémoire ROM et RAM pour stocker plusieurs fenêtres d'interfaces tactiles ainsi qu'une quantité imposante de code. Particulièrement :
- Fréquence d'horloge jusqu'à 140MHz : 70MIPS (millions d'instructions/sec)
- 12 canaux PWM indépendants à 7.14 ns de résolution
- 3 Ports SPI indépendants dont 1 fonctionnant à 25Mbps (pour l'écran)
- 4 Ports UART indépendants
- 21 timers indépendants permettant de séquencer le code (Round-Robin)
- 2 Entrées QEI hardware
- 4 canaux DMA permettant de libérer le CPU des mouvements de données en mémoire (particulièrement utile pour le UART et le SPI)
- 512kb de ROM et 48kb de RAM
- Change-notice interrupt configurable sur tout les IO
En plus de posséder tous ces périphériques, le microcontrôleur possède la capacité de “remapper” les entrées / sorties sur à peu près n'importe quelle pin physique : ceci a été très utile pour le routing de la carte ainsi que pour isoler des blocs de signaux ensembles sur des ports adjacents.
- Circuit de conditionnement des drives de moteur.
Les drives de moteurs sélectionnés sont des Pololu Simple Motor Controller, contrôlés par une tension analogue variant entre 0 et 3,3V. Une tension de 1.65V arrête le moteur, le fait avancé à pleine vitesse avant à 0V ou pleine vitesse arrière à 3,3V : il faut donc un mécanisme prévenant le départ des moteurs lors de la programmation du microcontrôleur (fréquent en phase de développement). Le circuit de conditionnement est donc basé sur un DAC 12bits SPI de type MCP4922, piloté par une tension référencé à 3.3V isolée de l'alimentation principale. La tension analogue passe ensuite dans une switch électronique SPDT relié de 1 à la sortie analogue du DAC et de 2 à une tension fixe de 1.65V : l'utilisateur doit activer la switch dans le code pour prendre le contrôle des moteurs, sinon ils sont par défaut à l'arrêt au démarrage. Le système est dupliqué pour le contrôle de 8 moteurs indépendants : il y a donc 4 DAC 12 bit partageant le port SPI2 à 15mbps ainsi que 2 switch électronique. On ferme la boucle de contrôle des moteurs avec des encodeurs QEI permettant de connaître la direction, position et vitesse du robot : il est donc possible d'asservir la direction et la position pour déplacer le robot dans le plan XY sans contrôle actif de l'utilisateur.
- Circuit de conditionnement des PWM
L'alimentation principale de la carte est à 3.3V et les servo moteurs fonctionnent majoritairement à 5V. Le choix d'avoir un level shifterpour chacun des canaux PWM permet de soit le laisser à 3.3V en ne populant pas les pieces, ou encore de le shifter vers +5V pour le contrôle des servo. De plus, une alimentation séparée 5V_S permet de fournir plus de 1.5A à l'ensemble des 12 servo moteurs présents sur le robot.
- Circuit de conditionnement des capteurs de distance analogiques
Les capteurs de distance sont très utiles pour se repérer dans l'espace : dans le cas de notre plateforme robotique, il est possible d'en brancher jusqu'à 8 d’entre eux. Un convertisseur ADC 12 bit SPI MCP3208, placé sur le port SPI3, permet en premier lieu d'obtenir une représentation numérique de la distance. Ensuite, à l'aide d'un potentiomètre I2C (AD5254), on génère une référence analogue permettant de définir un seuil de distance minimal à atteindre avant de changer l'état de la sortie. La référence variable, ainsi que la sortie analogue du capteur de distance, entrent dans un comparateur (LP2901) à sorties collecteur ouvert. Ce système permet de définir un seuil en CM à atteindre avant que le PIC ne déclenche une interruption et permette, par exemple, de stopper d'urgence un mouvement ayant dépassé une limite en portée.
En rouge, la référence analogue variable sur la courbe de distance des capteurs analogiques GP2Y0A51SK0F
L'interface du ADC sur le port SPI3
- Les potentiomètres I2C
- Les comparateurs et les sorties numériques à collecteur ouvert
- Microcontrôleur, alimentation et sous-circuits simples
Le microcontrôleur possède 100 pins, la majorité d'entre elles étant “remappeable” : un fichier détaillé des IO et de leurs connections a été élaboré pour assurer une compatibilité à 100% des placements et du routing des pins. L'alimentation de la carte est basé sur des alimentations switching pour générer le +5V, +5V_S et le +3,3V. Des LED, boutons et points de test ont été ajoutés pour permettre à l'usager de dépanner efficacement la plateforme. Les interfaces QEI sont branchés sur des entrées “Change Input Notification” pour permettre une saine gestion du calcul de la vitesse, de la position actuelle et de la direction de chacun des 8 moteurs par interruption à haute-priorité, alors qu'un IO expander 8bit I2C (MCP23008) permet de brancher 8 killswitch externes ou tout autre périphérique IO à 3.3V. Finalement, un connecteur pour un écran tactile capacitif embarquant le contrôleur de FTDIchip FT813 est disponible et a permis de créer des interfaces de debug graphiques pour l'affichage, la gestion et le dépannage de la plateforme de manière visuelle : boutons tactiles, sliders, affichage de registres, de compteurs d'état; son utilisation s'est avérée cruciale pour le développement rapide des sous-systèmes électroniques.
- Le dsPIC et ses condensateurs de découplages
- Les IO’s et le IO expander
- Le circuit d'alimentation
- Les encodeurs QEI avec leurs diviseurs de tension 5->3.3V
- L'interface vers le FT813
- Les points de tests et les connecteurs d'expansion
Ci-bas, les différentes couches du PCB:
- Top
- Bottom
- Soldermask Top
- Soldermask Bottom
- Inner 1 (3,3V)
- Inner 2 (GND)
- Silkscreen Top
- Silkscreen Bottom
- La carte avec l'écran LCD tactile :
Code de la plateforme
La totalité du code de la plateforme fut écrit en C sur MPLab X avec le compilateur XC16. L'utilisation intensive de structures permet de réduire la complexité du code et d'instancier directement la quantité de modules utilisés sur la plateforme : la taille finale du code dépend donc de la quantité de ressources utilisés. Le robot ne répond qu'aux commandes qu'il considère comme valide après la réception des 6 octets de la trame d'interface et n'est qu'un vulgaire périphérique Read/Write aux yeux de l'ordinateur : il modifie son état lors de la réception d'une trame d'écriture ou renvoie son état lors de la réception d'une trame de lecture. La plateforme compte environ 12 000 lignes de code.
- Exemple 1 : Driver UART, interruption et initialisation.
- Exemple 2 : Driver SPI, interruption et fonction d'écriture
Conclusion et remerciements
La machine de Sherbrooke a remporté la 1ère place à la compétition grâce à l'innovation présente dans tous les aspects du robot : que ce soit du côté mécanique, électrique ou informatique, chacun des membres a trimé dur pour concevoir des systèmes à la hauteur de nos attentes. Le défi 2018 a permis a chacun d'entres-nous de travailler leurs aptitudes en design et en gestion, de réaliser une machine adapté au défi en plus de conserver une version fonctionnelle d'un robot capable de manipuler librement des objets dans l'espace grâce aux bras asservis. L'apprentissage réalisé lors de ces 4 mois de travail est un atout important à notre formation universitaire, et cette victoire permet de faire rayonner l'Université de Sherbrooke, la Faculté de Génie ainsi que les Jeux de Génie de Sherbrooke sur l'ensemble de la province #sherbylove.
Les différentes vues du prototype final :
- Vue de devant
- Vue de côté
- Vue de haut
- Vue de dessous
L'équipe 2018 (de gauche à droite) :
Mathieu Gervais, Génie Mécanique, Promotion 60
Gabriel Charland, Génie Mécanique, Promotion 60
Jean-François Bilodeau, Génie Électrique, Promotion 61
Maxime Rodier, Génie Informatique, Promotion 61
Raphael Léandre, Génie Mécanique, Promotion 60
Simon Milhomme, Génie Électrique, Promotion 61 (VP machine)
Dominic Otis, Organisateur de la compétition machine 2018
L'équipe voudrait remercier les commanditaires de la délégation de Sherbrooke ainsi que l'ensemble des délégations pour le support et le love, sans qui cette belle réalisation n'aurait pas été possible! #faiteslesjeux
Félicitation aussi à l'ensemble des équipes machines qui ont donnés corps et âmes pour offrir une compétition relevé encore une fois cette année! La diversité des machines et des solutions apportées fut grandiose et couronnée de succès lors de la présentation publique et de la compétition! Sherby vous envoie beaucoup de love! #faiteslamachine
Finalement, merci aux commanditaires qui supportent financièrement les jeux et félicitation au comité organisateur et au comité machine pour le défi de cette année et pour l'organisation exceptionnelle que représente les Jeux de Génie. Merci 1000 fois! #faitesleco
Pour voir et revoir la compétition :
https://www.facebook.com/jeuxdegenie/videos/1567765113316056/
Pour consulter le cahier machine remis en septembre aux équipes :
http://jeuxdegenie.qc.ca/jdg/2018/Assets/doc/Cahier_machine_jdg18.pdf
Pour en apprendre d'avantage sur les Jeux de Génie du Québec :
http://jeuxdegenie.qc.ca/jdg/2018/
Si vous avez aimé l'article, laissez votre souris quelques instants dans le cercle ci-bas et n'hésitez pas à partager!
Pour toutes questions, communiquer à l'adresse suivante :
Jean-Francois.Bilodeau2@usherbrooke.ca