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.

Due grafici sovrapposti. Quello superiore mostra il superamento della linea in millimetri in funzione della velocità, con due bande piene sovrapposte: una banda ambra inferiore per la distanza di reazione, che cresce linearmente, e una banda ciano superiore per la distanza di frenatura, che cresce in modo quadratico. Linee orizzontali tratteggiate indicano 25 millimetri per il solo bordo e 65 millimetri includendo un sensore montato 40 millimetri avanti, con una freccia che segna 0.98 metri al secondo dove la curva totale supera 65 millimetri. Il grafico inferiore mostra la velocità sicura massima che diminuisce all'aumentare della latenza totale trarilevamento e frenatura da zero a 60 millisecondi, per uno pneumatico in silicone con attrito 1.2 e una ruota in plastica con attrito 0.7.
In alto: con 25 ms di latenza e µ 1.2, un robot che viaggia a 1 m/s supera la linea di 67 mm: 25 mm durante la reazione e 42 mm durante la frenatura. Le due bande sono uguali a 0.59 m/s; sopra questo valore domina la frenatura. In basso: a 25 ms, il silicone consente 0.98 m/s e la plastica rigida soltanto 0.79 m/s. Scarica SVG

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

Fonti