« Battle robotique Alstom » : différence entre les versions

De Wiki Clubelek
Clementin.granier1 (discussion | contributions)
Aucun résumé des modifications
Clementin.granier1 (discussion | contributions)
Aucun résumé des modifications
 
Ligne 52 : Ligne 52 :


Un conseil pour que ce soit plus tolérable : vous pouvez coder sur VSCode et copier/coller votre code dans l'interface. Pour avoir l'autocomplétion, j'ai ajouté un fichier avec toutes les fonctions que j'ai trouvé ici : https://github.com/Bdanilko/EdPy/blob/master/src/EdPy.py
Un conseil pour que ce soit plus tolérable : vous pouvez coder sur VSCode et copier/coller votre code dans l'interface. Pour avoir l'autocomplétion, j'ai ajouté un fichier avec toutes les fonctions que j'ai trouvé ici : https://github.com/Bdanilko/EdPy/blob/master/src/EdPy.py
Faites un git et prenez plusieurs PC, quand vous faites une maj et que vous devez patch tous les robots à 3 minutes du démarrage de la manche vous serez contents d'êtres plusieurs sur le coup. => Là rentre en jeu la numérotation des robots et une feuille avec la liste des robots qui ont étés patch.


== Les conseils généraux ==
== Les conseils généraux ==

Dernière version du 15 mai 2026 à 19:28

Introduction

Chaque année depuis 2024, Alstom organise une Battle Robotique avec plusieurs écoles Lyonnaises. Elle a lieu vers mai dans leurs locaux (vers vaulx-en-velin, compter une bonne demi-heure en vélo pour y aller).

Cette page a pour vocation de recenser les conseils pour faire le meilleur score !

Détails de la compétition

En 2024 et 2025, le jour J se présentait comme trois manches avec un terrain qui s'agrandit entre chaque manche. Vous avez environ 5 minutes par manche, et 45 minutes entre deux manches (+ 5 minute par autre équipe qui passe). L'objectif est de marquer le plus de points (en s'arrêtant aux bonnes gares) en en perdant le moins (pas de sortie de voie, pas d'accident).

Ah et au fait il y a pas le droit à de l'électronique en plus sur le terrain, donc tout espoir de feu de signalisation part à la poubelle.

Il y a un "kickoff" qui sert à QUE DALLE, juste ils vous expliquent ce que je vous ai dit en 1 paragraphe. Mais bon il faut y aller quand même, mais si vous avez cours vous emmerdez pas.

Le cash prize va sûrement changer, 2024 et 2025 c'était 1000 euros pour les premiers, puis 500 pour les autres (mais on a volé de la colle UHU donc techniquement on a plus gagné que les 3e et 4e)

Les robots

Le coupable 🖕

Sauf changement, Alstom utilise des petits bangers de robots qui s'appellent les Edison. (/s évidemment ils sont rincés du cul).

Vous en aurez genre 3 pour préparer et 8 le jour de la compétition, ou un truc du genre.

Leurs specs

  • 2 récepteurs IR (droite/gauche)
  • 2 émetteur IR (droite/gauche)
  • 1 buzzer
  • 2 photorésistances (droite/gauche)
  • 1 capteur de suivi de ligne
  • 2 LEDs (droite/gauche)
  • 2 moteurs CC en boucle ouverte

Et c'est tout.

Dans l'idée c'est pas mal, en revanche il est impossible de les faire communiquer entre eux. Oui, même votre super idée de protocole de communication mesh en infrarouge avec correction d'erreur qui marche super au club. Il y a beaucoup trop d'interférences IR le jour de la compétition, la range max est de 3 cm à tout péter.

De plus, le capteur suivi de ligne est utilisable uniquement en 0 ou 1. Il renvoie une valeur analogique, mais ca varie tellement avec l'éclairage et l'état de la piste (les roues des robots font des traces sur le tapis) que vous allez juste galérer pour rien.

Ces conseils sont donnés après deux années d'expérience avec ces robots de merde, et environ 1200 lignes de code qui essaie de les faire moins puer leur mère, soldées à chaque fois par un échec cuisant et une réecriture du code en 20 lignes.

Leurs batteries font changer la vitesse des moteurs donc gardez les tous les plus chargés possibles sinon ils risquent de se rattraper.

Le code

Pour programmer ces robots, vous ferez la connaissance de EdPy, qui est je pense le pire language que j'ai jamais utilisé (et j'ai fait du brainfuck sur papier un jour). Globalement c'est du python en moins bien. Vous ne pourrez pas les flash depuis autre chose que leur interface de merde.

Les limitations de EdPy

  • Un seul fichier
  • Pas de classe
  • Pas de liste 2D (donc pas de liste de string)
  • Plein d'autre trucs mais j'avoue flemme de les lister

Bon le conseil principal que je peux vous donner : faites au plus simple. Utilisez le suivi de ligne le plus simple possible, ne communiquez pas entre les robots, hardcodez le plus possible.

Un conseil pour que ce soit plus tolérable : vous pouvez coder sur VSCode et copier/coller votre code dans l'interface. Pour avoir l'autocomplétion, j'ai ajouté un fichier avec toutes les fonctions que j'ai trouvé ici : https://github.com/Bdanilko/EdPy/blob/master/src/EdPy.py

Faites un git et prenez plusieurs PC, quand vous faites une maj et que vous devez patch tous les robots à 3 minutes du démarrage de la manche vous serez contents d'êtres plusieurs sur le coup. => Là rentre en jeu la numérotation des robots et une feuille avec la liste des robots qui ont étés patch.

