Interaktiver SimulatorMittelstufe

Hindernisvermeidungs-Simulator für mobile Roboter

Lerne reaktive Navigation, Abstandssensorik und sicheres Stoppen mit einem Hindernisvermeidungs-Simulator für Raspberry-Pi-Projekte.

Kategorie
Raspberry Pi
Zeitaufwand
2–3 Stunden
Plattform
Browser · Raspberry Pi
Technisches Schema: Hindernisvermeidungs-Simulator für mobile RoboterCLEARANCE FIELD

01 / Hier starten

Einführung

Hindernisvermeidung macht aus unvollständigen, verrauschten Messungen sichere Bewegung. Dieses Projekt trennt Wahrnehmung, Sicherheit und Lenkung, damit du jede Schicht durchdenken kannst, bevor ein mobiler Roboter fährt. Der Simulator zeigt Sensorabdeckung, Anhalteweg und Fehlerfälle statt eine Reaktivregel für alles zu verkaufen.

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.

Steuerung

Die Arbeitsfläche bietet verschiebbare Hindernisse, Robotertempo, Erfassungsreichweite, Sichtfeld, Messrauschen und Sicherheitsschwelle. Sensorstrahlen und vorausberechneter Anhalteweg bleiben sichtbar. Der Schrittmodus zeigt exakt, welche Beobachtung jeden Lenkentscheid verursachte.

Theorie

Ein Roboter muss stoppen oder drehen, bevor sein überstrichener Grundriss ein Hindernis schneidet. Sichere Distanz hängt von aktuellem Tempo, Reglerlatenz, Bremsvermögen, Messunsicherheit und physischem Roboterradius ab — nicht nur vom jüngsten Abstandswert.

Liniendiagramm nötiger Sicherheitsdistanz über Robotertempo. Die Reaktionskomponente wächst linear mit Tempo, die Gesamtdistanz krümmt sich aber nach oben, weil der Bremsanteil mit dem Quadrat des Tempos wächst. Eine Bodenlinie markiert festen Roboterradius plus Sicherheitsmarge.
Nötiger Freiraum steigt schneller als das Tempo: Reaktionsweg ist linear, Bremsweg wächst aber mit v² — wenig mehr Tempo verlangt eine viel größere Sicherheitslücke. SVG herunterladen

Reaktivregler wie Potenzialfelder machen aus nahen Hindernissen Abstoßungsvektoren und aus dem Ziel einen Anziehungsvektor. Sie reagieren schnell, können aber in lokalen Minima festsitzen. Ein praxistauglicher Stapel paart reaktive Sicherheit mit globalem oder lokalem Planer.

Algorithmus

  1. Alte und physikalisch unmögliche Abstandswerte verwerfen.
  2. Gültige Beobachtungen in Roboterkoordinaten transformieren.
  3. Jedes Hindernis um Roboterradius plus Sicherheitsmarge erweitern.
  4. Anhalteweg aus Geschwindigkeit und geschätzter Verzögerung berechnen.
  5. Stoppen, wenn der Vorwärtskorridor unsicher ist; sonst zur freiesten zielausgerichteten Sektor lenken.
  6. Beschleunigung und Drehrate vor Motorbefehlen begrenzen.

Quellcode

Halte die Notentscheidung klein genug zum erschöpfenden Testen:

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)

Erfasse in einem echten System Sensorzeitstempel und gehe in sicheren Halt, wenn benötigte Daten ausbleiben.

Annahmen und Unterschiede zur Hardware

Die Welt ist von oben und zweidimensional: Sensorstrahlen sind instantan, perfekt dünn und nie vom eigenen Körper verdeckt, der Roboter eine Scheibe, die impulsfrei auf null bremsen kann. Am Raspberry-Pi-Roboter spreizt der Ultraschallkegel 15°, ToF-Messwerte hängen von Fläche und Sonne ab, und der Anhalteweg steht aus echter Masse, Motormoment und Erfassen-Entscheiden-Stellen-Latenz — alles behandelt im Lernpfad Reaktive Navigation. Der Simulator ignoriert zudem Schleifenjitter und Spannungseinbruch — behandle die Anhaltewegkurve als zu verinnerlichende Form, nicht als zu kopierende Zahl.

Schaltplan

Pegelwandle jedes 5-V-Echosignal, bevor es Raspberry-Pi-GPIO erreicht. Versorge Motoren separat und verbinde Massen an bewusstem gemeinsamem Punkt.

