Percorso di costruzionePrincipianteUn fine settimana

Robot con evitamento degli ostacoli: rileva, scansiona e sterza

Un robot che gira autonomamente—rileva gli ostacoli, cerca aperture e sterza verso lo spazio libero—costruito con componenti che hai compreso e prima regolato in simulazione.

Schema tecnico: Robot con evitamento degli ostacoli: rileva, scansiona e sterzaCLEARANCE FIELD

Un robot con evitamento degli ostacoli è la costruzione naturale dopo un robot seguilinea. Un robot seguilinea segue: segue una linea che qualcuno ha tracciato per lui. Questo robot decide: senza pista e senza mappa, sente lo spazio intorno a sé e sceglie dove andare. Questa differenza—reagire al mondo invece di seguirlo—è il primo vero assaggio di autonomia, ed è ancora abbastanza semplice da capire completamente.

Il nucleo è un breve ciclo ripetuto: rileva–scansiona–decide–sterza. Il sensore ultrasonoro HC-SR04 invia un ping in avanti e misura l’eco per stimare la distanza; quando qualcosa è più vicino di una soglia di sicurezza, il robot si ferma, fa oscillare il sensore a sinistra e a destra con un servomotore SG90 e sterza verso la direzione più aperta. La soglia non è arbitraria: è una distanza di sicurezza costruita a partire dalla velocità attuale, dalla latenza tra sensore, decisione e attuazione, dalla distanza di frenatura (che cresce con il quadrato della velocità), dal raggio del robot e da un margine, tutti visibili nella curva della distanza di arresto nel simulatore.

Aggiungi i componenti necessari a un robot mobile e impari cosa fa ciascuno: un Arduino Uno per una logica a 5 V tollerante, il sensore ultrasonoro e la sua zona cieca (la distanza minima sotto la quale non può riportare nulla), il servomotore che dà al fascio un secondo punto di vista, l’H-bridge L298N che commuta la corrente dei motori che i pin logici non possono fornire, due motori TT con riduttore, dove il riduttore scambia velocità con coppia utilizzabile, un telaio 2WD con supporto girevole per la sterzata differenziale e un pacco batteria che deve alimentare motori e logica su linee separate. L’albero tecnologico ti porta anche attraverso due percorsi di apprendimento—controllo dei motori e navigazione reattiva—così le stesse idee di PWM, odometria e filtraggio incontrate nel robot seguilinea tornano qui in un contesto di navigazione.

Poi, prima di spendere qualcosa o rischiare un collegamento errato, regola il comportamento di evitamento nel simulatore del browser finché non naviga in modo pulito in uno spazio ingombro. L’area di lavoro è vista dall’alto e bidimensionale, con raggi istantanei e privi di rumore; un fascio ultrasonoro reale si apre di circa 15°, è bloccato dal corpo stesso del robot ed è disturbato da superfici morbide o inclinate, quindi filtrerai le letture, aggiungerai un filtro mediano e una breve pausa di assestamento dopo che il servomotore si è mosso prima di fidarti di una distanza sull’hardware. Trovare in simulazione una distanza di arresto sicura e una regola per la direzione chiara elimina quasi tutti i dubbi prima che il robot si muova.

Solo dopo colleghi il robot vero— trigger ed eco alla tensione corretta, segnale del servomotore a un pin che supporta PWM, PWM e direzione dei motori al driver, batteria dei motori solo al pin VM del driver, ogni massa collegata insieme— e lo fai girare su un pavimento con scatole o sedie. Le stesse lezioni di rilevamento e filtraggio portano direttamente al Micromouse con labirinto a muri se in seguito vuoi aggiungere la mappatura, o alla navigazione ROS 2 se aggiungi un Raspberry Pi.

Percorri l’albero tecnologico qui sotto dall’alto verso il basso. Ogni nodo si sblocca quando i suoi prerequisiti sono completi e i progressi vengono salvati su questo dispositivo, così puoi costruire il robot durante un fine settimana senza perdere il punto.

