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
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.
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.
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.
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
- Scarta i campioni di distanza obsoleti e fisicamente impossibili.
- Trasforma le osservazioni valide nel sistema di riferimento del robot.
- Espande ogni ostacolo di un valore pari al raggio del robot più il margine di sicurezza.
- Calcola la distanza di arresto dalla velocità e dalla decelerazione stimata.
- Ferma quando il corridoio frontale non è sicuro; altrimenti sterza verso il settore allineato all’obiettivo più sgombro.
- 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.
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.