Blockdiagramm der Hindernisvermeidungs-Sensorarchitektur. Abstandssensoren über GPIO oder I²C, Kamera über CSI und Rad-Encoder über GPIO speisen alle einen Raspberry Pi. Der Pi treibt einen Motortreiber über PWM- und Richtungsleitungen, und der Motortreiber versorgt die Motoren.
Wahrnehmung, Rechnen und Stellen bleiben getrennt: Mehrere Sensorkanäle speisen den Pi, der die Motoren über einen isolierten Treiber an eigener Versorgung treibt. SVG herunterladen

Geführte Experimente

1. Stoppschwelle herleiten statt raten

Setze niedriges Tempo und senke die Stoppschwelle, bis der Roboter Hindernisse zu streifen beginnt. Notiere den Wert. Verdopple nun das Tempo und wiederhole.

Die nötige Schwelle verdoppelt sich nicht, denn sie ist Summe eines tempoproportionalen und eines quadratischen Terms:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Tempo Latenzterm (80 ms) Bremsterm (1 m/s²) Gesamt, mit 90 mm Radius + 50 mm 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

Darum beginnt ein Roboter, der im Schritttempo zuverlässig ausweicht, bei höherem Tempo zu treffen — und darum ist die Lösung eine tempabhängige Schwelle statt eines großen Festwerts, der den Roboter überall ängstlich macht.

2. Schwellenzittern erzeugen, dann beheben

Parke den Roboter so, dass er genau an der Stoppdistanz schwebt. Mit einer einzigen Schwelle flippt er mehrfach pro Sekunde zwischen Fahren und Drehen.

Trenne nun beides: Stoppe bei 20 cm und fahre erst ab 30 cm weiter. Das Zittern verschwindet, denn das Verhalten muss sich festlegen. Diese Lücke ist Hysterese, und dasselbe Muster fixt fast jede schwellengetriebene Schwingung in Robotercode.

3. Absichtlich einsperren

Baue eine konkave Ecke — ein Hufeisen — und lasse den Roboter hineinfahren. Mit deterministischer „Drehe zur offensten Richtung“-Regel dreht er, fährt und kommt zurück, wo er startete, für immer.

Das ist kein zu behebender Bug. Es heißt kein Gedächtnis zu haben — die klarstmögliche Demonstration der Decke reaktiver Navigation. Milderungen sind eine Zufallskomponente im Abbiegen und ein Feststeckdetektor, der nach mehreren Fehlversuchen eskaliert; die echte Lösung ist Gedächtnis — ein ganz anderer Pfad.

4. Abtastauflösung gegen Abtastzeit vergleichen

Erhöhe die Zahl der Abtastwinkel und beobachte zwei gegenläufige Dinge: Die Abbiegeentscheide werden besser, und der Roboter steht länger still.

Eine Abtastung ist ein blinder Moment — der Roboter steht und kommt nicht voran. Drei bis fünf Winkel sind der übliche Sweet Spot; darüber rechtfertigt die Extrainfo selten die Extrazeit.

Was du beobachten solltest

Verhalten Ursache
Streift Hindernisse bei Tempo Schwelle nicht für quadratischen Bremsterm skaliert
Zittert auf fester Distanz Eine Schwelle, keine Hysterese
Pendelt links-rechts auf der Stelle Neu entscheiden, bevor das Abbiegen etwas änderte
Kreist ewig in einer Ecke Deterministisches Entkommen aus symmetrischer Falle
Stoppt überall viel zu früh Schwelle für Schlimmstfall statt aktuelles Tempo gesetzt
Dreht zur Lückenkante Maximalwinkel statt gewichtetem Schwerpunkt gewählt

Umsetzung auf Hardware

Die Simulatorstrahlen sind instantan, rauschfrei und unendlich dünn. Ein echter Ultraschallsensor ist nichts davon — die Unterschiede sind die ganze Hardware-Arbeit:

Dieses Labor Ein HC-SR04 am echten Roboter
Ein dünner Strahl Ein ~15°-Kegel, etwa 53 cm breit bei 1 m
Jede Fläche reflektiert Weiche und steilwinklige Flächen geben gar nichts zurück
Instantane Messwerte Bis 25 ms je Ping, ~60 ms dazwischen
Kein Servo 100–200 ms Beruhigungszeit je Abtastwinkel
Kein Rauschen Gelegentliche Ausreißer, die einen Medianfilter brauchen
Sieht alles Ein Vorhang ist unsichtbar — darum verbaust du Bumper