Lista dei componenti

Componente Quantità Costo indicativo Note
Arduino Uno 1 $5–8 La logica a 5 V è davvero utile qui: l’eco dell’HC-SR04 è a 5 V
HC-SR04 1 $2 Un VL53L0X è un buon secondo sensore, non un sostituto
Servomotore SG90 1 $2 Per la testa di scansione. MG90S se funzionerà per ore
L298N 1 $2–4 Oppure un TB6612FNG, che disperde molto meno della batteria
Motore TT con riduttore 2 $4
Telaio 2WD 1 $6–10
Pacco batteria 1 $6 6×AA NiMH oppure 2×18650
Interruttori a urto 2 $1 Aggiungili. Vedi sotto

Totale: circa $30–40.

I due interruttori a urto sono i quaranta centesimi meglio spesi sul robot e sono la parte che la maggior parte delle costruzioni omette. Ogni sensore di distanza ha superfici che non può vedere: un sonar è cieco alle tende e ai muri incontrati con un angolo ripido e un robot senza sensori di contatto spingerà una tenda finché qualcosa non cede. Due interruttori dietro un paraurti avvolto trasformano «di solito evita le cose» in «non si blocca mai contro qualcosa che non poteva vedere».

Come si collega tutto

Da A Nota
HC-SR04 VCC, GND 5 V, GND ~15 mA, con picchi durante un ping
HC-SR04 Trig D9 Qualsiasi pin digitale
HC-SR04 Echo D10 Uscita a 5 V: va bene su un Uno, richiede un divisore su una scheda a 3.3 V
Segnale del servomotore D6 La libreria Servo usa il Timer 1, che gestisce anche il PWM sui pin D9/D10
Alimentazione del servomotore 5 V separata, massa comune 650 mA in stallo: non il pin 5 V dell’Arduino
Driver ENA, ENB D5, D3 Pin che supportano PWM. Rimuovi i jumper di enable dell’L298N
Driver IN1–IN4 D8, D7, D4, D2
Interruttori a urto D11, D12, INPUT_PULLUP COM a terra, NO al pin
Batteria + VM / +12V del driver Mai l’Arduino
Tutte le masse Un punto Arduino, driver, alimentazione del servomotore, negativo della batteria

Fai attenzione al conflitto del timer: la libreria Servo prende il Timer 1, che su un Uno gestisce il PWM sui pin 9 e 10. Metti il PWM dei motori su 3, 5, 6 o 11 e il servomotore su un pin qualsiasi: il problema non si presenta. Metti l’abilitazione dei motori sul pin 9 e il suo controllo della velocità smetterà silenziosamente di funzionare nel momento in cui colleghi un servomotore.

La distanza di arresto, calcolata invece che indovinata

La soglia di arresto è il numero più importante di questo progetto e non è arbitraria. È la somma di quattro distanze:

stop_distance = (v x t_latency) + (v^2 / (2 x a_brake)) + robot_radius + margin
Termine Da dove viene Tipico
Latenza di rilevamento e decisione Ping (fino a 25 ms), assestamento del servomotore, periodo del ciclo 60–100 ms
Distanza di frenatura Velocità al quadrato divisa per due volte la decelerazione Cresce rapidamente
Raggio del robot Dal bordo anteriore del telaio al centro di rotazione 80–100 mm
Margine Perché il cono del sensore è largo 15° e si trova su cose morbide 50 mm

Calcolato per un robot a 0.3 m/s con 80 ms di latenza e 1.0 m/s² di frenatura:

= (0.3 x 0.08) + (0.09 / 2.0) + 0.09 + 0.05
= 0.024 + 0.045 + 0.09 + 0.05 = 0.21 m

Quindi circa 21 cm. Ora raddoppia la velocità a 0.6 m/s:

= 0.048 + 0.18 + 0.09 + 0.05 = 0.37 m

