Catégories
ROBOCUP

ROBOCUP 2026 Maze

Stratégie de déplacement du robot dans le labyrinthe.

L’objectif est de permettre au robot de se déplacer tout seul dans un labyrinthe, sans se perdre, en utilisant une stratégie simple :

suivre le mur de droite et prendre en priorité les ouvertures à droite.

Principe général : suivre le mur de droite ou de gauche

Le robot imagine qu’il garde toujours sa main droite posée sur un mur.
S’il continue ainsi, il pourra explorer tout le labyrinthe sans rester bloqué.

Pour cela, le robot utilise des capteurs de distance pour savoir s’il y a un mur :

  • devant lui
  • à droite
  • à gauche

Se déplacer dans un couloir en suivant une Ligne imaginaire

Quand le robot est dans un couloir, il ne colle pas au mur :

  • il suit une ligne imaginaire parallèle au mur de droite
  • cette ligne se situe au centre du couloir

Cela permet :

  • d’éviter de toucher les murs
  • d’avancer droit

Le robot ajuste légèrement sa direction pour rester à la même distance du mur de droite et avance jusqu’à la fin du couloir

Dès que le capteur détecte un mur devant :

  • le robot s’arrête
  • cela signifie qu’il est arrivé à la fin du couloir ou à une intersection

Teste et affiche sur l’écran le niveau de batterie :

Si le niveau de batterie est trop faible le comportement du robot devient incohérent.

Quand le capteur ultrasonique n’arrive plus à mesurer, par exemple trop proche d’un mur, la valeur retournée est 300.

Télécharge et teste le robot dans le labyrinthe dans un couloir

Utilise le calcul de trajectoire PID du suivi de ligne :

Indique kp = 1 et kd = 0 pour l’instant

Télécharge et teste : Le robot va tout droit

Télécharge et teste : Le robot va à droite

Télécharge et teste : Le robot va à gauche

Modifie la valeur de kp entre 1.5 et 0.5, tu constateras que ton robot tourne plus ou moins fortement :

Suivi d’une ligne imaginaire au milieu du couloir

On imagine une ligne noire posée au milieu du couloir parallèle au mur droit du couloir. Le robot suit cette ligne en allant de droite à gauche comme pour le suivi d’une ligne noire.

  • largeur du couloir = 30 cm
  • écart de la ligne en prenant en compte la largeur du robot = 9 cm

Détail du suivi de ligne avec le capteur ultrasonique 2 sur le mur droit :