Les conseils généraux

Le lieu

  • L'éclairage change au fil de la journée : si vous êtes à côté de la baie vitrée, vous aurez un soleil rasant pour la dernière manche (=> attention à recalibrer les capteurs IR au fil du temps)
  • Le buffet est bien mais se fait raid rapidement, après 16h il reste plus grand chose.
  • Envoyez une personne voir les manches des autres équipes, c'est un bon moyen de spot des soucis pour votre manche (vous aurez max 15 min pour les fix par contre)
  • Une multiprise est fournie mais pas de chargeur USB. Prévoyez des hub et des chargeurs en rab pour garder tous les robots à 100% avant chaque manche
  • Vous aurez pas mal de robots, numérotez les dès le départ pour pas oublier d'en update/charger un. Vous êtes pas obligés de tous les utiliser à chaque fois, ca peut être renta d'en retirer pour éviter que ce soit le zbeul.

Les stratégies

  • Les capteurs IR marchent pas si mal en détection d'obstacle, une fois calibrés. Pour les calibrer, il faut scanner le code barre Calibrate Obstacle Detection ici : https://meetedison.com/content/Edison-robot-barcodes.pdf . Imprimez cette feuille et ramenez la, ca sauve des vies.
  • Le capteur de luminosité marche super pour détecter les gares : il suffit de faire un toit qui couvre le capteur et de détecter le changement de luminosité. Le toit doit être à max 1cm du robot en hauteur (sinon le soleil se glisse dessous en fin de journée). Les supports du toit doivent être suffisamment écartés pour pas que le robot se les bouffe.
  • Vous pouvez calibrer la vitesse des roues pour presque avoir l'impression qu'il y a un PID derrière le suivi de ligne.
  • Si vous voulez aller vite, faire deux fois Ed.DriveRightMotor(Ed.FORWARD, Ed.SPEED_FULL , Ed.DISTANCE_UNLIMITED) va plus vite qu'une seule fois.
  • Pour les embranchements, vous pouvez choisir leur direction en changeant la ligne 16 pour faire un suivi de ligne à gauche ou à droite
  • Les deux dernières années on a recouvert les robots de scotch alu pour "améliorer la détection IR" mais je pense c'est placebo, par contre ca faisait qu'ils étaient vachement stylés et tout le monde trouvait ca drôle donc possiblement à continuer.
  • Une "cape" qui augmente la taille verticale des robots aide à la détection par l'arrière (+ points de swag)

Le code de 2025

Nous avions le droit a des robots "gares", qui avaient des tubes à la place des roues et qui faisaient barrière. Il fallait donc que les robots "trains" s'arrêtent avant, puis continuent lorsque la barrière est levée. Nous avions une solution ultra complexe qui a pas marché du tout, et donc en 45 minutes entre les deux manches, nous avons fait ca pour les trains :

import Ed

Ed.EdisonVersion = Ed.V3

Ed.DistanceUnits = Ed.CM
Ed.Tempo = Ed.TEMPO_MEDIUM

Ed.TimeWait(250, Ed.TIME_MILLISECONDS)
Ed.ObstacleDetectionBeam(Ed.ON)

Ed.LineTrackerLed(Ed.ON)

driving = True;
while True:
    if driving :
        if Ed.ReadLineState()==Ed.LINE_ON_WHITE :
            Ed.DriveLeftMotor(Ed.STOP, Ed.SPEED_1, Ed.DISTANCE_UNLIMITED)
            Ed.DriveRightMotor(Ed.FORWARD, Ed.SPEED_8 , Ed.DISTANCE_UNLIMITED)
        else :
            Ed.DriveLeftMotor(Ed.FORWARD, Ed.SPEED_FULL, Ed.DISTANCE_UNLIMITED)
            Ed.DriveRightMotor(Ed.STOP, Ed.SPEED_1, Ed.DISTANCE_UNLIMITED)
    else :
        Ed.Drive(Ed.STOP, Ed.SPEED_FULL, Ed.DISTANCE_UNLIMITED)
    if Ed.ReadObstacleDetection() > 0 :
        driving = False
    else :
        driving = True
        
    Ed.ReadObstacleDetection()

Dans l'idée ils suivent la ligne tant qu'ils ont pas d'obstacle. Les différentes vitesses ont étées ajustées par la méthode scientifique pour avoir les meilleures perfs possibles (c'est faux on a fait au pif). Pour s'arrêter aux gares, nous avions mis des bouts de papier sur les barrières qu'ils détectaient. Mais comment faisions-nous pour que les gares s'ouvrent toutes en même temps et laissent passer les robots ? Très simple :

import Ed
Ed.DistanceUnits = Ed.CM
Ed.Tempo = Ed.TEMPO_MEDIUM
Ed.EdisonVersion = Ed.V3


def openBarrier() :
    Ed.Drive(Ed.SPIN_LEFT, Ed.SPEED_4, 47)

def closeBarriers() :
    Ed.Drive(Ed.SPIN_RIGHT, Ed.SPEED_4, 47)

Ed.TimeWait(4, Ed.TIME_SECONDS)
while True:
    openBarrier()
    Ed.TimeWait(500, Ed.TIME_MILLISECONDS);
    closeBarriers();
    Ed.TimeWait(8, Ed.TIME_SECONDS);

Ouais c'est tout, juste on hardcodait des valeurs au pif. Ca a bien marché, on est passés de big derniers à deuxième en jouant que deux manches sur trois.