La soglia non è raddoppiata: è cresciuta del 76%, perché il termine di frenatura va con il quadrato della velocità. Ecco perché un robot che evita in modo affidabile a velocità di camminata comincia a sbattere contro le cose quando lo acceleri, e perché la soluzione è una soglia dipendente dalla velocità, non un unico grande numero fisico che rende il robot timido ovunque.

Costruiscilo in traguardi

# Traguardo Il test Un risultato positivo sembra
1 I motori guidano Avanti, indietro, rotazione in entrambe le direzioni su blocchi Tutti e sei gli stati funzionano; conosci la deadband di ogni ruota
2 La distanza viene letta Punta a un muro a 30 cm e stampa per un minuto Stabile entro un centimetro o due, senza zeri
3 Il timeout funziona Punta all’aria aperta e al soffitto Il ciclo mantiene la frequenza: l’assenza di eco non deve significare robot congelato
4 Filtro mediano Fai passare ripetutamente una mano nel fascio Spariscono le letture selvagge isolate; l’avvicinamento reale viene ancora registrato
5 Il servomotore scansiona Comanda −60°, 0°, +60° e stampa la distanza a ciascuno Scansione ripetibile, con una pausa di assestamento prima di ogni ping
6 La pausa di assestamento è dimostrata Rimuovi deliberatamente la pausa Le letture si spargono sugli angoli: ora conosci quel guasto
7 Soglia di arresto Porta il robot verso un muro e lascialo fermarsi Si ferma con il margine calcolato, non per fortuna
8 Decisione di svolta Mettilo davanti a un angolo con un lato aperto Sterra verso il lato aperto, non a caso
9 Isteresi Posizionalo fermo appena sopra la soglia Si impegna in una decisione invece di oscillare
10 Recupero dagli urti Portalo contro un cuscino Il sonar non lo vede, l’interruttore lo intercetta e il robot arretra e sterza
11 Marcia libera Cinque minuti in una stanza ingombra Sopravvive; quando si blocca sai dire in quale stato è

Il traguardo 10 è quello che distingue una dimostrazione da un robot. Un cuscino assorbe completamente l’impulso ultrasonoro, quindi il sensore segnala uno spazio aperto e il robot ci entra a tutta velocità. Senza un interruttore a urto, poi spinge finché i motori non si bloccano.

Risoluzione dei problemi

Sintomo Causa probabile Soluzione
Il robot si blocca a intervalli casuali pulseIn senza timeout Passa un timeout di 25000 µs; gestisci esplicitamente l’assenza di eco
Si ferma d’emergenza in una stanza vuota Sta trattando un timeout come 0 cm Un timeout significa lontano, non vicino. Restituisci un valore sentinella
Entra in tende e cuscini Il suono viene assorbito: è fisica, non un bug Aggiungi interruttori a urto
Entra nei muri di traverso Il ping riflette lontano dal ricevitore Stessa soluzione; scansiona anche più angoli
Sterza con sicurezza verso un muro Legge prima che il servomotore si sia assestato Aggiungi 100–200 ms dopo aver comandato l’angolo, prima di fare il ping
Vibra davanti agli ostacoli Una sola soglia, nessuna isteresi Fermati a 20 cm e non ripartire finché non arrivi a 30 cm
Il servomotore vibra e la scheda si resetta Corrente del servomotore attraverso l’Arduino Alimentazione separata a 5 V per il servomotore, massa comune
Il controllo della velocità dei motori ha smesso di funzionare La libreria Servo ha preso il Timer 1 (pin 9, 10) Sposta il PWM dei motori su 3, 5, 6 o 11
Resta bloccato in un angolo per sempre Nessuna memoria: intrinseco alla navigazione reattiva Aggiungi una componente casuale e una fuga dal rilevamento del blocco
Evita bene lentamente, colpisce le cose veloce Soglia fissa, termine quadratico di frenatura Rendi la soglia dipendente dalla velocità
Letture selvagge quando due robot girano insieme Si sentono a vicenda i propri ping Scaglia i tempi dei ping

