Simulatore interattivoIntermedio

Simulatore di evitamento ostacoli per robot mobili

Impara la navigazione reattiva, la misurazione della distanza e l'arresto sicuro in un simulatore di evitamento ostacoli per progetti con Raspberry Pi.

Categoria
Raspberry Pi
Tempo
2–3 ore
Piattaforma
Browser · Raspberry Pi
Schema tecnico: Simulatore di evitamento ostacoli per robot mobiliCLEARANCE FIELD

01 / Inizia qui

Introduzione

L'evitamento degli ostacoli trasforma misurazioni incomplete e rumorose in movimento sicuro. Questo progetto separa percezione, sicurezza e sterzo, così puoi ragionare su ogni livello prima di distribuire un robot mobile. Il simulatore mostra copertura dei sensori, distanza di arresto e casi di guasto invece di fingere che una singola regola reattiva risolva ogni problema di navigazione.

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.

Controlli

L’area di lavoro include ostacoli mobili, velocità del robot, portata di rilevamento, campo visivo, rumore nelle misurazioni e una soglia di distanza di sicurezza. I raggi dei sensori e la distanza di arresto prevista restano visibili. La modalità passo mostra esattamente quale osservazione ha causato ogni decisione di sterzo.

Teoria

Un robot deve fermarsi o cambiare direzione prima che il suo ingombro spazzato incontri un ostacolo. La distanza sicura dipende dalla velocità attuale, dalla latenza del controllore, dalla capacità di frenata, dall’incertezza della misurazione e dal raggio fisico del robot, non solo dall’ultimo valore di distanza.

Grafico a linee della distanza sicura richiesta in funzione della velocità del robot. La componente di reazione cresce linearmente con la velocità, ma la distanza totale richiesta curva verso l'alto perché il termine di frenata cresce con il quadrato della velocità. Una linea di base indica il raggio fisso del robot più il margine di sicurezza.
Lo spazio richiesto cresce più rapidamente della velocità: la distanza di reazione è lineare, ma quella di frenata cresce con v², quindi un piccolo aumento di velocità richiede un intervallo sicuro molto maggiore. Scarica SVG

I controllori reattivi come i campi di potenziale trasformano gli ostacoli vicini in vettori repulsivi e l’obiettivo in un vettore attrattivo. Rispondono rapidamente, ma possono rimanere intrappolati in minimi locali. Una pila pratica abbina la sicurezza reattiva a un pianificatore globale o locale.

Algoritmo

  1. Scarta i campioni di distanza obsoleti e fisicamente impossibili.
  2. Trasforma le osservazioni valide nel sistema di riferimento del robot.
  3. Espande ogni ostacolo di un valore pari al raggio del robot più il margine di sicurezza.
  4. Calcola la distanza di arresto dalla velocità e dalla decelerazione stimata.
  5. Ferma quando il corridoio frontale non è sicuro; altrimenti sterza verso il settore allineato all’obiettivo più sgombro.
  6. Limita l’accelerazione e la velocità angolare prima di inviare i comandi ai motori.

Codice sorgente

Mantieni la decisione di emergenza abbastanza piccola da poterla testare in modo esaustivo:

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 un sistema reale, registra i timestamp dei sensori ed entra in uno stato di arresto sicuro quando i dati necessari diventano non disponibili.

Ipotesi e differenze hardware

Il mondo è visto dall’alto ed è bidimensionale: i raggi dei sensori sono istantanei, perfettamente sottili e mai occultati dal corpo stesso del robot; il robot è un disco che può frenare fino a zero senza inerzia. Su un robot con Raspberry Pi, i fasci ultrasonori si disperdono di 15°, le letture a tempo di volo dipendono dalla superficie e dal sole e la distanza di arresto è determinata dalla massa reale, dalla coppia del motore e dalla latenza tra rilevamento, decisione e attuazione: sono tutti aspetti trattati nel percorso di apprendimento sulla navigazione reattiva. Il simulatore ignora anche il jitter del ciclo e il calo di tensione, quindi considera la curva della distanza di arresto come una forma da interiorizzare, non come un numero da copiare.

Schema elettrico

Esegui la conversione di livello di qualsiasi segnale di eco a 5 V prima che raggiunga i GPIO del Raspberry Pi. Alimenta separatamente i motori e collega le masse in un punto comune scelto deliberatamente.

