Parcours de constructionDébutantUn week-end

Construire un robot éviteur d'obstacles : capter, balayer

Un robot qui se déplace seul — détectant les obstacles, cherchant les ouvertures et tournant vers l'espace libre — fait de pièces comprises et réglées d'abord en simulation.

Schéma technique : Construire un robot éviteur d'obstacles : capter, balayerCLEARANCE FIELD

Un robot éviteur d’obstacles est la suite naturelle après un suiveur de ligne. Un suiveur suit — il suit une ligne que quelqu’un a tracée pour lui. Ce robot décide : sans piste ni carte, il capte l’espace autour de lui et choisit où aller. Cette unique différence — réagir au monde au lieu de le suivre — est le premier vrai goût de l’autonomie, et elle reste assez simple pour être entièrement comprise.

Le cœur est une boucle courte et répétée : capter-balayer-décider-tourner. Le capteur à ultrasons HC-SR04 émet vers l’avant et chronomètre l’écho pour estimer la distance ; quand quelque chose est plus proche qu’un seuil de sécurité, le robot s’arrête, balaye le capteur à gauche et à droite sur un servomoteur SG90, et tourne vers le cap le plus ouvert. Ce seuil n’est pas arbitraire — c’est une distance de sécurité construite depuis la vitesse courante, la latence perception-décision-action, la distance de freinage (qui croît avec le carré de la vitesse), le rayon du robot et une marge, tous visibles comme la courbe de distance d’arrêt dans le simulateur.

Vous ajoutez les composants dont un robot mobile a besoin et apprenez ce que chacun fait : un Arduino Uno pour une logique 5 V indulgente, le capteur à ultrasons et sa zone aveugle (la portée minimale sous laquelle il ne peut pas mesurer), le servomoteur qui donne au faisceau un second point de vue, le pont en H L298N qui commute le courant moteur que les broches logiques ne peuvent pas fournir, deux motoréducteurs TT où le réducteur échange la vitesse contre du couple utilisable, un châssis 2 roues motrices avec roulette pour la direction différentielle, et un pack batterie qui doit alimenter moteur et logique sur des rails séparés. L’arbre technologique vous fait aussi traverser deux parcours d’apprentissage — commande moteur et navigation réactive — pour que les mêmes idées de PWM, odométrie et filtrage rencontrées dans le suiveur reviennent ici en contexte de navigation.

Puis — avant de dépenser quoi que ce soit ou de risquer un mauvais branchement — réglez le comportement d’évitement dans le simulateur en navigateur jusqu’à naviguer proprement dans un espace encombré. L’espace de travail y est vu de dessus et bidimensionnel avec des rayons instantanés et sans bruit ; un vrai faisceau ultrasonore s’ouvre d’environ 15°, est bloqué par le corps même du robot, et est perturbé par les surfaces molles ou inclinées, donc vous filtrerez les lectures et ajouterez un filtre médian et un court délai de stabilisation après le mouvement du servo avant de faire confiance à une distance sur le matériel. Trouver une distance d’arrêt sûre et une règle de direction libre en simulation supprime l’essentiel des devinettes avant que le robot bouge.

Ensuite seulement vous câblez le vrai robot — trigger et echo à la bonne tension, signal servo vers une broche à capacité PWM, PWM et direction moteur vers le pilote, batterie moteur vers la broche VM du pilote seul, toutes les masses reliées — et le laissez errer sur un sol avec cartons ou chaises. Les mêmes leçons de perception et de filtrage mènent directement au labyrinthe à murs Micromouse si vous voulez ensuite la cartographie, ou à la navigation ROS 2 si vous ajoutez un Raspberry Pi.

Suivez l’arbre technologique ci-dessous de haut en bas. Chaque nœud s’ouvre une fois ses prérequis terminés, et votre progression est enregistrée sur cet appareil, pour construire le robot sur un week-end sans perdre votre place.

Nomenclature

Pièce Qté Coût approx. Notes
Arduino Uno 1 $5–8 La logique 5 V aide vraiment ici — l’echo du HC-SR04 est en 5 V
HC-SR04 1 $2 Un VL53L0X est un bon second capteur, pas un remplaçant
Servomoteur SG90 1 $2 Pour la tête de balayage. MG90S s’il tournera des heures
L298N 1 $2–4 Ou un TB6612FNG, qui gaspille bien moins de batterie
Motoréducteur TT 2 $4
Châssis 2 roues motrices 1 $6–10
Pack batterie 1 $6 6×AA NiMH ou 2×18650
Microrupteurs 2 $1 Ajoutez-les. Voir ci-dessous

Total : environ $30–40.

Les deux microrupteurs sont les quarante centimes les mieux dépensés du robot, et c’est la pièce que la plupart des montages omettent. Chaque capteur de distance a des surfaces qu’il ne voit pas — un sonar est aveugle aux rideaux et aux murs abordés en angle raide — et un robot sans perception de contact poussera un rideau jusqu’à ce que quelque chose cède. Deux interrupteurs derrière un pare-chocs enveloppant transforment « évite généralement » en « ne reste jamais coincé contre ce qu’il ne voyait pas ».

