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
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.
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.
- 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.
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
- Alte und physikalisch unmögliche Abstandswerte verwerfen.
- Gültige Beobachtungen in Roboterkoordinaten transformieren.
- Jedes Hindernis um Roboterradius plus Sicherheitsmarge erweitern.
- Anhalteweg aus Geschwindigkeit und geschätzter Verzögerung berechnen.
- Stoppen, wenn der Vorwärtskorridor unsicher ist; sonst zur freiesten zielausgerichteten Sektor lenken.
- 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.
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.