projets:acheves:coupe2017

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
projets:acheves:coupe2017 [2017/05/28 21:50] hackensprojets:acheves:coupe2017 [2022/05/05 07:40] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
-Coupe de robotique 2017+Coupe de Robotique 2017
 ======================= =======================
  
Ligne 14: Ligne 14:
 Tous les fichiers (blender, circuits, code du GUI et des robots) sont sur [[https://git.eleves.ens.fr/hackens/coupe2017]] Tous les fichiers (blender, circuits, code du GUI et des robots) sont sur [[https://git.eleves.ens.fr/hackens/coupe2017]]
  
-Petit robot +====== Petit robot ======
------------+
  
-====== Structure ======+ 
 +===== Structure ===== 
 + 
 +{{ :projets:acheves:ensemble.png?432 |}} 
 + 
 +[[https://youtu.be/8Q8-2TaKp28]]
  
 Mission : récupérer les cylindres de diamètre 63mm et hauteur 100mm. Mission : récupérer les cylindres de diamètre 63mm et hauteur 100mm.
Ligne 25: Ligne 29:
 Support en MDF, deux plaques de MDF 6mm horizontales quasi-identiques séparées de 10cm, et plaques de MDF 3mm verticales comme support. Support en MDF, deux plaques de MDF 6mm horizontales quasi-identiques séparées de 10cm, et plaques de MDF 3mm verticales comme support.
  
-====== Fonctions ======+Coque faire de panneaux transparents, maintenus ensemble par des petites pièces imprimées en 3D, et glissée sur la structure. Clipsée sur la planche de MDF supérieure ainsi que sur le haut du couloir vertical. 
 +===== Fonctions =====
  
 La partie antérieure du couloir inférieur (niveau sol) est entourée par une chenille d'un côté, et une pushbar sur ressorts de l'autre côté. La partie antérieure du couloir inférieur (niveau sol) est entourée par une chenille d'un côté, et une pushbar sur ressorts de l'autre côté.
Ligne 31: Ligne 36:
 La partie postérieure du couloir inférieur est entourée par une plaque de MDF 3mm d'un côté, et d'un ascenseur de l'autre côté. L'ascenseur permet de faire monter les cylindres dans la pile verticale. Deux goupilles mobiles sortant de la plaque de MDF opposée permettent ensuite de bloquer les cylindres de la pile. La partie postérieure du couloir inférieur est entourée par une plaque de MDF 3mm d'un côté, et d'un ascenseur de l'autre côté. L'ascenseur permet de faire monter les cylindres dans la pile verticale. Deux goupilles mobiles sortant de la plaque de MDF opposée permettent ensuite de bloquer les cylindres de la pile.
  
-====== Actionneurs ======+===== Actionneurs =====
  
 Tous les actionneurs se situent à l'étage inférieur. Tous les actionneurs se situent à l'étage inférieur.
  
-===== Pince avant =====+==== Pince avant ====
  
 {{ :projets:acheves:pince.png?400 |}} {{ :projets:acheves:pince.png?400 |}}
Ligne 44: Ligne 49:
  
  
-===== Chenille de préhension des cylindres =====+==== Chenille de préhension des cylindres ====
  
 {{ :projets:acheves:courroie.png?400 |}} {{ :projets:acheves:courroie.png?400 |}}
Ligne 52: Ligne 57:
 Pour garder le couloir à cylindres libre de tout obstacle, on a dû déporter l'actionneur de la chenille à côté de la roue d'entraînement. Attention aux servos à rotation continue, c'est un peu galère à contrôler (ils ne s'arrêtent pas juste en désactivant leur pin de contrôle) et ça va pas très vite. Pour transmettre le moment du servo à l'axe de la chenille on a utilisé un morceau de courroie d'imprimante 3D. Attention à faire exactement le bon pas sur les roues dentées, à refermer proprement la courroie, et à tenir la roue dentée du servo des deux côtés (sinon la vis de fixation à l'axe du servo force beaucoup) Pour garder le couloir à cylindres libre de tout obstacle, on a dû déporter l'actionneur de la chenille à côté de la roue d'entraînement. Attention aux servos à rotation continue, c'est un peu galère à contrôler (ils ne s'arrêtent pas juste en désactivant leur pin de contrôle) et ça va pas très vite. Pour transmettre le moment du servo à l'axe de la chenille on a utilisé un morceau de courroie d'imprimante 3D. Attention à faire exactement le bon pas sur les roues dentées, à refermer proprement la courroie, et à tenir la roue dentée du servo des deux côtés (sinon la vis de fixation à l'axe du servo force beaucoup)
  
-===== Ascenseur à cylindres =====+==== Ascenseur à cylindres ====
  
 {{ :projets:acheves:ascenseur.png?400 |}} {{ :projets:acheves:ascenseur.png?400 |}}
Ligne 62: Ligne 67:
 Un microrupteur détecte la position haute de l'assemblage. Un microrupteur détecte la position haute de l'assemblage.
  
-===== Goupille de maintien des cylindres en hauteur =====+==== Goupille de maintien des cylindres en hauteur ====
  
 {{ :projets:acheves:lock.png?400 |}} {{ :projets:acheves:lock.png?400 |}}
Ligne 74: Ligne 79:
 Problème : les servos consomment en permanence une fois verrouillés. Solution : faire en sorte que les bras des servos se bloquent dans les coins de la pièce une fois verrouillés. Problème : les servos consomment en permanence une fois verrouillés. Solution : faire en sorte que les bras des servos se bloquent dans les coins de la pièce une fois verrouillés.
  
-===== Base mobile =====+==== Base mobile ====
  
 {{ :projets:acheves:mobile.png?400 |}} {{ :projets:acheves:mobile.png?400 |}}
Ligne 82: Ligne 87:
 Les supports de fixation avaient l'air un peu fragiles, et les roues avaient tendance à pencher un peu parfois, mais ça a tenu jusqu'au bout sans problème et avec peu de jeu. Les supports de fixation avaient l'air un peu fragiles, et les roues avaient tendance à pencher un peu parfois, mais ça a tenu jusqu'au bout sans problème et avec peu de jeu.
  
-On a aussi placé deux billes folles sous le robot. Malheureusement le design permettait très peu de possibilités, aussi on les a placés du côté gauche uniquement, très (trop ?) près du moteur gauche. À noter que les petites billes folles (diamètre de perçage 12mm si je me souviens bien) marchent très bien. On a percé la planche inférieure sur 2mm d'épaisseur avant de les coller en place.+On a aussi placé deux billes folles sous le robot (non représentées ici). Malheureusement le design permettait très peu de possibilités, aussi on les a placés du côté gauche uniquement, très (trop ?) près du moteur gauche. À noter que les petites billes folles (diamètre de perçage 12mm si je me souviens bien) marchent très bien. On a percé la planche inférieure sur 2mm d'épaisseur avant de les coller en place
 + 
 +==== Système de lancement de l'"engin spatial" ==== 
 + 
 +{{ :projets:acheves:engin_spatial.png?400 |}} 
 + 
 +Magnifique pièces imprimées en 3D, qui a bien marché à tous les coups même si on a eu un peu peur de la solidité de l'axe du servo. Propulsion à l'aide d'élastiques. Note : les élastiques ça casse facilement. 
 + 
 + 
 +===== Capteurs ===== 
 + 
 +==== Barrières IR pour localiser les cylindres ==== 
 + 
 +Une à l'avant du couloir, une à l'arrière 
 + 
 +==== Microrupteur de bout de course de en haut de l'ascenseur ==== 
 + 
 +On a collé un petit microrupteur, ça a marché très bien à tous les coups 
 + 
 +==== Microrupteur "tirette de départ" ==== 
 + 
 +Un bout de fil de fer plié en "U" qui entoure une microrupteur et que l'on retire avec une ficelle 
 + 
 +==== Radar de proximité ==== 
 + 
 +On a utilisé un radar avec des pins VCC, GND, TRIG, ECHO, qu'on a branché directement au FPGA. C'est beaucoup plus pratique que l'interface I2C qu'on avait en 2015. Bon après sans FPGA ça se serait compliqué un peu... Mais du coup on pouvait sampler le radar à >50Hz, faire du filtrage, une bascule de Schmitt, etc... 
 + 
 +===== Contrôle ===== 
 + 
 +On a utilisé plusieurs systèmes pour contrôler le petit robot 
 + 
 +==== Raspberry pi 3.0 ==== 
 + 
 +C'est génial parce que ça se connecte au wifi, on peut se ssh dessus, on peut lancer/tester des programmes facilement, debugger, etc... 
 + 
 +Il ne faut juste pas oublier de prendre le routeur de la cave, ou de lui apprendre à se connecter au wifi d'un portable, sinon c'est compliqué le jour J. Même si on prend le routeur, c'est pratique qu'il se connecte au wifi d'un portable, pour s'y connecter sur les tables de test. 
 + 
 +On a également fixé un petit écran tactile directement sur le rpi, ça a pris un peu de temps pour coder un GUI correct (en SDL) mais c'est bien pratique pour debugger (on l'utilisait pour contrôler/tester les servos et les capteurs essentiellement, et pour choisir la couleur de départ etc...). Quand on sera en finale (lol) ce sera pratique pour choisir la stratégie en fonction des adversaires. À noter également que le présentateur de la webtv a débuggé notre robot en direct en lisant le log qui s'affichait sur l'écran de la rpi. 
 + 
 +Architecture :  
 +  * Le programme qui contrôle le robot en match (./raspi) est indépendant, prend en argument la couleur de jeu, fait quelques tests (positionnement de l'ascenseur notamment) et se lance dès que la tirette est retirée. Si la tirette n'est pas présente, le programme se lance immédiatement 
 +  * ./raspi donne son log en output. On a utilisé un flux custom qui affiche l'heure (en ms depuis le lancement du programme) pour chaque ligne de log 
 +  * ./raspi essaye de se connecter avec un FIFO unix au GUI, et s'il y arrive, il envoie sa position à chaque fois qu'elle change, sous forme d'un message "Google Protocol Buffers" 
 +  * ./gui est lancé automatiquement au démarrage de la raspi, et s'affiche immédiatement. Un programme est chargé de relancer ./gui si on le ferme. ./gui permet de contrôler les servos, steppers, voir l'état des capteurs, puller automatiquement le code du git (et faire make automatiquement), choisir la couleur de l'équipe et lancer ./raspi. 
 +  * Une fois ./raspi lancé, ./gui ouvre une FIFO pour afficher en temps réel la position du robot, et affiche l'output de ./raspi dans une petite console. Il y a également un bouton abort sur l'écran. 
 + 
 +==== Arduino de contrôle des servos ==== 
 + 
 +Une Arduino nano est branchée sur le raspi avec un cable usb court. Cette arduino est branchée à une carte contrôlant les servos, et une carte contrôlant les capteurs. Le raspberry envoie des instructions en serial à l'arduino, et est également capable de la reflasher. L'arduino répond également en serial à la raspi. Certaines commandes permettent d'actionner plusieurs servos en séquence (par exemple actionner un servo jusqu'à ce qu'un capteur se déclencheà. 
 + 
 +Cette arduino est également responsable de lancer la fusée au bout de 90 secondes. Pour cela, nous avons implémenté une fonction delay2 et modifié toutes les boucles bloquantes pour vérifier un timer. On aurait peut-être dû utiliser un timer interrupt mais on ne savait pas comment faire et il n'y avait pas internet dans le hall des expos. 
 + 
 +==== FPGA/Arduino de contrôle des steppers ==== 
 + 
 +Voir le howto sur le papilio duo. En gros c'est une carte avec un fpga d'un côté, et un arduino de l'autre, qui partage une dizaine de ports. 
 + 
 +L'arduino est branché en serial sur la raspi, qui lui envoie des ordres synchrones ou asynchrones. L'arduino envoie ensuite via un registre à décalage les ordres au fpga, qui les exécute (essentiellement les ordres consistent à générer une suite d'impulsions pour les steppers, en effectuant une rampe d'accélération et de décélération pour effectuer une distance fixe). 
 + 
 +Dans l'état actuel, le robot peut uniquement avancer en ligne droite ou tourner sur place. 
 + 
 +On a eu plein de problèmes parce que le registre à décalage se... décalait. Prévoir un code correcteur d'erreurs robuste au décalage ? Ou alors vérifier les timings du FPGA (le diviseur en un tick d'horloge c'est très limite) 
 + 
 +Le fpga est également responsable de vérifier l'état du radar avec une bascule de schmitt, et de se mettre en pause s'il voit un obstacle. Ça aurait été mieux de faire une petite rampe de décélération quand on voit un obstacle pour éviter de glisser.
  
 +Bref avec tout ça on est assez précis, et on peut aller assez vite.
  
 +===== Alimentation =====
  
 +TODO
  • projets/acheves/coupe2017.1496008248.txt.gz
  • Dernière modification : 2022/05/05 07:40
  • (modification externe)