Simulatore interattivoPrincipiante

Simulatore seguilinea: regola un robot nel browser

Costruisci un robot virtuale che segue una linea, visualizza i suoi sensori e regola un controllore PID con un simulatore robotico interattivo nel browser.

Categoria
Arduino
Tempo
45–90 min
Piattaforma
Browser · Arduino
Schema tecnico: Simulatore seguilinea: regola un robot nel browserSENSOR ERROR

01 / Inizia qui

Introduzione

Un robot che segue una linea trasforma le letture dei sensori in correzioni di sterzo. Questo progetto ti permette di disegnare un tracciato, modificare la geometria del robot e dei sensori e osservare un controllore PID deterministico rispondere in tempo reale. Usalo per collegare la teoria del controllo al comportamento che vedresti da un robot Arduino su un percorso fisico.

Live lab / Deterministic 60 Hz model

Line follower simulator

Run the starter track, tune the controller, or pause and draw a course of your own.

Browser native
A top-down line-follower robot simulator. Use the controls below to run the simulation or read the complete algorithm and theory after this lab.

Bright nodes are sensors currently detecting the track. The lavender heading line shows steering output. Drawing pauses the robot automatically.

Simulation

Paused. Press Start or Step to begin.

Robot geometry
PID calibration
Elapsed
0.0 s
Distance
0 units
Line error
0.000
Steering
0.000
Track contact
100%

Keyboard: focus the course, then use Space to run/pause, N to step, R to reset, D to draw, and F for full screen.

Controlli

Usa i preset del tracciato per stabilire una base oppure metti in pausa l’esecuzione e disegna direttamente sul percorso. La velocità del robot controlla quanto avanza il telaio a ogni aggiornamento. Il numero e la distanza dei sensori modificano il campo visivo. I controlli P, I e D cambiano la risposta di sterzo; Passo esegue un aggiornamento deterministico mentre il simulatore è in pausa.

Inizia con una velocità moderata, cinque sensori e i guadagni predefiniti. Cambia una variabile alla volta e confronta gli indicatori di errore, tempo sul giro e tempo sul tracciato.

Teoria

La barra dei sensori campiona la riflettanza davanti al robot. Ogni sensore attivo contribuisce con la propria posizione con segno a una media ponderata. Il centro della barra corrisponde all’errore zero; le letture a sinistra o a destra del centro producono un errore negativo o positivo.

Grafico a barre di cinque sensori di riflettanza distribuiti sulla barra del robot. La linea si trova a destra del centro, quindi i sensori sul lato destro leggono i valori più forti. Una linea tratteggiata segna il centro della barra (errore zero) e una linea continua segna la posizione ponderata per la riflettanza a più 0.69, l'errore di sterzo calcolato.
La media ponderata delle letture dei sensori fornisce una posizione fluida della linea: qui la linea è a destra del centro, quindi l'errore è positivo e il controllore sterza di nuovo verso lo zero. Scarica SVG

Il controllore combina tre termini:

$$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$$

La correzione $u(t)$ accelera una ruota e rallenta l’altra. Il controllo proporzionale reagisce allo scostamento corrente, quello integrale corregge un bias persistente e quello derivativo smorza le variazioni rapide.

Algoritmo

  1. Campiona ogni sensore a un intervallo fisso.
  2. Calcola una posizione ponderata della linea e normalizzala rispetto al centro.
  3. Riutilizza l’ultima direzione osservata della linea quando tutti i sensori la perdono.
  4. Aggiorna i termini integrale e derivativo usando lo stesso passo temporale fisso.
  5. Limita la correzione, calcola i comandi dei motori sinistro e destro e integra la posa del robot.

Regola il guadagno proporzionale finché il robot segue le curve leggere, aggiungi il guadagno derivativo finché l’oscillazione si assesta e introduci solo il guadagno integrale necessario per eliminare uno scostamento riproducibile.

Codice sorgente

Il simulatore nel browser e un microcontrollore usano la stessa forma di controllo. Un ciclo compatto in stile Arduino è questo:

float integral = 0.0f;
float previousError = 0.0f;

void controlStep(float dt) {
  float error = readWeightedLinePosition();
  integral = constrain(integral + error * dt, -2.0f, 2.0f);
  float derivative = (error - previousError) / dt;
  float correction = kp * error + ki * integral + kd * derivative;

  setMotorSpeeds(baseSpeed - correction, baseSpeed + correction);
  previousError = error;
}

Mantieni stabile l’intervallo di controllo reale. Un ritardo variabile modifica i termini derivativo e integrale anche quando i guadagni restano gli stessi.

Ipotesi e differenze hardware