Comment tout se relie

De Vers Note
HC-SR04 VCC, GND 5 V, GND ~15 mA, en pointe pendant un ping
HC-SR04 Trig D9 Broche numérique quelconque
HC-SR04 Echo D10 Sortie 5 V — OK sur Uno, exige un pont sur une carte 3,3 V
Signal servo D6 La bibliothèque Servo utilise le Timer 1, qui pilote aussi le PWM D9/D10
Alim servo 5 V séparé, masse commune 650 mA calé — pas la broche 5 V de l’Arduino
Pilote ENA, ENB D5, D3 Broches à capacité PWM. Retirez les cavaliers d’enable du L298N
Pilote IN1–IN4 D8, D7, D4, D2
Microrupteurs D11, D12, INPUT_PULLUP COM à la masse, NO vers la broche
Batterie + Pilote VM / +12V Jamais l’Arduino
Toutes les masses Un point Arduino, pilote, alim servo, négatif batterie

Attention au conflit de timer : la bibliothèque Servo prend le Timer 1, qui sur un Uno pilote le PWM des broches 9 et 10. Mettez le PWM moteur sur 3, 5, 6 ou 11 et le servo sur n’importe quelle broche, et le problème n’arrive jamais. Mettez un enable moteur sur la broche 9 et son contrôle de vitesse cessera silencieusement de marcher dès que vous attachez un servo.

La distance d’arrêt, calculée plutôt que devinée

Le seuil d’arrêt est le nombre le plus important de ce projet, et il n’est pas arbitraire. C’est la somme de quatre distances :

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Terme D’où il vient Typique
Latence de perception et décision Ping (jusqu’à 25 ms), stabilisation servo, période de boucle 60–100 ms
Distance de freinage Vitesse au carré sur deux fois la décélération Croît vite
Rayon du robot Avant du châssis au centre de pivot 80–100 mm
Marge Parce que le cône capteur fait 15° de large et ment sur les choses molles 50 mm

En pratique, pour un robot à 0,3 m/s avec 80 ms de latence et 1,0 m/s² de freinage :

= (0.3 x 0.08) + (0.09 / 2.0) + 0.09 + 0.05
= 0.024 + 0.045 + 0.09 + 0.05 = 0.21 m

Soit environ 21 cm. Doublez maintenant la vitesse à 0,6 m/s :

= 0.048 + 0.18 + 0.09 + 0.05 = 0.37 m

Le seuil n’a pas doublé — il a crû de 76 %, car le terme de freinage va avec le carré de la vitesse. C’est pourquoi un robot qui évite fiablement au pas commence à percuter quand on l’accélère, et pourquoi le correctif est un seuil dépendant de la vitesse plutôt qu’un grand nombre fixe qui rend le robot timide partout.

Construisez par étapes

N° Étape Le test Un succès ressemble à
1 Les moteurs entraînent Avant, arrière, pivot des deux sens sur cales Les six états marchent ; vous connaissez la zone morte de chaque roue
2 La distance se lit Pointez un mur à 30 cm et affichez pendant une minute Stable à un ou deux centimètres, sans zéros
3 Le timeout marche Visez le vide et le plafond La boucle garde sa cadence — pas d’écho ne doit pas geler le robot
4 Filtre médian Agitez la main dans le faisceau Les lectures isolées folles disparaissent ; l’approche réelle passe toujours
5 Le servo balaye Commandez −60°, 0°, +60° et affichez la distance à chacun Balayage répétable, avec un délai de stabilisation avant chaque ping
6 Délai prouvé Retirez délibérément le délai Les lectures bavent sur les angles — vous connaissez maintenant cette panne
7 Seuil d’arrêt Roulez vers un mur et laissez-le s’arrêter Il s’arrête avec votre marge calculée, pas par chance
8 Décision de virage Placez-le face à un coin avec un côté ouvert Il tourne vers le côté ouvert, pas au hasard
9 Hystérésis Garez-le au seuil Il s’engage au lieu de bégayer
10 Reprise contact Foncer vers un coussin Le sonar le rate, l’interrupteur le rattrape, le robot recule et tourne
11 Erre libre Cinq minutes dans une pièce encombrée Il survit ; quand il se coince vous pouvez nommer l’état

L’étape 10 sépare une démo d’un robot. Un coussin absorbe entièrement l’impulsion ultrasonore, donc le capteur signale un espace ouvert et le robot fonce dedans à pleine vitesse. Sans microrupteur il pousse ensuite jusqu’au calage des moteurs.

Dépannage

