Interactieve simulatorGevorderd

Simulatie van obstakelvermijding voor mobiele robots

Leer reactieve navigatie, afstandsmeting en veilig stoppen met een robotica-simulatie voor obstakelvermijding, bedoeld voor Raspberry Pi-projecten.

Categorie
Raspberry Pi
Tijd
2–3 uur
Platform
Browser · Raspberry Pi
Technisch schema: Simulatie van obstakelvermijding voor mobiele robotsCLEARANCE FIELD

01 / Begin hier

Inleiding

Obstakelvermijding zet onvolledige, ruisige metingen om in veilige beweging. Dit project scheidt waarneming, veiligheid en besturing zodat je over elke laag kunt nadenken voordat je een mobiele robot inzet. De simulatie laat sensordekking, stopafstand en storingsgevallen zien in plaats van te doen alsof één reactieve regel elk navigatieprobleem oplost.

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.

Bediening

De werkruimte bevat verplaatsbare obstakels, robotsnelheid, detectiebereik, gezichtsveld, meetruis en een drempel voor de veiligheidsafstand. Sensorstralen en de voorspelde stopafstand blijven zichtbaar. De stapmodus laat precies zien welke waarneming elke stuurbeslissing veroorzaakte.

Theorie

Een robot moet stoppen of draaien voordat zijn meegesweerde voetafdruk een obstakel raakt. De veilige afstand hangt af van de huidige snelheid, de latentie van de regelaar, het remvermogen, de onzekerheid in de meting en de fysieke straal van de robot — niet alleen van de laatste afstandswaarde.

Lijngrafiek van de benodigde veilige afstand tegen de robotsnelheid. De reactieterm groeit lineair met de snelheid, maar de totale benodigde afstand buigt omhoog omdat de remterm met het kwadraat van de snelheid groeit. Een horizontale lijn markeert de vaste robotstraal plus de veiligheidsmarge.
De benodigde vrije ruimte groeit sneller dan de snelheid: de reactieafstand is lineair, maar de remafstand groeit met v², dus een kleine snelheidsverhoging vraagt om een veel grotere veilige afstand. SVG downloaden

Reactieve regelaars zoals potentiaalvelden maken van nabije obstakels afstotende vectoren en van het doel een aantrekkende vector. Ze reageren snel, maar kunnen in lokale minima vast komen te zitten. Een praktische opbouw combineert reactieve veiligheid met een globale of lokale planner.

Algoritme

  1. Verwerp verouderde en fysisch onmogelijke afstandsmonsters.
  2. Transformeer geldige waarnemingen naar het robotcoördinatenstelsel.
  3. Vergroot elk obstakel met de robotstraal plus een veiligheidsmarge.
  4. Bereken de stopafstand uit snelheid en geschatte vertraging.
  5. Stop wanneer de gang vooruit onveilig is; stuur anders naar de meest vrije sector die op het doel is gericht.
  6. Begrens versnelling en hoeksnelheid voordat je motorcommando’s verstuurt.

Broncode

Houd de noodbepaling klein genoeg om uitputtend te 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)

In een echt systeem leg je tijdstempels van sensoren vast en ga je in een veilige gestopte toestand wanneer benodigde gegevens onbeschikbaar worden.

Aannames en hardwareverschillen

De wereld is van bovenaf gezien en tweedimensionaal: sensorstralen zijn direct, volledig dun en worden nooit door het eigen chassis van de robot geblokkeerd, en de robot is een schijf die zonder momentum tot stilstand kan remmen. Op een Raspberry Pi-robot loopt een ultrasone bundel 15° uiteen, hangen time-of-flight-metingen af van het oppervlak en de zon, en wordt de stopafstand bepaald door echte massa, motorkoppel en de latentie van waarnemen-beslissen-handelen — allemaal besproken in de routekaart voor reactieve navigatie. De simulatie negeert ook jitter in de lus en spanningsval, dus neem de stopafstandcurve als de vorm die je moet internaliseren, niet als een getal dat je overneemt.

Schakelschema

Niveauverschuif elk 5 V-echosignaal voordat het de GPIO van de Raspberry Pi bereikt. Voed de motoren apart en verbind de massa’s op een bewust gekozen gemeenschappelijk punt.