Questo è un modello didattico, non una replica dell’hardware. Il tracciato è una maschera binaria piatta e ad alto contrasto, senza variazioni di luce ambiente, quindi la barra dei sensori vede nero e bianco perfetti — sul nastro reale, la luce della stanza, la lucidità della superficie e l’altezza del sensore modificano le letture e devi calibrare seguendo i passaggi nelle note di cablaggio. La temporizzazione è ideale: il controllore viene eseguito a un intervallo fisso senza jitter di delay(), mentre un ciclo Arduino reale varia con il resto del lavoro e quello jitter rimodella la risposta PID. Il telaio è cinematico: le ruote non scivolano mai, i motori rispondono all’istante e la batteria non cala mai di tensione. Tratta i guadagni trovati qui come un punto di partenza vicino, poi regolali di nuovo sul robot reale dopo la calibrazione.

Schema elettrico

Collega le uscite dei sensori a ingressi capaci di leggere segnali analogici, condividi la massa tra tutti i moduli e alimenta i motori tramite un ponte H anziché dai pin del controllore.

Diagramma a blocchi del cablaggio del seguilinea. Un array di sensori IR alimenta gli ingressi analogici di un Arduino, l'Arduino invia segnali PWM e direzione a un driver dei motori e il driver alimenta i motori. Una batteria e un regolatore separati forniscono alimentazione all'Arduino.
I segnali scorrono da sinistra a destra; la corrente dei motori proviene da un'alimentazione regolata separata, mai dal regolatore logico del controllore. Scarica SVG

Verifica la portata dell’alimentazione dei motori e aggiungi una disaccoppiatura locale vicino al controllore e al driver. Non instradare mai la corrente dei motori attraverso il regolatore logico di una scheda di sviluppo.

Esperimenti guidati

Ognuno di questi isola una variabile, che è ciò che è davvero difficile fare sull’hardware reale, dove tutto cambia insieme.

1. Trova il guadagno limite, poi dimezzalo

Imposta i guadagni integrale e derivativo a zero e aumenta il guadagno proporzionale finché il robot oscilla stabilmente lungo una sezione rettilinea — intrecciandosi con ampiezza costante anziché crescente o decrescente. Dimezza quel valore.

Ora hai un Kp iniziale derivato da una misurazione invece che da un’ipotesi, e sarà vicino. Da lì aggiungi il derivativo finché l’intreccio si smorza.

2. Dimostra che i guadagni dipendono dalla velocità

Regola il robot finché non segue bene il tracciato a una velocità di base bassa. Ora aumenta la velocità della metà ed esegui gli stessi guadagni senza modificare nulla.

Si intreccerà, taglierà gli angoli o perderà la linea. Nel controllore non è cambiato nulla — ma la stessa correzione di sterzo produce ora una variazione di orientamento maggiore per unità di tracciato, quindi il guadagno efficace aumenta con la velocità. Ogni regolazione è una regolazione a una velocità specifica, ed è per questo che un robot da competizione rallenta nelle curve invece di usare lo stesso guadagno ovunque.

3. Osserva come il numero di sensori cambi ciò che è possibile

Esegui lo stesso tracciato con gli stessi guadagni usando tre, cinque e otto sensori.

Sensori Segnale di posizione Effetto sulla regolazione
3 Grossolano, sostanzialmente tre regioni Segue il tracciato, ma non può essere regolato strettamente — l’errore viene quantizzato
5 Abbastanza fluido per sterzare in modo proporzionale Il punto di equilibrio abituale
8 Fine Consente guadagni e velocità più elevati prima dell’oscillazione

Il risultato interessante è che più sensori aumentano il limite superiore invece di migliorare quello inferiore. A bassa velocità tre sensori bastano. La risoluzione aggiuntiva inizia a pagare solo alle velocità in cui il segnale grossolano dell’errore diventa il fattore limitante.

4. Rompi di proposito un angolo acuto

Aumenta la velocità finché il robot perde la linea nell’angolo più stretto. Osserva cosa fa subito dopo. Poi pensa a cosa dovrebbe fare il robot reale: proseguire dritto è l’opzione peggiore, perché la linea si stava curvando.

Questo è il ragionamento dietro il mantenere l’ultimo errore quando si perde la linea invece di azzerarlo — zero significa “centrato” e comanda velocità massima dritto. Mantenere l’ultimo errore fa continuare a girare il robot nella direzione in cui stava già girando, cioè verso cui la linea è andata.

Cosa osservare

Sintomo nel grafico Causa Correzione
Intreccio costante sui rettilinei Kp troppo alto oppure Kd troppo basso Dimezza Kp, poi aumenta Kd
Intreccio che cresce Kp sopra il guadagno limite Riducilo
Taglio ampio e lento degli angoli Velocità troppo alta per l’anticipo del sensore Rallenta o sposta l’array in avanti
Sforzo di controllo irregolare Kd agisce su una posizione rumorosa Filtra o riduci Kd
Segue sempre leggermente fuori centro Calibrazione non uniforme per sensore Normalizza ogni canale sul proprio intervallo
Perde la linea e prosegue dritto L’errore viene azzerato quando la linea è persa Mantieni l’ultimo errore

