Quelques mots sur nos méthodes d'implémentation et mise au point.
Un robot de ce type (même pour un PAMI) c'est un concentré de technologies, de métiers et de périphériques. On est en pratique peu des les équipes pour gérer beaucoup de choses. Pour éviter que tout nous pète à la figure nous construisons la maison progressivement par le bas en assurant la solidité des bases avant de passer aux étages supérieurs. Ca peut paraitre trivial mais face un un planning contraint c'est pas toujours aussi facile de se donner le temps de bien construire. Prendre des raccourcis et ne pas traiter les problèmes c'est se constituer une dette technique et comme toute dette il faudra la payer, et Murphy oblige, ce sera à la coupe. Ca devient très difficile de débugger un système de cette complexité si on ne fait confiance à rien.
La présentation est séquentielle par étapes arbitraires pour le besoin de l'explication la vraie vie est plus entremêlée que ça, si ça marche on laisse glisser, si c'est le bordel on revient sur un truc un peu bête et méchant bottom up. Dans une année Eurobot y'a en gros 7 mois, on passe 1 mois en brainstorming, création/commande de table/élément de jeu, 3 mois simu et designs, 1 mois breadboard, 1 mois intégration et 1 mois sur le robot. C'est déjà très court parce que si un truc merde, l'itération est difficile à placer (alors si ça merde 2 fois vous imaginez ?...).
Etape 1: Simu (3 mois)
Réalisation des logiciels en simulation (en pratique les périphériques sont simulés de sorte par exemple que la commande d'un moteur est envoyée dans sa mesure odo). On met au point l'infrastructure, notamment env de dev et outils de débug (gdb, logs, télémétrie, ...). Permettez d'insister sur le fait que tout se joue à la coupe quand on découvre les vraies emmerdes des tables/objets finaux, et là il faudra être réactif. Pour être réactif il faut de bon outils de confiance et des membres entrainés à les utiliser.
On s'assure également que quand on suit une trajectoire en simu, le robot la suit en simu SANS GAINS ! Sinon c'est qu'il y a des bugs dans les maths et il faut les chercher sinon c'est le PID qui va le porter et ça enlève de la marge de stabilité et performance. Ca permet de vérifier les timings des stratégies et de se rendre compte si un robot est trop chargé ou pas (et donc impact sur le nombre/répartition actionneurs).
La simu ça permet aussi de travailler sans les cartes élecs qui sont en général pas là (dit autrement on découple les plannings du SW de celui des autres métiers et donc on prapage pas les emmerdes de l'un à l'autre). En parrallèle méca et élec font leur designs. Egalement quand on intègrera plus tard et que ça coince, on pourra retourner vérifier si le problème existe en simu ou pas et ainsi trouver rapidement le métier en cause. Pour chercher une aiguille dans une motte de foin: on fait des tas de foins plus petits.
Etape 2: Breadboard (1 mois)
Essais sur une carte de dev, avec des cartes d'adaptations ou de l'élec sur carte à trous avec les périphériques. Ca permet au SW de dev les drivers de la carte (driver GPIO, I2C, CAN, UART,...) et les controlleurs de périphériques (Moteur, odo, lidar, ...). Souvent on va détecter des trucs bêtes genre les pullup/down manquantes et les difficultés des datasheets (sujets pas expliqués, erreurs/bug, siouxeries introduisant des contraintes). De ça on voit si on peut rattraper le coup ou s'il faut changer le périphérique ou son élec de commande.
Cette étape est importante, nécessaire et fait gagner du temps. Je ne compte les projets pro et perso autour de moi qui se disent "on a qu'à le faire sur le robot directement ça ira plus vite on gagne une étape". NOOOON ! Ca finit toujours mal, c'est plus long de travailler sur une machine complète (ex: gestion du power ou de la safety à faire avant d'utiliser les périphs, séquences de boot machine, ...).
Ca permet souvent de travailler en sécurité parce qu'il n'y a pas de charges utiles (genre un bras manipulateur), c'est plus pratique pratique à bricoler et si vous faite une bétise vous évitez de cramer des périphériques non concernés par vos tests (chers en général) qui sont là et qui n'ont rien demandé. Et puis si on se rend compte que ça marche pas, faut refaire le robot (parce qu'en général le nouveau périph a le bon gout d'avoir des tensions différentes et une taille qui passe pas dans le chassis). On évite aussi de se prendre tous les problèmes liés à la cohabitation parce qu'on va démarrer les périphériques un par un.
Etape 3: intégration robot (1 mois)
Le robot est monté pour la première fois complètement et on va commencer à l'utiliser en douceur (vitesses et accélérations faibles). On met au point les séquences de démarre/homing/safety/configuration. On identifie les problèmes liés à la cohabitation (han, ça marchait avec un moteur et pas avec 2 en fait).
On règle les timing. Là aussi étape importante il faut vérifier dans le détail que les temps sont respectés (valeur d'une seconde, fréquence des clocks, bagotage d'une GPIO sur oscillo, durée des boucles périodiques et temps utilisé/restant). C'est hyper important pour les précisions des boucles ouvertes et tant que la boucle ouverte n'est pas bonne, ça ne sert à rien de démarrer l'asserv. En général ça s'entend à l'oreille sur des consignes de rampe d'actionneur si ça "vibre"/"grésille". C'est aussi important que quand vous demandez d'attendre 200ms bah c'est pas 600. Je vois souvent des devs confiants là dessus sans vérifier, et je vois souvent dans les projets des problèmes qui viennent de ces tests pas faits.
En gros on va commencer à faire des trapèzes de vitesses et là le robot il doit faire à qque poullième près une ligne droite de la bonne longueur (sur 30cm moins d'1cm d'erreur et droit à l'oeil). En général sans calibrer sur une méca propre, une élec en place et un SW bien piloté ça va bien se passer. Suivant les capteurs dispo on peut tracer des courbes et comparer, sinon à l'oreille ça fait beaucoup de choses.
On roule doucement pendant ces phases, tout le monde a eu du mal à arriver à l'heure donc on éviter de tout péter tout de suite. L'objectif c'est que tous les métiers lèvent leurs risques. La bête doit être docile et vous devez avoir confiance en elle à l'issue de cette étape. Exemple ici elle est sans crainte sur mon bureau sans risque de partir à fond par terre. Sur la vidéo qui suit on voit que le robot dépasse et revient en arrière, c'est pas normal sur une boucle ouverte donc débug:
On règle les différentes parties du contrôle en augmentant progressivement les performances en poussant plus loin que ce qui est prévu. Ca peut être destructif mais vaut mieux le savoir tout de suite. Normalement tous les métiers auront pris des marges (heiiiiiiin) et donc ça devrait bien se passer.
De façon générale on traite TOUS les problèmes qu'on voit (au moins on identifie clairement le prob et on choisit de vivre avec, ce qui est différent de le subir quand on a rien compris ;-p).
Sur la vidéo suivante on voit un petit mouvement à très fortes accélérations. De fait je suis passé sur une table de test avec des bords parce que ça peut partir très vite à tout moment sans que je puisse l'attraper (d'autant plus vrai quand on est tout seul). Les accélérations sont déraisonnables et on conmme à entendre à l'oreille que ça va pas (d'où l'importance d'avoir déjà enlevé les autres parasites auditifs). On entend le "clac" du chassis qui se repose violemment après un wheeling. On sait qu'on atteint les limites ça donne une idée du max et on a vérifié (entre autre) que les contrôlleurs moteurs n'explosent pas et ne sont pas à 200°C. On voit aussi que le robot fait pas des aller retours de la même distance, il faut chercher et débugger ça.
Comme expliqué plus haut dans le post, avoir plusieurs robot identique ça permet des tests comparatifs, notamment pour les perfs: course entre version A et B des réglages:
Etape 4: Utilisation robot (1 mois)
Le robot est mature, les membres de l'équipe et leur design aussi, on peut commencer à vraiment utiliser le robot et mettre au point des stratégies. Sur la video qui suit le rush de la superstar.
Ca a nécessité au préalable des essais avec les robots voisins pour mettre au point la séquence de sortie de la zone PAMI. On utilisait les capteurs sur les côtés initialement prévu pour le suivi de mur pour voir quand le Dragster était parti (avec BIEN SUR un timeout au cas où il ne parte pas HEIIIIN, ce qui n'arrive JAMAIIIS n'est ce pas ?). J'imaginais pas en arriver là mais en pratique ça nous a fait gagner énormément de temps/fiabilité sur les séquence de départ.
On voit aussi une idée qui consiste à "rebondir" contre le mur. C'était efficace mais pas reproductible. En haut de la pente on se recale parce que pour les premiers matchs en l'absence de retours sur les vraies table on joue la carte de la sécurité. Comme on avait pas de capteur de contact on doit meuler la table pendant un moment pour s'assurer d'être dans le mur. Comme c'est pas top on a implémenté plus tard une détection de bordure avec les capteurs sous le robot pour ne plus avoir à se recaler (et là encore avec des sécurité pour que si on détecte jamais de bordure on s'arrête quand même).
L'oeil aguerit aura vu qu'il y a des délais inter ordre un peu longs c'est volontaire c'est pour s'assurer que le robot est effectivement arrêté, on n'a pas eu le temps d'enlever ça mais l'année prochaine ça enchainera plus vite. A noter qu'on a vérifié bien sûr qu'on empilait pas les délais entre les 12 couches d'architecture logicielle qui donne un ordre.
- Mike118 aime ceci