Symptôme Cause probable Correctif
Le robot gèle à intervalles aléatoires pulseIn sans timeout Passez un timeout 25000 µs ; traitez « pas d’écho » explicitement
Arrêts d’urgence dans une pièce vide Un timeout traité comme 0 cm Un timeout signifie loin, pas près. Renvoyez une sentinelle
Fonce dans rideaux et coussins Son absorbé — physique, pas bug Ajoutez des microrupteurs
Fonce dans les murs en angle Ping réfléchi loin du récepteur Même correctif ; balayez aussi plus d’angles
Tourne avec assurance dans un mur Lecture avant stabilisation du servo Ajoutez 100–200 ms après la commande d’angle, avant de sonder
Bégaye aux obstacles Un seuil, sans hystérésis Arrêtez à 20 cm, ne repartez qu’à 30 cm
Servo qui tremble, carte qui redémarre Courant servo dans l’Arduino Alimentation 5 V séparée pour le servo, masse commune
Le contrôle de vitesse moteur a cessé Bibliothèque Servo sur Timer 1 (broches 9, 10) Déplacez le PWM moteur vers 3, 5, 6 ou 11
Coincé dans un coin pour toujours Pas de mémoire — inhérent à la navigation réactive Ajoutez une composante aléatoire et une évasion anti-blocage
Évite bien lentement, percute vite Seuil fixe, terme de freinage quadratique Rendez le seuil dépendant de la vitesse
Lectures folles quand deux robots tournent ensemble Ils entendent les clics de l’autre Décalez les timings de ping

Pour aller plus loin

Ajoutez le suivi de mur. Un robot qui tient une distance fixe d’un mur sur un côté traverse une pièce de façon déterministe plutôt que d’errer, et c’est le premier comportement qui commence à ressembler à un plan. C’est un petit changement de code et un grand changement conceptuel.

Ajoutez un second type de capteur. Un VL53L0X échoue sur presque exactement les surfaces opposées au sonar — mat sombre et miroirs, contre mou et incliné. Ensemble ils couvrent bien plus de la pièce que chacun seul.

Acceptez le plafond et passez à la suite. Un robot réactif ne peut être envoyé nulle part, ne peut pas promettre qu’il a couvert le sol, et peut boucler indéfiniment dans une pièce en fer à cheval. Ce sont des propriétés de l’absence de carte, pas des bugs. Quand elles commencent à compter, la Micromouse ajoute cartographie et planification, et le robot de couverture attaque directement la question « suis-je passé partout ? ».

Parcours du projet

Le parcours de construction

Suivez l'arbre technologique, des pièces jusqu'à un robot qui fonctionne. Chaque nœud se débloque quand ses prérequis sont terminés, et votre progression est enregistrée sur cet appareil.

0 / 18 terminés

100%
Parcours d'apprentissage

Fondations électroniques du robot

Parcours d'apprentissage

Ouvrir le parcours
Parcours d'apprentissage

Navigation réactive

Parcours d'apprentissage

Ouvrir le parcours
Réalisation

Câbler le robot

45 min

Réalisation

Assembler et rouler

60 min

Objectif

Robot éviteur d'obstacles terminé

Vous l'avez construit

Composants

Tutoriels de ce parcours

Entraînez-vous avant de câbler

Réglez-le dans le simulateur interactif

Le parcours de construction passe par un labo dans le navigateur. Obtenez ici le bon comportement, puis reportez vos réglages sur le vrai robot.

Questions fréquentes

Comment fonctionne un robot éviteur d'obstacles ?

Il roule en avant pendant qu'un capteur à ultrasons surveille la distance devant. Quand quelque chose est plus proche qu'un seuil, le robot s'arrête, balaye le capteur à gauche et à droite sur un servomoteur pour mesurer la distance dans chaque direction, et tourne vers le côté le plus ouvert — puis repart. Le tout est une courte boucle capter-balayer-décider-tourner exécutée plusieurs fois par seconde.

Quel capteur convient le mieux à un robot éviteur d'obstacles ?

Le capteur à ultrasons HC-SR04 est le défaut : bon marché, facile à câbler, et fiable jusqu'à quelques mètres. Un capteur temps de vol donne une lecture plus serrée, rapide et précise si besoin, mais pour un premier éviteur l'ultrason est le bon équilibre coût et simplicité.

Faut-il acheter les pièces avant de commencer ce projet ?

Non. La perception et la logique d'évitement tournent dans le simulateur en navigateur, donc vous pouvez comprendre et régler le comportement avant tout achat. Seules les étapes finales — câblage et assemblage — exigent le vrai Arduino, le HC-SR04, le servomoteur, le pilote, les moteurs, le châssis et la batterie.

Pourquoi mon robot éviteur d'obstacles ne marche-t-il pas ?

Les trois coupables habituels sont une lecture ultrasonore bruitée ou bloquée (ajoutez un filtre médian et gardez le capteur dégagé), une lecture avant que le servomoteur ait fini de bouger (ajoutez un court délai de stabilisation), et l'alimentation des moteurs directement depuis l'Arduino au lieu du pilote (ce qui fait une microcoupure et redémarre la carte).

En quoi est-ce différent d'un suiveur de ligne ?

Un suiveur de ligne suit une piste tracée pour lui ; un robot éviteur d'obstacles n'a pas de piste et doit décider où aller. Il ajoute un capteur de balayage et une vraie boucle de décision, ce qui en fait le second robot naturel à construire après un suiveur de ligne.