On image une ligne à 9cm (ecart_ligne) de la paroi de droite et d’une largeur de 3 cm. A droite de la ligne le robot tourne à gauche (position = -0.5à, sur la ligne il va tout droit (position = 0), à gauche de la ligne il tourne vers la droite (position = 0.5).

Télécharge et teste un couloir avec un mur à droite tout le long

Elimine les valeurs erronées :

Détail

Télécharge et teste

Essaye de suivre tout le labyrinthe, tourne en bout de couloir

En fonction des possibilités tourne à 90° en bout de couloir soit à droite, soit à gauche ou fait un demi-tour à 180°

Télécharge et teste

Le robot commence à suivre le labyrinthe avec quelques imperfection à corriger;

Problème 1 : le robot est trop proche des parois

Si le capteur ultrasonique de droite ou de gauche détecte une distance trop proche de la paroi, alors le robot recule en changeant de sens de direction pour essayer de se recentrer au milieu du couloir.

Détail pour détecter un rapprochement avec les parois de droite et de gauche :

Problème 2 : le robot reste collé à la paroi

Si le robot ne change pas de position pendant un certain temps, alors on essaye de le décoller de la paroi.

Problème 3 : le robot ne détecte pas toujours la bonne possibilité en fin de couloir

Parfois la mesure par le capteur ultrasonique est erronée. Pour éviter une erreur de direction suit à une mesure, la solution est de prendre plusieurs mesures afin valider la bonne direction à prendre :

Le robot est trop proche de la paroi en fin de couloir, on tente de reculer le robot :

On cumule les mesures pendant 3 secondes toute les 0.5 secondes

Après que le robot a effectué son quart de tour à gauche ou à droite, on vérifie de nouveau si une paroi est présente devant le robot :

Le code complet :

Problème 4 : Lorsque la paroi de droite est inexistante, le robot ne tourne pas suffisamment à droite ou tourne trop fort.

Modifie la valeur de kp :

Catégories
ROBOCUP

ROBOCUP 2026 Rescue line

Configure MBLOCK pour le suivi de ligne

Utilise le bouton extension

Rajoute ces deux éléments :

Premier essai de fonctionnement du MBOT

Premier téléchargement

Teste ton programme

Teste une programmation des moteurs

Teste ton programme

Essayons de programmer par étape le suivi de ligne

Affichons le niveau de batterie car si celle-ci est inférieure à un certain niveau, le comportement du robot devient incohérent :

Sous le lancement du MBOT CyberPi crée les variables suivantes :

  • vitesse_droite : pour gérer la vitesse du moteur EM1
  • vitesse_gauche : pour gérer la vitesse du moteur EM2
  • vitesse_maxi : vitesse maximum du robot
  • vitesse_mini : vitesse moyenne du robot
  • position : poids de la position du robot par rapport à la ligne noire
  • correction : correction à appliquer aux moteurs pour suivre la ligne noire

Gestion du bouton B pour lancer le suivi de ligne puis l’arrêter

Tester le bouton B , les leds s’allument en vert puis en rouge

Calcul la vitesse des moteurs en fonction de la position du robot par rapport à la ligne noire

Si le robot est à gauche de la ligne noire, il tourne à droite pour se recentrer sur la ligne :

Si le robot est à droite de la ligne noire, il tourne à gauche pour se recentrer sur la ligne :

Si le robot est centrer sur la ligne noire, il va tout droit :

Détail du calcul :

Ne pas oublier que les moteurs du MBOT sont inversés :

Teste pour vérifier que ton calcul est correct avec position = 0 pour aller tout droit :

Teste, le robot roule tout droit

Faire tourner le robot

Teste des valeurs de position de -2 à 2 :

Teste le robot pour qu’il tourne plus ou moins à gauche ou à droite avec des valeurs dans position entre -2 et 2

Une première version pour un Suivi de ligne

Utilise cette instruction pour la détection de la ligne noire :

Elle permet une détection par capteur L2, L1, R1, R2 :

Plus de détail de la gestion des capteurs :

Détection d’un virage par les capteurs extrêmes L2, D2 du Quad RGB du MBOT :

Capteur central ou L1 et R1 sur la ligne pour aller tout droit :

Détail du si :

Et les 2 capteurs L1 et R1 du Quad RGB du MBOT :

Teste le suivi de ligne

Tu peux rajouter plus de précision :

Plus de détail sur le rajout :

Modifie le suivi de ligne avec le calcul du PID

  • derivee : afin de suivre quand le robot passe de gauche à droite de la ligne noire
  • Kp : pour accentuer ou diminuer pour prendre le angles droits,
    • 1 ne fait rien
    • < 1 diminue l’angle des virages
    • > 1 augmente l’angle des virages
  • Kd : pour empêcher le robot de faire des zigzags
    • 0 ne fait rien
    • 0 à 3 diminuer les zigzags en ligne droite

Tu peux jouer sur ces deux valeurs pour ajuster ton suivi de ligne :

à

puis teste :

à

Cas du croisement, le robot doit aller tout droit

Si le capteur au central détecte une ligne noire en même temps que les capteurs L2 et R2, on peut déduire que le robot est sur un croisement. Le robot doit aller tout droit.

Passage d’un obstacle

Si le robot détecte un obstacle avec un dispositif placé à l’avant du robot, une stratégie de forçage est déclenchée : le robot effectue une accélération franche vers l’avant afin de franchir l’obstacle.

Puis rajouter l’appel de la fonction dans le code :

Arrêt du robot sur une ligne rouge

Catégories
ROBOCUP Robotique

ROBOCUP 2026

Finale régionale14 mars 2026INP
Finale nationale30 et 31 mai 2026Bordeaux (France)
Finale européennedu 1er au 5 juin 2026Vienne (Autriche)

Lors de nos participations à la RoboCup Junior, nous avons constaté que notre robot rencontrait des difficultés dans les virages très serrés.
Il avait tendance à zigzaguer, à se balancer de gauche à droite et parfois à perdre la ligne, en particulier lorsque celle-ci est en pointillée.

L’année dernière, sur nos mBot 2, nous avons ajouté un capteur central, ce qui a permis d’améliorer le suivi de ligne.

Afin de progresser cette année, nous devons nous reposer plusieurs questions, notamment :

  • le choix d’une traction avant ou arrière ;
  • le positionnement des capteurs, afin d’éviter qu’ils ne s’éloignent du sol lors des montées de pente ;
  • la maîtrise du robot lors des descentes.

Pour résoudre ces problèmes, nous devons revoir :

  • l’adhérence du robot au sol, en choisissant des pneus en caoutchouc de meilleure qualité ;
  • le choix d’un suivi de ligne basé sur un calcul PID, afin d’améliorer la stabilité et la précision du robot

Traction avant ou traction arrière : avantages et inconvénients

Le choix entre une traction avant (roues motrices à l’avant) et une traction arrière (roues motrices à l’arrière) a un impact important sur :

  • le suivi de ligne
  • la montée et la descente des pentes
  • l’évitement et le franchissement des obstacles

Traction avant (moteurs à l’avant). les avantages

  1. Bon guidage de la trajectoire
    • Les roues motrices tirent le robot
    • Le robot suit plus facilement la direction des capteurs
    • Intéressant pour le suivi de ligne précis
  2. Meilleur passage des petits obstacles
    • Les roues motrices montent directement sur l’obstacle
    • Moins de risque de rester bloqué
  3. Robot plus stable en descente
    • Le poids vers l’avant aide à garder le contrôle
    • Moins de risque de « glissade »

Traction avant (moteurs à l’avant). Inconvénients

  1. Moins d’adhérence en montée
    • Le poids se déplace vers l’arrière
    • Les roues avant peuvent patiner
    • Problème d’adhérence sur des pentes fortes (25 %)
  2. Direction plus sensible
    • Peut surcorriger dans les virages serrés
    • Demande un réglage PID précis

Traction arrière (moteurs à l’arrière). Avantages

  1. Meilleure adhérence en montée
    • Le poids du robot repose sur les roues motrices
    • Très efficace sur les pentes raides (25%)
  2. Robot plus stable en ligne droite
    • Le robot est “poussé” plutôt que tiré
    • Moins de patinage

Traction arrière (moteurs à l’arrière). Inconvénients

  1. Suivi de ligne moins précis
    • Les roues arrière poussent le robot
    • Risque de dérapage de l’arrière
    • Virages serrés plus difficiles
  2. Passage d’obstacles plus délicat
    • Les roues avant ne sont pas motrices
    • Elles peuvent buter sur l’obstacle
  3. Moins de contrôle en descente
    • Le robot peut accélérer trop vite
    • Risque de perte de contrôle, glissade surtout avec les roues bidirectionnelles

Choix d’un suivi de ligne basé sur un calcul PID

Le suivi de ligne simple, qui consiste à tourner à gauche ou à droite selon les capteurs, n’est pas suffisant. Il est nécessaire d’utiliser un système plus précis pour permettre au robot de rester bien centré sur la ligne.

Pourquoi utiliser un calcul PID pour suivre une ligne ?

Le PID est une méthode de calcul utilisée pour corriger automatiquement un mouvement. Le PID (Proportionnel – Intégral – Dérivé) est un algorithme de régulation inventé au début du XXᵉ siècle, notamment grâce aux travaux de Nicolas Minorsky en 1922, lors de l’étude du pilotage automatique des navires, pour aider à guider des bateaux sans les faire osciller.

Aujourd’hui, le PID est utilisé partout :

  • dans les avions
  • dans les voitures
  • dans les robots
  • dans les machines industrielles

Chaque fois qu’un système doit être stable et précis, on utilise un PID.

Pourquoi le PID est utile pour notre robot ?

Le PID aide le robot à :

  • mieux prendre les virages
  • éviter les balancements
  • suivre la ligne de manière fluide
  • mieux passer les lignes en pointillée

Grâce aux moteurs avec encodeurs, notre robot avance droit.
Nous utilisons donc seulement une partie du PID (P et D), ce qui est suffisant et plus simple.

Conclusion

Le calcul PID permet à notre robot de :

  • mieux suivre la ligne
  • être plus stable
  • être plus performant en compétition

C’est pour cela que nous devons expérimenter ce calcul pour améliorer notre robot en RoboCup Junior.

Quelque indications pour le mettre en œuvre avec le MBOT 2.

Les capteurs disent au robot où est la ligne :

  • Ligne au centre → erreur = 0
  • Ligne à gauche → erreur négative
  • Ligne à droite → erreur positive

Utilise une variable « position » pour affecter un poids d’erreur en fonction des capteurs, voir cet exemple :

la formule du PID est la suivante :

correction = (Kp × erreur) + (Kd × variation de l’erreur)

vitesse_gauche = vitesse_mini + (correction * vitesse_mini)
vitesse_droit = vitesse_mini – (correction * vitesse_mini)

Kp accentue proportionnellement l’erreur de positionnement par rapport à la ligne noire, Kp veut dire coefficient proportionnel.

Il sert à dire au robot :
« Plus je suis loin de la ligne, plus je corrige fort. »

  • Si Kp est petit → le robot corrige doucement (il peut sortir de la ligne)
  • Si Kp est grand → le robot corrige fort (il peut zigzaguer)

Kd – Calmer le robot, Kd veut dire coefficient dérivé. Il va permettre de se remettre bien droit sur la ligne droite suite à des virages, notamment pour que le robot se positionne pour suivre une ligne en pointillée.

Il sert à dire au robot :
« Attention, tu corriges trop vite, ralentis un peu. »

  • Kd faible → le robot zigzague
  • Kd plus grand → le robot devient plus stable
  • Kd trop grand → le robot devient lent à réagir
  • Ensemble : Kp + Kd
  • Kp fait tourner le robot vers la ligne
  • Kd empêche le robot de faire des zigzags

Ensemble, ils permettent au robot de :

  • suivre la ligne correctement
  • rester stable
  • passer les virages serrés plus facilement

Comment les régler :

  • Mettre Kd = 0 au départ
  • Augmenter Kp jusqu’à ce que le robot suive la ligne
  • Si le robot zigzague → augmenter Kd

Ajuster jusqu’à obtenir un mouvement fluide.

Configure MBLOCK pour le suivi de ligne

Utilise le bouton extension

Rajoute ces deux éléments :

Premier essai de fonctionnement du MBOT

Premier téléchargement

Teste ton programme

Teste une programmation des moteurs

Teste ton programme

Essayons de programmer par étape le suivi de ligne

Affichons le niveau de batterie car si celle-ci est inférieure à un certain niveau, le comportement du robot devient incohérent :

Sous le lancement du MBOT CyberPi crée les variables suivantes :

  • vitesse_droite : pour gérer la vitesse du moteur EM1
  • vitesse_gauche : pour gérer la vitesse du moteur EM2
  • vitesse_maxi : vitesse maximum du robot
  • vitesse_mini : vitesse moyenne du robot
  • position : poids de la position du robot par rapport à la ligne noire
  • correction : correction à appliquer aux moteurs pour suivre la ligne noire

Gestion du bouton B pour lancer le suivi de ligne puis l’arrêter

Tester le bouton B , les leds s’allument en vert puis en rouge

Calcul pour lancer les moteurs en fonction de la position du robot par rapport à la ligne noire

Teste, le robot roule tout droit

Faire tourner le robot

Teste des valeurs de position de -2 à 2 :

Teste le robot pour qu’il tourne plus ou moins à gauche ou à droite

Une première version pour un Suivi de ligne

Plus de détail :

Capteur central pour aller tout droit :

Détail du si :

Et les 4 capteurs du Quad RGB du MBOT :

Teste le suivi de ligne

Tu peux rajouter plus de précision :

Plus de détail sur le rajout :

Modifie le suivi de ligne avec le calcul du PID

  • derivee : afin de suivre quand le robot passe de gauche à droite de la ligne noire
  • Kp : pour accentuer ou diminuer pour prendre le angles droits,
    • 1 ne fait rien
    • < 1 diminue l’angle des virages
    • > 1 augmente l’angle des virages
  • Kd : pour empêcher le robot de faire des zigzags
    • 0 ne fait rien
    • 0 à 3 diminuer les zigzags en ligne droite

Tu peux jouer sur ces deux valeurs pour ajuster ton suivi de ligne surtout pour le passage de la ligne en pointillé :

Passage d’un obstacle

Si le robot reste bloqué devant un obstacle, l’objectif est de détecter qu’il est à l’arrêt, et qu’il tente de franchir l’obstacle sans y parvenir.

Ce blocage peut être identifié par un état de secousses répétées pendant une certaine durée.
Lorsque le robot est reconnu dans cet état, une stratégie de forçage est déclenchée : le robot recule légèrement, puis effectue une accélération franche vers l’avant afin de franchir l’obstacle.

Puis rajouter l’appel de la fonction dans le code :