Simulateur interactifIntermédiaire

Simulateur d'évitement d'obstacles pour robots mobiles

Apprenez la navigation réactive, la télémétrie et l'arrêt en sécurité avec un simulateur de robotique d'évitement d'obstacles pour projets Raspberry Pi.

Catégorie
Raspberry Pi
Durée
2–3 heures
Plateforme
Navigateur · Raspberry Pi
Schéma technique : Simulateur d'évitement d'obstacles pour robots mobilesCLEARANCE FIELD

01 / Commencez ici

Introduction

L'évitement d'obstacles transforme des mesures incomplètes et bruitées en mouvements sûrs. Ce projet sépare la perception, la sécurité et la direction pour que vous puissiez raisonner sur chaque couche avant de déployer un robot mobile. Le simulateur expose la couverture des capteurs, la distance d'arrêt et les cas d'échec plutôt que de prétendre qu'une seule règle réactive résout tous les problèmes de navigation.

Live lab / Reactive range-sensing navigation

Obstacle avoidance simulator

Drive a mobile robot toward the goal while a fan of range sensors keeps it clear of obstacles. Reposition the scene by dragging or with the coordinate controls, add noise, and compare two steering rules.

Browser native
A top-down obstacle-avoidance robot simulator. Use the controls below to run it, or read the full theory and algorithm after this lab.

Lines are sensor rays; a brighter ray marks the nearest reading. The dashed line ahead is the predicted stopping distance. The green ring is the goal. Drag a scene item or use the position controls below.

Simulation

Paused. Press Start or Step to begin.

Robot & sensing
Scene position
Status
Seeking
Distance to goal
630 px
Min clearance
170 px
Stopping distance
24 px
Elapsed
0.0 s

Keyboard: focus the workspace, then use Space to run/pause, N to step, R to reset, D to add an obstacle, and F for full screen.

Commandes

L’espace de travail comprend des obstacles déplaçables, la vitesse du robot, la portée de détection, le champ de vision, le bruit de mesure et un seuil de distance de sécurité. Les rayons des capteurs et la distance d’arrêt prédite restent visibles. Le mode pas à pas révèle exactement quelle observation a provoqué chaque décision de direction.

Théorie

Un robot doit s’arrêter ou tourner avant que son empreinte balayée ne croise un obstacle. La distance sûre dépend de la vitesse actuelle, de la latence du contrôleur, de la capacité de freinage, de l’incertitude de mesure et du rayon physique du robot — pas seulement de la dernière valeur de distance.

Tracé linéaire de la distance sûre requise en fonction de la vitesse du robot. La composante de réaction croît linéairement avec la vitesse, mais la distance totale requise s'incurve vers le haut car le terme de freinage croît avec le carré de la vitesse. Une ligne de plancher marque le rayon fixe du robot plus la marge de sécurité.
L'écart requis augmente plus vite que la vitesse : la distance de réaction est linéaire, mais la distance de freinage croît en v², donc une petite augmentation de vitesse exige un écart sûr bien plus grand. Télécharger le SVG

Les contrôleurs réactifs comme les champs de potentiels transforment les obstacles proches en vecteurs répulsifs et le but en vecteur attractif. Ils répondent vite mais peuvent rester piégés dans des minima locaux. Une pile pratique associe la sécurité réactive à un planificateur global ou local.

Algorithme

  1. Rejetez les échantillons de distance périmés et physiquement impossibles.
  2. Transformez les observations valides dans le repère du robot.
  3. Agrandissez chaque obstacle du rayon du robot plus une marge de sécurité.
  4. Calculez la distance d’arrêt à partir de la vitesse et de la décélération estimée.
  5. Arrêtez-vous quand le couloir avant est dangereux ; sinon dirigez-vous vers le secteur dégagé le plus aligné au but.
  6. Limitez l’accélération et la vitesse angulaire avant d’envoyer les commandes aux moteurs.

Code source

Gardez la décision d’urgence assez petite pour être testée exhaustivement :

def safe_velocity(target, ranges, stop_distance):
    front = [r for angle, r in ranges if abs(angle) < 0.35]
    if not front or min(front) <= stop_distance:
        return 0.0, choose_clear_turn(ranges)
    return limit_acceleration(target), steer_toward_clearance(ranges)

Dans un vrai système, enregistrez les horodatages des capteurs et passez à un état arrêté sûr quand des données requises deviennent indisponibles.

Hypothèses et différences avec le matériel