Diagramma a blocchi dell'architettura dei sensori per l'evitamento degli ostacoli. I sensori di distanza su GPIO o I²C, una fotocamera su CSI e gli encoder delle ruote su GPIO alimentano tutti un Raspberry Pi. Il Pi comanda un driver del motore tramite PWM e linee di direzione, e il driver alimenta i motori.
Percezione, calcolo e attuazione restano separati: più canali di rilevamento alimentano il Pi, che comanda i motori tramite un driver isolato con alimentazione propria. Scarica SVG

Esperimenti guidati

1. Deriva la soglia di arresto invece di indovinarla

Imposta una velocità bassa e abbassa la soglia di arresto finché il robot non inizia a toccare gli ostacoli. Annota il valore. Raddoppia ora la velocità e ripeti.

La soglia necessaria non raddoppia, perché è la somma di un termine che scala con la velocità e uno che scala con il suo quadrato:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Velocità Termine di latenza (80 ms) Termine di frenata (1 m/s²) Totale, con raggio 90 mm + margine 50 mm
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

Ecco perché un robot che evita gli ostacoli in modo affidabile a passo d’uomo inizia a colpirli quando aumenti la velocità, e perché la correzione è una soglia dipendente dalla velocità anziché un unico valore fisso elevato che rende il robot timido ovunque.

2. Produci il tremolio della soglia, poi risolvilo

Piazza il robot in modo che resti esattamente alla distanza di arresto. Con una sola soglia passa più volte al secondo tra guida e sterzo.

Ora separa le due: fermati a 20 cm e non ripartire finché non raggiungi 30 cm. Il tremolio scompare perché il comportamento deve assumere un impegno. Quello scarto è l’isteresi, e lo stesso schema risolve quasi ogni oscillazione pilotata da soglia nel codice di un robot.

3. Intrappolalo deliberatamente

Costruisci un angolo concavo, a ferro di cavallo, e fai entrare il robot. Con una regola deterministica di «svolta verso la direzione più aperta» girerà, guiderà e tornerà per sempre nel punto da cui è partito.

Questo non è un bug da correggere. È ciò che significa non avere una mappa, ed è la dimostrazione più chiara del limite della navigazione reattiva. Le mitigazioni sono una componente casuale nella svolta e un rilevatore di blocco che aumenta la severità dopo diversi tentativi falliti; la soluzione reale è la memoria, che è un percorso completamente diverso.

4. Confronta la risoluzione della scansione con il tempo di scansione

Aumenta il numero di angoli di scansione e osserva due aspetti muoversi in direzioni opposte: le decisioni di svolta migliorano, ma il robot passa più tempo fermo.

Una scansione è un momento cieco: il robot è fermo e non progredisce. Tre-cinque angoli è di solito il punto d’equilibrio, e oltre quello raramente le informazioni aggiuntive giustificano il tempo aggiuntivo.

Cosa devi osservare

Comportamento Causa
Tocca gli ostacoli ad alta velocità Soglia non scalata sul termine quadratico di frenata
Tremola a una distanza fissa Una soglia, nessuna isteresi
Oscilla sul posto a sinistra e destra R decide di cambiare prima che la svolta produca un effetto
Entra in un ciclo perpetuo in un angolo Fuga deterministica da una trappola simmetrica
Si ferma ovunque troppo presto Soglia impostata per il caso peggiore anziché per la velocità attuale
Svolta verso il bordo di un varco Sceglie l’angolo massimo anziché un baricentro pesato

Passaggio all’hardware

I raggi del simulatore sono istantanei, privi di rumore e infinitamente sottili. Un vero sensore ultrasonoro non è nessuna di queste cose, e le differenze costituiscono tutto il lavoro sull’hardware:

Questo laboratorio Un HC-SR04 su un robot reale
Un raggio sottile Un cono di ~15°, largo circa 53 cm a 1 m
Ogni superficie riflette Le superfici morbide e fortemente inclinate non restituiscono alcun segnale
Letture istantanee Fino a 25 ms per ping, ~60 ms tra un ping e l’altro
Nessun servomotore 100–200 ms di tempo di assestamento per ogni angolo di scansione
Nessun rumore Valori improvvisi occasionali che richiedono un filtro mediano
Vede tutto Una tenda è invisibile: ecco perché si installano interruttori a urto