Finde hier sichere Stoppdistanz und Freiraumregel, wo ein Fehler nichts kostet. Dann auf Hardware Medianfilter, Servo-Beruhigungsverzug und Kontaktsensorik dazu — das Vermeidungsalgorithmus-Tutorial hat jedes als Code.

Hardware-Checkliste

Bauteile

  • Raspberry Pi mit passendem Netzteil
  • Zwei oder mehr Time-of-Flight- oder Ultraschallsensoren
  • Optionales Kameramodul zur visuellen Erkennung
  • Motortreiber mit separater Motorversorgung
  • Differenzialantrieb-Chassis und Encoder

Den Graphen erkunden

Wo dieser Simulator verwendet wird

Die Projekte, Lernpfade und Tutorials, die auf diesem Labor aufbauen.

Weiterbauen

Ressourcen herunterladen

Nutze diese Referenzen auf der Seite, während du das Projekt durcharbeitest. Herunterladbare Projektpakete kommen erst hinzu, wenn ihr Quellcode und ihre Version veröffentlicht sind.

Häufige Fragen

Häufig gestellte Fragen

Warum genügt ein Sensor nach vorn nicht?

Ein einzelner Strahl lässt Blindbereiche nahe am Roboter und unterscheidet ein schmales Objekt nicht von einer Wand. Mehrere Blickwinkel oder ein scannender Sensor liefern genug Geometrie für einen sichereren Abbiegeentscheid.

Ersetzt Hindernisvermeidung die Pfadplanung?

Nein. Reaktive Vermeidung behandelt unmittelbare Gefahren, ein Planer wählt Fortschritt zum Ziel. Robuste Roboter kombinieren beides und lassen die Sicherheitsschicht unsichere Planbewegung überstimmen.

Ultraschall- oder Time-of-Flight-Sensor — welcher ist besser zur Hindernisvermeidung?

Ultraschallsensoren sind billig und laufen auf den meisten Flächen, haben aber schlechte Winkelauflösung und eine Nah-Blindzone. Time-of-Flight-Sensoren (ToF) geben schnellere, präzisere Kurzdistanz und schmalen Strahl, lassen sich aber von starkem Sonnenlicht, dunklen oder spiegelnden Flächen und Eckenreflexionen stören. Viele Roboter nutzen Ultraschall für grobe Abdeckung und ToF, wo präzise Kurzdistanz zählt.

Was ist eine Sensor-Blindzone und warum zählt sie?

Die Blindzone ist der Mindestbereich, unter dem ein Sensor keine gültige Distanz melden kann — bei Ultraschall gesetzt durch die Pulslänge. Ein Hindernis in der Blindzone liest sich als frei: Ein Roboter, der dem Rohwert traut, kann in etwas direkt vor ihm hineinfahren. Montiere Sensoren so, dass die Blindzone im eigenen Grundriss liegt, und behandle verdächtig kleine Messwerte als ungültig.

Wie berechne ich einen sicheren Anhalteweg?

Sichere Distanz ist Reaktionsweg plus Bremsweg plus Roboterradius plus Marge. Der Reaktionsweg wächst linear mit Tempo (Tempo mal Erfassen-Entscheiden-Stellen-Latenz), der Bremsweg aber mit dem Quadrat des Tempos — nötiger Freiraum steigt also schneller als das Tempo selbst. Darum kann wenig mehr Tempo eine viel größere Sicherheitslücke verlangen.

Warum bleibt mein Roboter vor einem Hindernis stecken?

Reaktive Verfahren wie Potenzialfelder können ein lokales Minimum erreichen, wo der Abstoßungsschub des Hindernisses die Zielanziehung tilgt — der Roboter steht oder pendelt. Lückenfolge-Lenkung, die sich auf die breiteste freie Öffnung festlegt, plus ein globaler oder lokaler Planer über der Reaktivschicht hält den Roboter aus der Selbstfalle.

Wie filtere ich verrauschte Distanzmesswerte?

Weise physikalisch unmögliche Werte und plötzliche Sprünge zurück statt danach zu handeln, stempele jede Abtastung und wende einen leichten Median- oder Zeitfilter gegen Fehlechos an. Werden benötigte Daten alt oder unverfügbar, gehe in sicheren Halt statt auf Verdacht zu lenken.

Weiterführende Literatur

Quellen

Maßgebliche Quellen, um tiefer einzusteigen als das begrenzte Lernmodell dieses Simulators.