Tutorial · Intermedio · 25 min
Fermarsi sul bordo: latenza e distanza di frenatura
Un sensore di bordo concede un margine fisso in millimetri: la reazione consuma latenza, mentre la frenatura dipende dal pavimento.
Il budget è in millimetri, non in millisecondi
Un robot con un sensore rivolto verso il basso riceve un’informazione, bianco, adesso, e una distanza fissa entro cui agire. Un ring mini sumo offre 25 mm di bordo. Il bordo di un tavolo offre la distanza pari allo scostamento longitudinale in avanti del sensore. In entrambi i casi è una distanza e il robot la spende in due modi molto diversi:
overshoot = v × t_latency + v² / (2a)
Il primo termine viene acquistato e pagato prima che inizi la frenatura. Il secondo è ciò che il pavimento ti fa pagare quando la frenatura comincia.
I due termini si comportano in modo completamente diverso all’aumentare della velocità e sapere quale stai pagando è la differenza tra risolvere il problema in un pomeriggio e riscrivere inutilmente il ciclo di controllo.
Dove va davvero la latenza
«Latenza» non è il sensore. È tutto ciò che intercorre tra il momento in cui i fotoni cambiano e quello in cui gli pneumatici esercitano forza nella direzione opposta, ed è quasi sempre dominata da un termine che nessuno misura:
| Fase | Tipica |
|---|---|
| Assestamento dell’emettitore IR e del fototransistor | ~1 ms |
| Attesa del passaggio successivo del ciclo | fino a 20 ms |
| Decisione e scrittura PWM | <1 ms |
| Inversione effettiva della corrente del motore | ~3 ms |
| Attraversamento del gioco di inversione del riduttore prima che la coppia raggiunga la ruota | ~1 ms |
| Totale, caso peggiore | ~25 ms |
Il periodo del ciclo ne costituisce quattro quinti ed è l’unica riga che puoi correggere senza costi.
Un sensore che leggi a 50 Hz è un sensore che stai ignorando per 20 ms alla volta. La causa abituale non è un processore lento, ma una chiamata bloccante. Una singola pulseIn() su un sensore ultrasonoro arriva a 30 ms di cecità totale, e una delay(20) per un servomotore è la stessa cosa scritta in modo diverso. Leggere il sensore di bordo a ogni passaggio di un ciclo non bloccante non costa nulla ed elimina gran parte della distanza di reazione.
L’ultima riga è quella che sorprende le persone. Invertire i motori non inverte le ruote finché gli ingranaggi non hanno superato il loro gioco, quindi il gioco di inversione del riduttore è corsa libera nel momento peggiore: 4° di gioco sull’uscita con una ruota da 32 mm equivalgono a 1.1 mm di corsa libera prima che arrivi qualsiasi coppia di frenatura.
La frenatura è un problema di attrito, non del motore
Il secondo termine sembra dover dipendere dalla potenza dei motori. Non è così.
Quegli stessi motori capaci di erogare 25 N di forza di spinta decelererebbero un robot da 500 g a 50 m/s². Il pavimento consente µg, cioè 11.8 m/s² sul silicone e 6.9 m/s² sulla plastica rigida. Il gruppo propulsivo ha quattro volte l’autorità consentita, quindi la distanza di frenatura dipende interamente dagli pneumatici e un motore più grande non la accorcia affatto.
Ecco perché il pannello inferiore ha due curve anziché una. A 25 ms di latenza, passare dalla plastica al silicone aumenta la velocità sicura da 0.79 a 0.98 m/s: un guadagno del 24% da un componente che offre anche il 72% di spinta in più.
Una precisazione onesta: µ misurato trascinando un robot fermo è il coefficiente statico, mentre un’inversione brusca fa scivolare le ruote e porta dunque al coefficiente cinematico, tipicamente inferiore del 10–20%. Considera la velocità calcolata come limite ottimistico e viaggia a circa l’80% di essa.
Quale termine domina e quindi cosa correggere
Uguaglia i due termini e il punto di transizione è netto:
v × t = v² / 2a → v = 2at
A 25 ms e µ 1.2 vale 0.59 m/s.
- Sotto questo valore, sei limitato dalla latenza. Dimezzare il periodo del ciclo rende più di qualunque pneumatico. Qui vive un robot che cerca ostacoli, ed è una buona notizia: la correzione è una modifica software.
- Sopra questo valore, sei limitato dalla trazione. Aderenza e distribuzione del peso contano più della frequenza del ciclo e, oltre una certa soglia, l’unica risposta rimasta è rallentare.
La maggior parte dei robot che cade dagli oggetti si trova nel primo regime, ma viene regolata come se fosse nel secondo.
Ricava più millimetri
Il budget non è fisso. È la larghezza del bordo più la distanza a cui il sensore è montato davanti alle ruote, e il secondo termine è una variabile di progetto completamente libera:
budget = border + sensor lead
Un sensore 40 mm davanti all’asse motore trasforma 25 mm di bordo in 65 mm di spazio di frenatura, la differenza tra 0.60 m/s e 0.98 m/s. Risolvi nell’altro senso quando hai una velocità obiettivo:
budget = v·t + v²/(2a)
I limiti pratici alla distanza frontale sono questi:
- Deve vedere il bordo, non lo spazio esterno al ring. Montato troppo avanti, guarda oltre la linea mentre il robot è ancora al sicuro, sacrificando velocità senza alcun motivo.
- Montalo basso e schermalo. Un sensore di riflettanza IR a 3 mm legge la superficie; a 15 mm legge la superficie più le luci della stanza. È lo stesso problema di soglia e calibrazione di un robot seguilinea, ma con una modalità di guasto molto peggiore.
- Mettine uno su ciascun angolo anteriore. Un solo sensore centrale indica che il bordo è davanti da qualche parte. Due indicano in quale direzione allontanarsi, senza latenza aggiuntiva.
- Non dimenticare il retro. Un robot spinto all’indietro oltrepassa il bordo nella direzione sbagliata e i sensori anteriori non lo vedranno mai.
Prima inverti, poi gira
Con un budget fisso, l’ordine delle operazioni conta più della regolazione.
Inverti completamente, immediatamente. Non scivolare: un robot in decelerazione per inerzia frena soltanto per la resistenza al rotolamento, una piccola frazione di µg, e il superamento quasi triplica. Non frenare dolcemente: questo è l’unico momento in cui un profilo di movimento è l’istinto sbagliato, perché il vincolo è la distanza, non la fluidità.
Poi gira, una volta fermo. Girare mentre si è ancora in movimento trasforma il problema rettilineo in un arco che porta un angolo del robot più in fuori rispetto al suo centro. Fermati prima e poi riorientati, ricordando che una rotazione su se stesso striscia gli pneumatici di lato per tutto il tempo.
Conserva il rilevamento. Un singolo campione di bianco è sufficiente. Attendere due letture consecutive per confermarlo raddoppia la distanza di reazione nel caso peggiore, mentre il falso positivo che evita costa molto meno della caduta.
Misurare la propria latenza
Il numero nella tabella è una stima iniziale. Il tuo si misura in circa quindici minuti.
Dall’interno. Registra micros() quando il sensore supera la soglia e di nuovo sulla riga che scrive il PWM invertito. Questo cattura la metà software, cioè quella che puoi correggere. Stampa il valore peggiore osservato su cento rilevamenti, non la media: il caso peggiore decide se il robot cade.
Dall’esterno. Filma con uno smartphone a 240 fps. Conta i fotogrammi tra il passaggio del sensore sulla linea e l’inversione visibile delle ruote; ogni fotogramma dura 4.2 ms. Questo cattura il ritardo elettrico e meccanico invisibile al software ed è l’unico modo di confermare il totale.
Dall’inizio alla fine. Viaggia a una velocità nota verso una linea con nastro adesivo e misura quanto il robot la oltrepassa prima di fermarsi. Sottrai la distanza di frenatura calcolata v²/2a: ciò che resta è v × t, la latenza totale misurata con un righello.
L’ultimo richiede cinque minuti e vale la pena farlo prima di qualsiasi regolazione, perché indica quale dei due termini stai effettivamente pagando.
Quando va storto
| Sintomo | Di solito |
|---|---|
| Si ferma in modo affidabile quando è lento e cade quando è veloce | Funziona come previsto: hai superato la velocità consentita dal budget |
| Supera sempre la linea di una quantità costante | Latenza; misurala dall’inizio alla fine e accorcia il ciclo |
| Supera la linea di una quantità variabile | C’è una chiamata bloccante: il periodo del ciclo non è quello che pensi |
| Vede la linea in ritardo | Sensore montato troppo in alto o troppo indietro, oppure soglia impostata per un’altra stanza |
| Rileva un bordo inesistente | Pavimento riflettente o IR ambiente; scherma il sensore e ricalibra |
| Si ferma in tempo, poi esce comunque dal bordo | L’allontanamento è avvenuto mentre era ancora in movimento; fermati prima |
| Cade all’indietro | Nessun sensore posteriore |
La stessa aritmetica vale per un robot sul bordo di un tavolo, un aspirapolvere che evita le scale e un arresto davanti a un ostacolo: cambia soltanto il budget. Il simulatore di evitamento ostacoli espone esattamente questa geometria della distanza di frenatura con un sensore rivolto in avanti anziché verso il basso, mentre il progetto mini sumo è il luogo in cui deve funzionare contro un avversario che tenta di farti fallire.
Esplora il grafo
Fa parte di queste costruzioni
Progetti e percorsi di apprendimento che includono questo tutorial.
Per approfondire