Trova qui una distanza di arresto sicura e una regola per la direzione libera, dove un errore non costa nulla. Poi sull’hardware aggiungi il filtro mediano, il ritardo di assestamento del servomotore e il rilevamento del contatto: il tutorial sull’algoritmo di evitamento contiene il codice per tutti e tre.

Checklist hardware

Componenti

  • Raspberry Pi con un alimentatore supportato
  • Due o più sensori a tempo di volo o ultrasonori
  • Modulo fotocamera opzionale per il rilevamento visivo
  • Driver del motore con alimentazione separata per i motori
  • Telaio a trazione differenziale e encoder

Esplora il grafo

Dove si usa questo simulatore

I progetti, i percorsi di apprendimento e i tutorial che si basano su questo laboratorio.

Continua a costruire

Scarica le risorse

Usa questi riferimenti nella pagina mentre lavori al progetto. I pacchetti di progetto scaricabili verranno aggiunti solo dopo la pubblicazione del loro codice sorgente e della loro versione.

Domande comuni

Domande frequenti

Perché un solo sensore frontale non basta?

Un singolo fascio lascia zone cieche vicino al robot e non distingue un oggetto stretto da un muro. Più punti di vista o un sensore a scansione forniscono una geometria sufficiente per scegliere una svolta più sicura.

L'evitamento degli ostacoli sostituisce la pianificazione del percorso?

No. L'evitamento reattivo gestisce i pericoli immediati, mentre un pianificatore seleziona il progresso verso un obiettivo. I robot robusti combinano entrambi e lasciano che il livello di sicurezza sovrascriva i movimenti pianificati non sicuri.

Sensore ultrasonoro o a tempo di volo: quale è migliore per evitare gli ostacoli?

I sensori ultrasonori sono economici e funzionano sulla maggior parte delle superfici, ma hanno una scarsa risoluzione angolare e una zona cieca vicino al sensore. I sensori a tempo di volo (ToF) forniscono una distanza a corto raggio più rapida e precisa e un fascio stretto, ma possono essere disturbati dalla luce solare intensa, da superfici scure o simili a specchi e dai riflessi degli angoli. Molti robot usano gli ultrasuoni per una copertura grossolana e i ToF dove conta la misurazione precisa a corto raggio.

Che cos'è una zona cieca di un sensore e perché è importante?

La zona cieca è la distanza minima sotto la quale un sensore non può riportare una distanza valida: per i sensori ultrasonori è determinata dalla lunghezza dell'impulso emesso. Un ostacolo nella zona cieca viene letto come spazio libero, quindi un robot che si fida del valore grezzo può finire contro qualcosa immediatamente davanti a sé. Monta i sensori in modo che la zona cieca rientri nell'ingombro del robot e considera sospette le letture troppo piccole come non valide.

Come calcolo una distanza di arresto sicura?

La distanza sicura è la distanza di reazione più quella di frenata, più il raggio del robot e un margine. La distanza di reazione cresce linearmente con la velocità (velocità per la latenza tra rilevamento, decisione e attuazione), mentre quella di frenata cresce con il quadrato della velocità, quindi lo spazio richiesto aumenta più rapidamente della velocità. Ecco perché un piccolo aumento di velocità può richiedere un intervallo sicuro molto maggiore.

Perché il mio robot si blocca davanti a un ostacolo?

Metodi reattivi come i campi di potenziale possono raggiungere un minimo locale in cui la spinta repulsiva di un ostacolo annulla l'attrazione verso l'obiettivo e il robot si ferma o oscilla. Lo sterzo che segue il varco, scegliendo l'apertura libera più larga, insieme a un pianificatore globale o locale sopra il livello reattivo, impedisce al robot di intrappolarsi.

Come filtro le letture rumorose della distanza?

Scarta i valori fisicamente impossibili e i salti improvvisi invece di agire su di essi, assegna un timestamp a ogni campione e applica un leggero filtro mediano o temporale per sopprimere echi spuri. Se i dati necessari diventano obsoleti o non disponibili, entra in uno stato di arresto sicuro invece di sterzare con una supposizione.

Per approfondire

Fonti

Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.