Costruisci un robot di copertura che percorre un'intera stanza
Un robot che copre una stanza autonomamente con soli due finecorsa a urto — e una valutazione misurata per capire se aggiungere odometria e un pianificatore valga la pena.
Cosa stai costruendo
Un robot il cui compito non è arrivare da qualche parte, ma essere passato ovunque. Sembra un problema più piccolo della navigazione, ma è più grande, perché non c’è un bersaglio verso cui orientarsi né un modo per stabilire, da dove ti trovi, se stai vincendo.
È anche il progetto che premia maggiormente la misurazione prima della costruzione. Tutta la prima metà consiste in un robot con due interruttori e nessuna idea di dove si trovi, eppure funziona — una scoperta genuinamente scomoda se stavi per dedicare un fine settimana a una mappa.
Il numero che governa il progetto
L’area del pavimento divisa per la larghezza della spazzola è la distanza che percorrerebbe un robot perfetto:
d_optimal = A / w
Una stanza di 20 m² e una spazzola da 250 mm danno 80 m. Ogni strategia viene valutata come multiplo di tale valore, e i multipli non sono vicini:
| Strategia | Distanza per raggiungere il 90% | In quella stanza, a 0.25 m/s |
|---|---|---|
| Passata perfetta | 1.0× | 5 min |
| Passata a serpentina pianificata | 1.35× | 7 min |
| Rimbalzo casuale | 2.9× | 15 min |
| Spirale e ricollocazione | 5.5× | 30 min |
Questi valori provengono dall’esecuzione del simulatore di copertura su cinque stanze. Prima di acquistare qualsiasi cosa, eseguilo tu e sposta i mobili mentre avanza — i numeri cambiano con la stanza, ed è la parte principale della lezione.
Elenco dei componenti
| Componente | Quantità | Costo approssimativo | Note |
|---|---|---|---|
| Arduino Uno | 1 | $5–8 | La modalità a rimbalzo casuale richiede quasi nulla; la passata pianificata richiede gli encoder |
| Finecorsa a urto | 2 | $1 | Sinistra e destra, dietro una scocca avvolta. Il sensore principale in questo progetto |
| Schiera di sensori IR a riflettanza | 1 | $5 | Rilevamento del bordo — puntata verso il basso sul bordo del pavimento, non verso una linea |
| Motori N20 con encoder | 2 | $16 | Obbligatori per la passata pianificata; il percorso casuale funziona senza di essi |
| TB6612FNG | 1 | $3 | |
| Telaio 2WD | 1 | $10 | Qui è meglio rotondo che quadrato — non si incastra negli angoli |
| Pacco batteria | 1 | $8 | Le passate di copertura sono lunghe; la capacità conta più che in altre costruzioni |
Totale: circa $50–65.
Questo è l’unico progetto del sito in cui il sensore più economico è quello principale. Due finecorsa a urto e una svolta casuale coprono un’intera stanza, se hai tempo a sufficienza — ed è esattamente così che funzionava la prima generazione di robot aspirapolvere; vale la pena costruirlo prima di ricorrere a qualcosa di più sofisticato.
La schiera IR viene usata in modo insolito: puntata verso il basso sul pavimento come sensore di dislivello anziché in avanti verso una linea. Un robot che copre una stanza troverà la cima delle scale.
Ordine di costruzione
1 — Metti in gara le strategie nel simulatore. Un’ora qui ti fa risparmiare un fine settimana. Osserva la curva di copertura appiattirsi e nota che tutte e tre le strategie sono identiche per la prima metà del pavimento.
2 — Costruisci il sistema di trazione e il paraurti, e nient’altro. Due microswitch a leva dietro una scocca elastica che avvolge almeno 45° su ciascun lato, cablati normalmente aperti a massa con i pull-up interni attivati. Esegui correttamente l’eliminazione del rimbalzo — una pressione genera nove fronti e un interrupt che effettua il conteggio segnalerà una collisione nove volte.
3 — Aggiungi i sensori di dislivello prima che il robot venga mai lasciato funzionare senza supervisione. Sensori di riflettanza rivolti verso il basso agli angoli anteriori, letti a ogni ciclo. Poi determina quanto veloce ti è consentito avanzare: latenza per velocità, più v²/2µg di frenata, deve rientrare nella distanza tra il punto in cui il sensore vede il dislivello e quello in cui le ruote lo raggiungono.
4 — Scrivi il rimbalzo casuale e lascialo funzionare per un’ora. Avanza in linea retta; in caso di urto, torna indietro brevemente e ruota di una quantità casuale compresa tra 90° e 270°. La casualità è essenziale — un angolo di riflessione fisso trasforma la stanza in un tavolo da biliardo e il robot traccia per sempre un percorso chiuso.
5 — Misuralo. Traccia una griglia sul pavimento con gesso o nastro adesivo, eseguilo per un tempo prestabilito e conta i quadratini. Questa è la base di riferimento ed è l’unico modo onesto di sapere se il passo 6 ti sia utile.
6 — Solo ora, aggiungi l’odometria. Encoder e odometria a trazione differenziale forniscono una stima della posizione. Pianifica file a serpentina distanti una spazzola, con una sovrapposizione del 10–20%, e aggira i mobili invece di investirli.
7 — Osserva le file smettere di essere parallele. Succederà entro circa dieci file, perché l’odometria deriva. Non è un bug del pianificatore; è il motivo per cui le macchine commerciali montano un giroscopio, una camera rivolta al soffitto o un segnalatore. Decidere se aggiungerne uno è la vera conclusione di questo progetto.
Note hardware che contano
Telaio rotondo, ruote sul diametro. Un robot circolare può sempre ruotare per uscire da una collisione in cui è entrato. Uno quadrato può incastrarsi in diagonale in un angolo e per liberarsi richiede un paraurti posteriore e un comportamento aggiuntivo.
La spazzola deve essere più larga del robot. Non è decorazione. Un pianificatore mantiene il corpo lontano da ogni parete, quindi tutto ciò che il corpo non raggiunge è pavimento che non verrà mai coperto — nel simulatore, 130 dei 133 quadratini mancati dal pianificatore si trovano entro due celle da una parete o da una gamba di tavolo. Una spazzola a sbalzo è ciò che li recupera.
Due metà di paraurti, non una. Un singolo interruttore ti dice che hai colpito qualcosa. Due ti dicono quale lato, l’informazione necessaria alla direzione di svolta, e costa un pin.
Dimensiona la batteria in metri, non in minuti. Un’ora a 0.25 m/s equivale a 900 m. Una stanza con rimbalzo casuale richiede circa 540 m per raggiungere il 99%. Tre stanze sono impossibili, ed è proprio questa aritmetica, non alcuna intuizione algoritmica, che ha spinto l’intera categoria di prodotti verso la creazione di mappe.
Come appare un risultato buono
La copertura è uno dei pochi comportamenti robotici associati a un singolo numero pulito, e il confronto tra le strategie è netto:
| Strategia | Copertura dopo 1× l’area della stanza percorsa | Dopo 3× | Dopo 10× |
|---|---|---|---|
| Rimbalzo casuale | ~35% | ~70% | ~93% |
| Spirale, poi rimbalzo | ~45% | ~78% | ~95% |
| Passata pianificata a boustrofedon | ~85% | ~99% | ~99% |
La forma di quelle colonne è l’intera lezione. Il rimbalzo casuale si avvicina alla copertura completa in modo asintotico senza mai raggiungerla del tutto — gli ultimi punti percentuali richiedono più tempo dei primi novanta. Una passata pianificata vi arriva all’incirca con una sola percorrenza e poi non ha più nulla da fare.
Questa è la differenza tra avere una memoria e non averla, espressa da un numero.
| Misura | Valore tipico |
|---|---|
| Distanza tra le linee di passata | 80–90% della larghezza efficace del robot, in modo che le passate si sovrappongano |
| Deriva della direzione durante una passata da 4 m | 3–8° senza giroscopio, meno di 2° con uno |
| Errore di posizione dopo dieci passate | 15–40 cm con la sola odometria |
| Dimensione pratica della stanza per la sola odometria | Fino a circa 4 × 4 m prima che la passata diventi visibilmente storta |
L’ultima riga è il limite reale di questo progetto. Una passata pianificata dipende dalla conoscenza della propria posizione, e l’odometria deriva senza limite — quindi oltre circa 4 m le passate parallele smettono di essere parallele e si aprono dei vuoti. Non è un problema di regolazione; è il motivo per cui esiste la creazione di mappe.
Quando va storto
| Sintomo | Causa abituale |
|---|---|
| Traccia sempre lo stesso ciclo | L’angolo di rimbalzo è deterministico; rendilo casuale |
| Copre rapidamente il 90%, poi sembra fermarsi | Funziona come progettato — è la curva esponenziale di copertura |
| Un urto viene contato più volte | Nessuna eliminazione del rimbalzo oppure una finestra più breve del rimbalzo di 5 ms |
| Esce da un gradino | Troppo veloce per il budget dei sensori di dislivello oppure ciclo bloccante |
| Le file derivano e non sono più parallele | Odometria, non pianificatore. Aggiungi un riferimento per la direzione |
| Salta strisce tra le file | La distanza tra le file è impostata esattamente alla larghezza della spazzola senza sovrapposizione |
| Si incastra in un angolo | Telaio quadrato oppure assenza di paraurti posteriore |
| Non raggiunge mai dietro il divano | Gli spostamenti tra una fila e l’altra non sono mai stati pianificati |
Sei degli otto problemi riguardano i sensori, la meccanica o l’aritmetica anziché l’algoritmo — la stessa distribuzione del micromouse, e per la stessa ragione.
Per lo strato reattivo condiviso con ogni altro robot mobile, il robot che evita gli ostacoli è la costruzione più semplice con gran parte dello stesso hardware, mentre il percorso di navigazione reattiva copre i sensori e il comportamento sottostanti a entrambi.
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
Componenti
- ControllerArduino UnoLa scheda a 8 bit tollerante con cui la maggior parte delle persone scopre la robotica.
- SensoreMicroswitch a levaL'unico bit di sensazione che dice a un robot che ha già colpito qualcosa.
- SensoreArray di sensori a riflessione IRUna fila di occhi a infrarossi che indica al robot dove si trova la linea.
- AttuatoreMotore con encoder N20Un micromotore con ingranaggi metallici e un encoder sul retro, così il robot sa quanto è avanzato davvero.
- DriverDriver per motori TB6612FNGUn ponte H a MOSFET che conserva i volt che hai davvero pagato.
- TelaioTelaio robotico 2WDLa piattaforma su cui si montano due motori, un caster libero e tutta la tua elettronica.
- AlimentazionePacco batteria e alimentazione del robotLa differenza tra un robot che funziona e uno che continua a riavviarsi.
Tutorial in questo percorso
- Intermedio · 30 minPianificazione di copertura: percorre un'intera stanzaScopri perché un robot senza mappa deve percorrere sette volte la distanza necessaria per completare la stessa stanza.
- Principiante · 25 minSensori di urto: eliminazione del rimbalzo nelle collisioniUna pressione, nove transizioni—e l'interrupt conta ognuna di esse.
- Intermedio · 25 minFermarsi sul bordo: latenza e distanza di frenaturaQuanto oltre la linea appena vista viaggia un robot e quale velocità rientra nel margine.
- Principiante · 17 min di letturaLeggi gli encoder in quadratura per distanza e velocitàTrasforma gli impulsi di un encoder in quadratura in misure affidabili di direzione, distanza e velocità della ruota.
- Intermedio · 20 min di letturaOdometria differenziale con encoder sulle ruoteIntegra il movimento delle ruote sinistra e destra per ottenere la posa di un robot mobile, poi identifica e calibra la deriva.
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
Questo è un robot aspirapolvere?
È la metà di navigazione di uno, che è la metà interessante. Aggiungere l'aspirazione è un problema meccanico — una ventola, una spazzola rotante, un contenitore per la polvere e una batteria decisamente più grande — e non insegna nulla che il problema della copertura non insegni già. Costruiscilo con un panno asciutto o un piumino antapolvere sul lato inferiore e pulirà davvero un pavimento duro; inoltre ogni algoritmo è lo stesso usato da una macchina commerciale.
Perché iniziare dal rimbalzo casuale se una passata pianificata è migliore?
Perché il rimbalzo casuale funziona con sensori che puoi costruire in un pomeriggio e perché fornisce una base di misurazione che il pianificatore deve superare. Nel simulatore, il metodo casuale raggiunge metà del pavimento alla stessa distanza del pianificatore — il divario si apre soltanto dopo. Se costruisci prima il pianificatore, passerai un fine settimana a combattere la deriva dell'odometria senza mai sapere che cosa ti ha dato.
Quanto guadagna davvero il pianificatore?
Misurato in laboratorio su cinque stanze: una passata pianificata raggiunge il 90 percento di copertura percorrendo 1.35 volte la distanza minima teorica, il rimbalzo casuale ne richiede 2.9 volte e una strategia a spirale 5.5. In una stanza di 20 metri quadrati con una spazzola da 250 mm a 0.25 m/s, sono 7 minuti contro 15 contro 30. Il problema è che il pianificatore non raggiunge mai il 99 percento, perché mantiene un margine di sicurezza da ogni parete e gamba di tavolo.
Servono gli encoder?
Non per il primo robot — non ha alcun uso per loro. Sono nell'elenco dei componenti perché la seconda metà del progetto ne ha bisogno e perché aggiungere gli encoder a un telaio già costruito è molto più scomodo che montarli all'inizio. Acquista motori con encoder, lascia i fili scollegati e usali quando arriverai alla passata pianificata.
Che cosa impedisce al robot di cadere dalle scale?
Sensori di riflettanza rivolti verso il basso agli angoli anteriori, letti a ogni ciclo, e un limite di velocità ricavato da calcoli anziché da preferenze. Il robot percorre la propria latenza moltiplicata per la velocità prima che inizi a frenare, poi la distanza di frenata data dal quadrato di v diviso per il doppio di μ g. Entrambi i termini devono rientrare nella distanza tra il punto in cui il sensore vede il dislivello e quello in cui le ruote lo raggiungono.
Perché un telaio rotondo?
Perché l'ingombro di un robot circolare non cambia durante la rotazione, quindi può sempre ruotare sul posto per uscire da una collisione in cui è finito. Un robot quadrato incastonato in diagonale in un angolo deve prima tornare indietro, operazione che richiede un paraurti posteriore e ulteriori comportamenti. È la stessa ragione per cui quasi tutti i robot commerciali per pavimenti sono rotondi.