Blokschema van de sensorarchitectuur voor obstakelvermijding. Afstandssensoren over GPIO of I²C, een camera over CSI en wielencoders over GPIO voeden allemaal een Raspberry Pi. De Pi stuurt een motordriver aan via PWM- en richtingslijnen, en die motordriver voedt de motoren.
Waarneming, berekening en besturing blijven gescheiden: meerdere detectiekanalen voeden de Pi, die de motoren aanstuurt via een geïsoleerde driver op een eigen voeding. SVG downloaden

Begeleide experimenten

1. Leid de stopdrempel af in plaats van hem te gokken

Stel een lage snelheid in en verlaag de stopdrempel totdat de robot obstakels gaat raken. Noteer de waarde. Verdubbel nu de snelheid en herhaal dat.

De drempel die je nodig hebt verdubbelt niet, omdat die de som is van een term die schaalt met de snelheid en een term die schaalt met het kwadraat ervan:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Snelheid Reactieterm (80 ms) Remterm (1 m/s²) Totaal, met 90 mm straal + 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

Daarom begint een robot die bij loopsnelheid betrouwbaar uitwijkt dingen te raken zodra je hem versnelt — en daarom is de oplossing een snelheidsafhankelijke drempel in plaats van één grote vaste waarde die de robot overal schuchter maakt.

2. Veroorzaak het stotteren van de drempel en repareer het

Park de robot zo dat hij vlak op de stopafstand balanceert. Met één drempel wisselt hij meerdere keren per seconde tussen rijden en draaien.

Scheid nu de twee: stop bij 20 cm en ga pas verder bij 30 cm. Het stotteren verdwijnt omdat het gedrag zich moet vastleggen. Dat gat is hysterese, en hetzelfde patroon verhelpt vrijwel elke door een drempel veroorzaakte oscillatie in robotcode.

3. Vang hem bewust

Bouw een concave hoek — een hoefijzer — en laat de robot erin rijden. Met een deterministische regel „draai naar de meest open richting“ draait hij, rijdt hij en komt hij steeds weer terug op zijn startpunt.

Dit is geen fout om te repareren. Dit is wat het ontbreken van een kaart betekent, en het is het duidelijkst mogelijke bewijs van de grens van reactieve navigatie. De tegenmaatregelen zijn een willekeurige component in de draai en een vastlopersensor die opschaling toepast na meerdere mislukte pogingen; de échte oplossing is geheugen, en dat is een volledig ander pad.

4. Vergelijk scantresolutie met scantijd

Vergroot het aantal scanhoeken en zie twee dingen in tegengestelde richting bewegen: de draaibeslissingen worden beter, en de robot staat langer stil.

Een scan is een blind moment — de robot staat stil en maakt geen vordering. Drie tot vijf hoeken is de gebruikelijke beste keuze, en daarboven is de extra informatie zelden de extra tijd waard.

Wat je moet zien

Gedrag Oorzaak
Raakt obstakels bij hoge snelheid Drempel niet geschaald voor de kwadratische remterm
Stottert op een vaste afstand Eén drempel, geen hysterese
Slingert ter plaatse heen en weer Opnieuw beslissen voordat de draai iets heeft veranderd
Loopt eindeloos rond in een hoek Deterministische ontsnapping uit een symmetrische val
Stopt overal veel te vroeg Drempel ingesteld op het slechtste geval in plaats van op de huidige snelheid
Draait naar de rand van een opening Kiest de maximale hoek in plaats van een gewogen zwaartepunt

Naar de hardware

De stralen van de simulatie zijn direct, ruisvrij en oneindig dun. Een echte ultrasone sensor is geen van die dingen, en de verschillen vormen het hele werk op hardware:

Dit lab Een HC-SR04 op een echte robot
Een dunne straal Een kegel van ~15°, ongeveer 53 cm breed op 1 m afstand
Elke oppervlak kaatst terug Zachte en steil hellende oppervlakken geven helemaal niets terug
Directe metingen Tot 25 ms per ping, ~60 ms ertussen
Geen servo 100–200 ms stabilisatietijd per scanhoek
Geen ruis Af en toe een uitschieter die een mediaanfilter nodig heeft
Ziet alles Een gordijn is onzichtbaar — en daarom monteer je stuitschakelaars

