Simulateur de suiveur de ligne dans le navigateur
Construisez un robot suiveur de ligne virtuel, visualisez ses capteurs et réglez un contrôleur PID avec un simulateur interactif dans le navigateur.
- Catégorie
- Arduino
- Durée
- 45–90 min
- Plateforme
- Navigateur · Arduino
01 / Commencez ici
Introduction
Un robot suiveur de ligne transforme les mesures de ses capteurs en corrections de direction. Ce projet vous permet de dessiner une piste, de modifier la géométrie du robot et des capteurs, puis d'observer en temps réel la réponse d'un contrôleur PID déterministe. Utilisez-le pour relier la théorie de la commande au comportement que vous observeriez avec un robot Arduino sur une piste réelle.
Live lab / Deterministic 60 Hz model
Line follower simulator
Run the starter track, tune the controller, or pause and draw a course of your own.
Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.
- Elapsed
- 0.0 s
- Distance
- 0 units
- Line error
- 0.000
- Steering
- 0.000
- Track contact
- 100%
Keyboard: focus the course, then use Space to run/pause, N to step, R to reset, D to draw, and F for full screen.
Commandes
Utilisez les pistes prédéfinies pour établir une référence, ou mettez l’essai en pause et dessinez directement sur le parcours. La vitesse du robot détermine la distance parcourue par le châssis à chaque mise à jour. Le nombre et l’espacement des capteurs modifient le champ de vision. Les réglages P, I et D modifient la réponse de direction ; Step avance d’une mise à jour déterministe pendant la pause.
Commencez avec une vitesse modérée, cinq capteurs et les gains par défaut. Ne modifiez qu’une variable à la fois et comparez l’erreur, le temps au tour et les métriques de temps sur la piste.
Théorie
La barrette de capteurs échantillonne la réflectance à l’avant du robot. Chaque capteur actif contribue par sa position signée à une moyenne pondérée. Le centre de la barrette correspond à une erreur nulle ; les mesures à gauche ou à droite du centre produisent une erreur négative ou positive.
Le contrôleur combine trois termes :
$$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$$
La correction $u(t)$ accélère une roue et ralentit l’autre. La commande proportionnelle réagit à l’écart actuel, la commande intégrale corrige un biais persistant et la commande dérivée amortit les variations rapides.
Algorithme
- Échantillonnez chaque capteur à intervalle fixe.
- Calculez une position pondérée de la ligne et normalisez-la autour du centre.
- Réutilisez la dernière direction connue de la ligne lorsque tous les capteurs la perdent.
- Mettez à jour les termes intégral et dérivé avec le même pas de temps fixe.
- Saturez la correction, calculez les commandes des moteurs gauche et droit, puis intégrez la pose du robot.
Réglez le gain proportionnel jusqu’à ce que le robot suive les virages doux, ajoutez du gain dérivé jusqu’à ce que les oscillations s’établissent, et n’introduisez que le gain intégral nécessaire pour supprimer un écart répétitif.
Code source
Le simulateur dans le navigateur et un microcontrôleur utilisent la même structure de commande. Une boucle compacte de style Arduino ressemble à ceci :
float integral = 0.0f;
float previousError = 0.0f;
void controlStep(float dt) {
float error = readWeightedLinePosition();
integral = constrain(integral + error * dt, -2.0f, 2.0f);
float derivative = (error - previousError) / dt;
float correction = kp * error + ki * integral + kd * derivative;
setMotorSpeeds(baseSpeed - correction, baseSpeed + correction);
previousError = error;
}
Gardez l’intervalle réel de commande stable. Un délai variable modifie les termes dérivé et intégral même lorsque les gains restent identiques.
Hypothèses et différences avec le matériel
Il s’agit d’un modèle pédagogique, pas d’une réplique du matériel. La piste est un masque binaire plat à fort contraste sans variation de lumière ambiante, si bien que la barrette de capteurs voit un noir et blanc parfaits — sur un ruban réel, l’éclairage de la pièce, le brillant de la surface et la hauteur des capteurs modifient les mesures et vous devez étalonner selon les étapes des notes de câblage. La temporisation est idéale : le contrôleur fonctionne à intervalle fixe sans gigue de delay(), alors que la boucle d’un Arduino physique varie avec les autres tâches et cette gigue remodèle la réponse PID. Le châssis est cinématique : les roues ne patinent jamais, les moteurs répondent instantanément et la batterie ne s’affaisse jamais. Considérez les gains trouvés ici comme un bon point de départ, puis réglez à nouveau sur le robot réel après étalonnage.
Schéma de câblage
Connectez les sorties des capteurs à des entrées compatibles analogiques, partagez la masse entre tous les modules et pilotez les moteurs via un pont en H plutôt que depuis les broches du contrôleur.
Vérifiez le calibre de l’alimentation des moteurs et ajoutez un découplage local près du contrôleur et du pont. Ne faites jamais passer le courant des moteurs par le régulateur logique d’une carte de développement.
Expériences guidées
Chacune isole une variable, ce qui est justement difficile à faire sur du matériel réel où tout change en même temps.
1. Trouvez le gain ultime, puis divisez-le par deux
Mettez les gains intégral et dérivé à zéro et augmentez le gain proportionnel jusqu’à ce que le robot oscille régulièrement sur une section droite — en louvoyant à amplitude constante plutôt que croissante ou décroissante. Divisez cette valeur par deux.
Vous disposez désormais d’un Kp de départ issu d’une mesure plutôt que d’une estimation, et il sera proche. Ajoutez ensuite du gain dérivé jusqu’à ce que le flottement s’amortisse.
2. Prouvez que les gains dépendent de la vitesse
Réglez le robot jusqu’à ce qu’il suive proprement à faible vitesse de base. Augmentez ensuite la vitesse de moitié et relancez avec les mêmes gains sans rien changer.
Il va louvoyer, couper les virages ou perdre la ligne. Rien n’a changé dans le contrôleur — mais la même correction de direction produit désormais une variation de cap plus grande par unité de piste, si bien que le gain effectif a augmenté avec la vitesse. Tout réglage est un réglage à une vitesse donnée, c’est pourquoi un robot de compétition ralentit dans les virages au lieu d’utiliser un seul gain partout.
3. Observez comment le nombre de capteurs change ce qui est possible
Lancez la même piste avec les mêmes gains, avec trois, cinq puis huit capteurs.
| Capteurs | Signal de position | Effet sur le réglage |
|---|---|---|
| 3 | Grossier, en fait trois zones | Suit la ligne, mais ne peut pas être réglé finement — l’erreur est quantifiée |
| 5 | Assez lisse pour une direction proportionnelle | Le compromis habituel |
| 8 | Fin | Permet des gains plus élevés et une vitesse plus grande avant d’osciller |
Le résultat intéressant est que plus de capteurs relève le plafond plutôt qu’ils n’améliorent le plancher. À faible vitesse, trois capteurs suffisent. La résolution supplémentaire ne devient rentable qu’aux vitesses où le signal d’erreur grossier devient le facteur limitant.
4. Cassez-le volontairement dans un virage serré
Augmentez la vitesse jusqu’à ce que le robot perde la ligne dans le virage le plus serré. Observez ce qu’il fait ensuite. Puis réfléchissez à ce que le robot réel devrait faire : continuer tout droit est la pire option, car la ligne s’incurvait.
C’est le raisonnement derrière le maintien de la dernière erreur en cas de perte de ligne plutôt que sa remise à zéro — zéro signifie « centré », ce qui commande de foncer tout droit à pleine vitesse. Conserver la dernière erreur maintient le robot en virage dans le sens où il tournait déjà, c’est-à-dire là où la ligne est partie.
Ce que vous devriez observer
| Symptôme sur le tracé | Cause | Correction |
|---|---|---|
| Louvoiement régulier sur les lignes droites | Kp trop élevé, ou Kd trop faible |
Divisez Kp par deux, puis augmentez Kd |
| Louvoiement qui s’amplifie | Kp au-dessus du gain ultime |
Réduisez-le |
| Virages larges et lents, coupés | Vitesse trop élevée pour l’anticipation des capteurs | Ralentissez, ou avancez la barrette |
| Effort de commande saccadé | Kd agissant sur une position bruitée |
Filtrez, ou réduisez Kd |
| Suit légèrement décentré, toujours | Étalonnage inégal des capteurs | Normalisez chaque voie sur sa propre plage |
| Perd la ligne et continue tout droit | Erreur remise à zéro en cas de perte de ligne | Conservez la dernière erreur |
Transposition au matériel
| Ce labo | Un robot réel |
|---|---|
| Boucle parfaitement périodique | Gigue sauf si vous mesurez dt ; un delay() neutralise entièrement Kd |
| Étalonnage idéal | À refaire à chaque essai, sur la surface réelle |
| Piste binaire à fort contraste | Ruban brillant, poussière et infrarouge ambiant réduisent tous le contraste |
| Aucun patinage des roues | Patinage à vitesse élevée, et deux zones mortes de moteurs différentes |
| Moteurs à réponse instantanée | Les deux roues démarrent à des rapports cycliques différents |
| Batterie constante | La tension s’affaisse, donc le même rapport cyclique produit moins de vitesse au fil de l’essai |
Les gains trouvés ici se transposent comme un bon point de départ, et la procédure de réglage se transpose intégralement. Prévoyez de régler à nouveau sur votre propre ruban — et attendez-vous à ce que la plus grande amélioration sur le matériel vienne non pas des gains mais de la fréquence de boucle, car un premier montage fonctionne souvent à 20–50 Hz et peut atteindre plusieurs centaines simplement en supprimant les appels bloquants. Le montage complet est décrit dans construire un robot suiveur de ligne.
Liste de vérification du matériel
Composants
- Arduino Uno ou contrôleur compatible
- Trois à neuf capteurs de réflectance IR
- Deux moto-réducteurs à courant continu et roues
- Double pont en H pour moteurs
- Bloc de batteries, châssis et roulette
Explorer le graphe
Où ce simulateur est utilisé
Les projets, parcours d'apprentissage et tutoriels qui s'appuient sur ce labo.
Continuer la construction
Ressources à télécharger
Utilisez ces références sur la page pendant que vous avancez dans le projet. Les archives de projet téléchargeables ne seront ajoutées qu'une fois leur source et leur version publiées.
Questions courantes
Questions fréquentes
Pourquoi le robot oscille-t-il autour de la ligne ?
Les oscillations signifient généralement que le gain proportionnel est trop élevé, que l'amortissement dérivé est trop faible ou que le robot avance trop vite pour ce que sa fréquence de mise à jour des capteurs peut supporter. Réduisez d'abord la vitesse, puis réglez P et D. Sur un robot réel, un delay() trop long dans la boucle est une cause cachée fréquente : le temps mort qu'il ajoute rend le terme dérivé inefficace, quelle que soit sa valeur.
Combien de capteurs un suiveur de ligne doit-il utiliser ?
Cinq capteurs sont un bon point de départ — ils révèlent la direction et l'amplitude de l'erreur tout en gardant le calcul de position pondérée facile à inspecter. Trois capteurs suffisent à vitesse lente, tandis que les robots de compétition en utilisent souvent huit pour une résolution de position plus fine à haute vitesse.
Pourquoi mon suiveur de ligne perd-il la ligne dans les virages serrés ?
Le châssis avance plus vite que ce que la barrette de capteurs peut résoudre dans la courbe, si bien que la ligne quitte la barrette avant que le contrôleur ne réagisse. Réduisez la vitesse, élargissez la barrette de capteurs ou augmentez la fréquence de mise à jour des capteurs. Un bon contrôleur réutilise aussi la dernière direction connue de la ligne lorsque tous les capteurs la perdent, afin de revenir vers la ligne au lieu de continuer tout droit.
Faut-il utiliser des capteurs IR analogiques ou numériques pour le suivi de ligne ?
Les capteurs de réflectance analogiques fournissent une valeur continue, ce qui permet de calculer une position pondérée de la ligne bien lisse et de diriger proportionnellement. Les capteurs numériques indiquent seulement un état passant ou bloqué après un seuil interne, ce qui est plus simple mais donne une information de position plus grossière. Ce simulateur modélise l'approche analogique à position pondérée.
Comment étalonner la barrette de capteurs IR ?
Avant un essai, balayez les capteurs sur la ligne et sur le fond, enregistrez pour chaque capteur ses mesures minimale et maximale, puis normalisez les mesures en direct par rapport à cette plage. L'étalonnage est important car la hauteur des capteurs, la réflectivité de la surface et la lumière ambiante modifient les valeurs brutes, et une barrette non étalonnée biaise la position pondérée.
Quelles sont de bonnes valeurs PID de départ pour un suiveur de ligne Arduino ?
Considérez les gains publiés comme un point de départ, pas comme une réponse à copier-coller : la réponse des moteurs, la hauteur des capteurs, la tension de la batterie, la réflectivité de la surface et la temporisation de la boucle modifient tous les gains dont un robot réel a besoin. Commencez avec le seul terme proportionnel, augmentez-le jusqu'à ce que le robot suive les courbes douces avec un léger flottement, puis ajoutez le terme dérivé pour supprimer ce flottement et une très petite action intégrale uniquement s'il reste un écart répétitif.
Pour aller plus loin
Références
Des sources faisant autorité pour aller plus loin que le modèle pédagogique, borné, de ce simulateur.