Le monde est vu de dessus et en deux dimensions : les rayons des capteurs sont instantanés, parfaitement fins, et jamais occultés par le corps du robot, et le robot est un disque qui peut freiner jusqu’à zéro sans inertie. Sur un robot Raspberry Pi, les faisceaux à ultrasons s’ouvrent à 15°, les mesures à temps de vol dépendent de la surface et du soleil, et la distance d’arrêt est fixée par la masse réelle, le couple des moteurs et la latence de détection-décision-action — tout cela couvert dans la feuille de route de navigation réactive. Le simulateur ignore aussi la gigue de boucle et les chutes d’alimentation, donc traitez la courbe de distance d’arrêt comme l’allure à intérioriser, pas comme un nombre à copier.

Schéma de câblage

Abaissez tout signal d’écho 5 V avant qu’il n’atteigne les GPIO du Raspberry Pi. Alimentez les moteurs séparément et reliez les masses en un point commun volontaire.

Schéma fonctionnel de l'architecture des capteurs d'évitement d'obstacles. Les capteurs de distance en GPIO ou I²C, une caméra en CSI, et les codeurs de roues en GPIO alimentent tous un Raspberry Pi. Le Pi pilote un pont de puissance en PWM et direction, et le pont de puissance alimente les moteurs.
Perception, calcul et action restent séparés : plusieurs voies de détection alimentent le Pi, qui pilote les moteurs via un pont isolé sur sa propre alimentation. Télécharger le SVG

Expériences guidées

1. Déduisez le seuil d’arrêt au lieu de le deviner

Réglez une vitesse basse et abaissez le seuil d’arrêt jusqu’à ce que le robot commence à toucher les obstacles. Notez la valeur. Doublez maintenant la vitesse et répétez.

Le seuil nécessaire ne double pas, car c’est la somme d’un terme qui varie avec la vitesse et d’un terme qui varie avec son carré :

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Vitesse Terme de latence (80 ms) Terme de freinage (1 m/s²) Total, avec 90 mm de rayon + 50 mm de marge
0,15 m/s 12 mm 11 mm 16 cm
0,30 m/s 24 mm 45 mm 21 cm
0,60 m/s 48 mm 180 mm 37 cm
0,90 m/s 72 mm 405 mm 62 cm

C’est pourquoi un robot qui évite fiablement au pas commence à heurter quand vous l’accélérez — et pourquoi la correction est un seuil dépendant de la vitesse plutôt qu’une grande valeur fixe qui rend le robot timide partout.

2. Produisez le bégaiement de seuil, puis corrigez-le

Garez le robot pour qu’il reste juste à la distance d’arrêt. Avec un seul seuil, il bascule entre roulage et virage plusieurs fois par seconde.

Séparez maintenant les deux : arrêtez à 20 cm, et ne repartez qu’à 30 cm. Le bégaiement disparaît car le comportement doit s’engager. Cet écart est l’hystérésis, et le même motif corrige presque toutes les oscillations pilotées par seuil dans le code robotique.

3. Piégez-le délibérément

Construisez un coin concave — un fer à cheval — et laissez le robot entrer. Avec une règle déterministe « tournez vers la direction la plus ouverte », il va tourner, rouler, et revenir là où il a commencé, pour toujours.

Ce n’est pas un bogue à corriger. C’est ce que signifie ne pas avoir de carte, et c’est la démonstration la plus claire possible du plafond de la navigation réactive. Les atténuations sont une composante aléatoire dans le virage et un détecteur de blocage qui escalade après plusieurs tentatives ratées ; la vraie correction est la mémoire, qui est un tout autre chemin.

4. Comparez résolution de balayage et temps de balayage

Augmentez le nombre d’angles de balayage et regardez deux choses bouger en sens opposés : les décisions de virage s’améliorent, et le robot passe plus de temps à l’arrêt.

Un balayage est un moment aveugle — le robot est arrêté et ne progresse pas. Trois à cinq angles est le compromis habituel, et au-delà l’information supplémentaire justifie rarement le temps supplémentaire.

Ce que vous devriez observer

Comportement Cause
Touche les obstacles à vitesse élevée Seuil non mis à l’échelle pour le terme de freinage quadratique
Bégaie à distance fixe Un seul seuil, pas d’hystérésis
Hésite gauche-droite sur place Redécide avant que le virage ait changé quoi que ce soit
Tourne pour toujours dans un coin Échappement déterministe d’un piège symétrique
S’arrête bien trop tôt partout Seuil réglé pour le pire cas plutôt que pour la vitesse actuelle
Tourne vers le bord d’un passage Choisit l’angle maximal plutôt qu’un centroïde pondéré