Da dove proseguire

Aggiungi l’inseguimento delle pareti. Un robot che mantiene una distanza fissa da una parete su un lato percorre una stanza in modo deterministico invece di vagare, ed è il primo comportamento che comincia a sembrare un piano. È una piccola modifica al codice e una grande modifica concettuale.

Aggiungi un secondo tipo di sensore. Un VL53L0X fallisce su superfici quasi esattamente opposte al sonar: quelle scure e opache e gli specchi, rispetto a quelle morbide e inclinate. Insieme coprono molto più della stanza rispetto a uno dei due da solo.

Accetta il limite e prosegui. Un robot reattivo non può essere mandato ovunque, non può promettere di aver coperto il pavimento e può girare per sempre in una stanza a ferro di cavallo. Sono proprietà dell’assenza di una mappa, non bug. Quando iniziano a contare, il micromouse aggiunge mappatura e pianificazione e il robot per la copertura affronta direttamente la domanda «sono passato ovunque?».

Roadmap del progetto

Il percorso di costruzione

Segui l'albero tecnologico dai componenti fino a un robot funzionante. Ogni nodo si sblocca quando i suoi prerequisiti sono completati, e i tuoi progressi vengono salvati su questo dispositivo.

0 / 18 completati

100%
Percorso

Fondamenti dell'elettronica per robot

Percorso di apprendimento

Apri il percorso
Costruzione

Collega il robot

45 min

Costruzione

Assembla ed esegui

60 min

Obiettivo

Robot con evitamento degli ostacoli completato

L'hai costruito

Componenti

Tutorial in questo percorso

Esercitati prima di cablare

Mettilo a punto nel simulatore

Il percorso di costruzione passa per un laboratorio nel browser. Ottieni qui il comportamento giusto, poi trasferisci le tue impostazioni sul robot reale.

Domande frequenti

Come funziona un robot con evitamento degli ostacoli?

Guida in avanti mentre un sensore ultrasonoro controlla la distanza davanti. Quando qualcosa è più vicino di una soglia impostata, il robot si ferma, fa oscillare il sensore a sinistra e a destra con un servomotore per misurare la distanza in ogni direzione e sterza verso la direzione più aperta, poi riprende a guidare. Tutto questo è un breve ciclo rileva–scansiona–decide–sterza che viene eseguito molte volte al secondo.

Qual è il sensore migliore per un robot con evitamento degli ostacoli?

Il sensore ultrasonoro HC-SR04 è la scelta predefinita: è economico, facile da collegare e affidabile per alcuni metri. Un sensore a tempo di volo dà una lettura più stretta, più rapida e precisa, se ti serve, ma per il primo robot che evita gli ostacoli l'ultrasono offre il giusto equilibrio tra costo e semplicità.

Devo comprare i componenti prima di iniziare questo progetto?

No. Il rilevamento e la logica di evitamento funzionano nel simulatore del browser, quindi puoi capire e regolare il comportamento prima di comprare qualsiasi cosa. Solo i passaggi finali di costruzione—cablaggio e assemblaggio—richiedono Arduino, HC-SR04, servomotore, driver, motori, telaio e batteria fisici.

Perché il mio robot con evitamento degli ostacoli non funziona?

I tre colpevoli abituali sono una lettura ultrasonora rumorosa o bloccata (aggiungi un filtro mediano e lascia il sensore libero), la lettura del sensore prima che il servomotore abbia finito di muoversi (aggiungi una breve pausa di assestamento) e l'alimentazione dei motori direttamente dall'Arduino invece che attraverso il driver, che causa brown-out e resetta la scheda.

In che modo è diverso da un robot seguilinea?

Un robot seguilinea segue una pista predisposta per lui; un robot con evitamento degli ostacoli non ha una pista e deve decidere dove andare. Aggiunge un sensore di scansione e un vero ciclo decisionale, il che lo rende il naturale secondo robot da costruire dopo un robot seguilinea.