Portarlo sull’hardware

Questo laboratorio Un robot reale
Ciclo perfettamente periodico Jitter se non misuri dt; una delay() sconfigge completamente Kd
Calibrazione ideale Va rifatta a ogni esecuzione, sulla superficie reale
Tracciato binario ad alto contrasto Nastro lucido, polvere e luce infrarossa ambientale riducono il contrasto
Nessuno slittamento delle ruote Slittamento ad alta velocità e due diversi deadband dei motori
I motori rispondono all’istante Entrambe le ruote iniziano a girare con cicli di lavoro diversi
Batteria costante La tensione cala, quindi lo stesso duty produce meno velocità man mano che l’esecuzione prosegue

I guadagni trovati qui si trasferiscono come punto di partenza vicino, mentre la procedura di regolazione si trasferisce completamente. Aspettati di dover regolare di nuovo sul tuo nastro — e aspettati che il miglioramento più importante sull’hardware non venga dai guadagni ma dalla frequenza del ciclo, perché una prima realizzazione spesso gira a 20–50 Hz e può raggiungere diverse centinaia semplicemente eliminando le chiamate bloccanti. La realizzazione completa è in costruisci un robot che segue una linea.

Checklist hardware

Componenti

  • Arduino Uno o controllore compatibile con Arduino
  • Da tre a nove sensori IR a riflessione
  • Due motori CC con riduttore e ruote
  • Driver del motore con doppio ponte H
  • Pacco batteria, telaio e caster

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é il robot oscilla attorno alla linea?

L'oscillazione di solito significa che il guadagno proporzionale è troppo alto, lo smorzamento derivativo è troppo basso o il robot si muove più velocemente di quanto possa supportare la frequenza di aggiornamento dei sensori. Riduci prima la velocità, poi regola P e D. Su un robot fisico, una lunga delay() nel ciclo è una causa nascosta frequente: il tempo morto che aggiunge rende inefficace il termine derivativo, per quanto alto lo imposti.

Quanti sensori dovrebbe usare un seguilinea?

Cinque sensori sono un buon punto di partenza: rivelano direzione e grandezza dell'errore mantenendo facile da ispezionare il calcolo della posizione ponderata. Tre sensori funzionano a basse velocità, mentre i robot da competizione ne usano spesso otto per una risoluzione di posizione più fine ad alta velocità.

Perché il mio seguilinea perde la linea nelle curve strette?

Il telaio si muove più velocemente di quanto la barra dei sensori possa risolvere la curva, quindi la linea lascia l'array prima che il controllore reagisca. Riduci la velocità, allarga la barra dei sensori o aumenta la frequenza di aggiornamento dei sensori. Un buon controllore riutilizza anche l'ultima direzione nota della linea quando tutti i sensori la perdono, così torna verso la linea invece di proseguire dritto fuori dal tracciato.

Devo usare sensori IR analogici o digitali per seguire una linea?

I sensori di riflettanza analogici riportano un valore continuo, che ti permette di calcolare una posizione ponderata della linea fluida e di sterzare in modo proporzionale. I sensori digitali riportano solo acceso o spento dopo una soglia interna, il che è più semplice ma fornisce informazioni di posizione più grossolane. Questo simulatore modella l'approccio analogico con posizione ponderata.

Come calibro l'array di sensori IR?

Prima di un'esecuzione, fai scorrere i sensori sia sulla linea sia sullo sfondo e registra per ogni sensore la lettura minima e massima, poi normalizza le letture in tempo reale rispetto a quell'intervallo. La calibrazione conta perché l'altezza del sensore, la riflettanza della superficie e la luce ambientale modificano i valori grezzi, e un array non calibrato sbilancia la posizione ponderata.

Quali sono buoni valori PID iniziali per un seguilinea Arduino?

Tratta i guadagni pubblicati come punto di partenza, non come risposte da copiare e incollare: risposta dei motori, altezza dei sensori, tensione della batteria, riflettanza della superficie e temporizzazione del ciclo cambiano tutti i guadagni necessari a un robot fisico. Inizia solo con il termine proporzionale, aumentalo finché il robot segue curve leggere con una lieve oscillazione, poi aggiungi il derivativo per rimuovere l'oscillazione e un termine integrale molto piccolo solo se rimane uno scostamento riproducibile.

Per approfondire

Fonti

Fonti autorevoli per andare oltre il modello didattico, volutamente limitato, di questo simulatore.