Transposition au matériel

Les rayons du simulateur sont instantanés, sans bruit et infiniment fins. Un vrai capteur à ultrasons n’est rien de tout cela, et les différences sont tout le travail sur le matériel :

Ce labo Un HC-SR04 sur un vrai robot
Un rayon fin Un cône d’environ 15°, soit environ 53 cm de large à 1 m
Chaque surface réfléchit Les surfaces molles et très inclinées ne renvoient rien du tout
Mesures instantanées Jusqu’à 25 ms par ping, environ 60 ms entre eux
Pas de servo 100–200 ms de stabilisation par angle de balayage
Pas de bruit Des valeurs aberrantes occasionnelles exigeant un filtre médian
Voit tout Un rideau est invisible — c’est pourquoi on monte des microrupteurs

Trouvez ici une distance d’arrêt sûre et une règle de direction dégagée, où une erreur ne coûte rien. Puis sur le matériel, ajoutez le filtre médian, le délai de stabilisation du servo et la détection de contact — le tutoriel d’algorithme d’évitement contient chacun en code.

Liste de vérification du matériel

Composants

  • Raspberry Pi avec une alimentation prise en charge
  • Deux capteurs à temps de vol ou à ultrasons ou plus
  • Module caméra optionnel pour la détection visuelle
  • Pont de puissance avec alimentation moteur séparée
  • Châssis à propulsion différentielle et codeurs

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 un seul capteur frontal ne suffit-il pas ?

Un seul faisceau laisse des angles morts près du robot et ne distingue pas un objet étroit d'un mur. Plusieurs points de vue ou un capteur à balayage fournissent assez de géométrie pour choisir un virage plus sûr.

L'évitement d'obstacles remplace-t-il la planification de trajectoire ?

Non. L'évitement réactif gère les dangers immédiats, tandis qu'un planificateur assure la progression vers un but. Les robots robustes combinent les deux et laissent la couche de sécurité annuler tout mouvement planifié dangereux.

Capteur à ultrasons ou à temps de vol — lequel est meilleur pour l'évitement d'obstacles ?

Les capteurs à ultrasons sont bon marché et fonctionnent sur la plupart des surfaces mais ont une faible résolution angulaire et une zone aveugle près du capteur. Les capteurs à temps de vol (ToF) donnent une distance courte plus rapide et plus précise avec un faisceau étroit, mais peuvent être perturbés par un fort ensoleillement, des surfaces sombres ou miroirs, et des réflexions en coin. Beaucoup de robots utilisent les ultrasons pour la couverture grossière et le ToF là où une détection précise à courte portée compte.

Qu'est-ce qu'une zone aveugle de capteur et pourquoi est-ce important ?

La zone aveugle est la portée minimale sous laquelle un capteur ne peut pas rendre compte d'une distance valide — pour les capteurs à ultrasons, elle est fixée par la longueur de l'impulsion émise. Un obstacle dans la zone aveugle se lit comme dégagé, donc un robot qui fait confiance à la valeur brute peut foncer dans quelque chose juste devant lui. Montez les capteurs pour que la zone aveugle tombe à l'intérieur de l'empreinte du robot, et traitez les mesures suspectes trop petites comme invalides.

Comment calculer une distance d'arrêt sûre ?

La distance sûre est la distance de réaction plus la distance de freinage plus le rayon du robot et une marge. La distance de réaction croît linéairement avec la vitesse (vitesse fois latence de détection-décision-action), mais la distance de freinage croît avec le carré de la vitesse, donc l'écart requis augmente plus vite que la vitesse elle-même. C'est pourquoi une petite augmentation de vitesse peut exiger un écart sûr bien plus grand.

Pourquoi mon robot reste-t-il coincé devant un obstacle ?

Les méthodes réactives comme les champs de potentiels peuvent atteindre un minimum local où la poussée répulsive d'un obstacle annule l'attraction vers le but, et le robot cale ou oscille. Une direction par suivi d'ouverture qui s'engage vers l'ouverture dégagée la plus large, plus un planificateur global ou local au-dessus de la couche réactive, empêche le robot de se piéger lui-même.

Comment filtrer des mesures de distance bruitées ?

Rejetez les valeurs physiquement impossibles et les sauts soudains plutôt que d'agir dessus, horodatez chaque échantillon, et appliquez un filtre médian ou temporel léger pour supprimer les échos parasites. Si des données requises deviennent périmées ou indisponibles, passez à un état arrêté sûr au lieu de diriger sur une estimation.

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.