Bepaal hier een veilige stopafstand en een regel voor de vrijste richting, waar een fout niets kost. Voeg op hardware daarna het mediaanfilter, de stabilisatietijd van de servo en de contactdetectie toe — de tutorial over het vermijdingsalgoritme heeft ze alle drie in code.

Hardwarechecklist

Componenten

  • Raspberry Pi met een ondersteunde voeding
  • Twee of meer time-of-flight- of ultrasone sensoren
  • Optionele cameramodule voor visuele detectie
  • Motordriver met aparte motorvoeding
  • Differentiaalonderstel met encoders

Verken de graaf

Waar deze simulator wordt gebruikt

De projecten, leerroutes en tutorials die op dit lab voortbouwen.

Verder bouwen

Hulpmiddelen downloaden

Gebruik deze naslag op de pagina terwijl je het project doorwerkt. Downloadbare projectpakketten komen er pas bij nadat hun broncode en versie zijn gepubliceerd.

Veelgestelde vragen

Veelgestelde vragen

Waarom is één voorwaarts gerichte sensor niet genoeg?

Eén bundel laat blinde vlekken vlak bij de robot en kan een smal voorwerp niet onderscheiden van een muur. Meerdere kijkhoeken of een scannersensor leveren genoeg geometrie om een veiligere bocht te kiezen.

Vervangt obstakelvermijding baanplanning?

Nee. Reactieve vermijding handelt directe gevaren af, terwijl een planner vooruitgang naar een doel selecteert. Robuuste robots combineren beide en laten de veiligheidslaag onveilige geplande beweging overschrijven.

Ultrasone sensor of time-of-flight — welke is beter voor obstakelvermijding?

Ultrasone sensoren zijn goedkoop en werken op de meeste oppervlakken, maar hebben een slechte hoekresolutie en een blinde zone dicht bij de sensor. Time-of-flight-sensoren (ToF) geven sneller en nauwkeuriger afstand op korte afstand en een smalle bundel, maar kunnen worden verstoord door fel zonlicht, donkere of spiegelende oppervlakken en hoekreflecties. Veel robots gebruiken ultrasoon voor grove dekking en ToF waar nauwkeurige detectie op korte afstand telt.

Wat is een blinde zone van een sensor en waarom is die belangrijk?

De blinde zone is de minimale afstand waarbinnen een sensor geen geldige afstand kan melden — voor ultrasone sensoren wordt die bepaald door de lengte van de uitgezonden puls. Een obstakel binnen de blinde zone leest als vrij, dus een robot die de ruwe waarde vertrouwt kan ergens tegenaan rijden dat vlak voor hem staat. Monteer sensoren zo dat de blinde zone binnen de eigen voetafdruk van de robot valt, en behandel verdacht kleine metingen als ongeldig.

Hoe bereken ik een veilige stopafstand?

De veilige afstand is de reactieafstand plus de remafstand plus de straal van de robot en een marge. De reactieafstand groeit lineair met de snelheid (snelheid maal de latentie van waarnemen-beslissen-handelen), maar de remafstand groeit met het kwadraat van de snelheid, dus de benodigde vrije ruimte groeit sneller dan de snelheid zelf. Daarom kan een kleine snelheidsverhoging om een veel grotere veilige afstand vragen.

Waarom blijft mijn robot staan voor een obstakel?

Reactieve methoden zoals potentiaalvelden kunnen in een lokaal minimum terechtkomen waar de afstotende kracht van een obstakel de aantrekking naar het doel opheft, waarna de robot stilstaat of oscilleert. Sturen langs de grootste opening, in combinatie met een globale of lokale planner boven de reactieve laag, houdt de robot ervan zichzelf vast te zetten.

Hoe filter ik ruisige afstandsmetingen?

Verwerp fysisch onmogelijke waarden en plotselinge sprongen in plaats van erop te reageren, geef elke meting een tijdstempel en pas een licht mediaan- of tijdfilter toe om ongewenste echo's te onderdrukken. Als benodigde gegevens verouderd of onbeschikbaar worden, ga dan in een veilige gestopte toestand in plaats van op een gok te sturen.

Verder lezen

Bronnen

Gezaghebbende bronnen om dieper te gaan dan het afgebakende leermodel van deze simulator.