Quando si utilizza un loop PID per guidare utilizzando la seguente linea, il setpoint sarà sempre lo stesso. Vorrai sempre che la linea sia nella stessa posizione rispetto al robot, ad esempio al centro del sensore.
Pertanto, se il sensore di linea emette un valore compreso tra -1 e 1 con 0 al centro del sensore, il valore impostato sarà zero (e la lettura del sensore e la differenza saranno uguali). Se il sensore di linea emette un valore compreso tra 0 e 10, il valore impostato sarà 5 (e la lettura del sensore e la differenza saranno diverse).
Dato che stai guidando impostando le ruote per girare a velocità diverse, quindi per seguire senza problemi una linea a una velocità costante, probabilmente vorrai regolare le velocità per entrambe le ruote in base all'errore. Ad esempio, se devi girare a sinistra per rimanere sulla linea, rallenterai la ruota sinistra e accelererai la ruota destra. Più devi girare, più avrai bisogno di rallentare la ruota interna e più avrai bisogno di accelerare la ruota esterna.
Considera la situazione in cui devi girare θ radianti a sinistra per correggere l'errore e e la tua velocità attuale è S0:
Quindi la tua ruota sinistra deve viaggiare SL= r θ e la tua ruota destra deve viaggiare SR= ( r + b ) θ.
Per mantenere la stessa velocità complessiva S0, hai bisogno S0= ( r + b / 2 ) θ, quindi la ruota sinistra dovrà viaggiare SL=S0- ( b / 2 ) θ
mentre la ruota destra dovrà viaggiare SR=S0+ ( b / 2 ) θ.
Poiché l'errore tende verso lo zero, anche le velocità di ciascun motore tenderanno l'una verso l'altra. Man mano che l'errore aumenta, anche i differenziali di velocità aumenteranno.
Potrebbe anche essere necessario che la ruota interna ruoti all'indietro se il sensore ti sta dicendo che la linea si sta curvando più strettamente della distanza tra le ruote. Queste sono complicazioni che puoi affrontare passo dopo passo, mentre il tuo controllo diventa più sofisticato.
Inoltre, poiché il tuo errore avrà valori sia positivi che negativi (per rappresentare il continuum dalla scala a sinistra ... troppo a sinistra ... sulla linea ... troppo a destra ... dalla scala a destra, allora dovresti non è mai necessario chiedere che if
l'errore sia positivo o negativo, è sufficiente calcolare nuovi valori in base al valore dell'errore, poiché un valore positivo e un valore negativo dovrebbero avere effetti opposti e simmetrici sui motori.
Si noti che per la riga seguente, potresti essere in grado di cavartela solo con il termine di guadagno proporzionale (cioè lasciando gli altri termini a zero). L'implementazione di un termine derivativo può consentire di aumentare il termine del guadagno proporzionale per ottenere un sistema più reattivo, ma è improbabile che un termine integrale possa essere di aiuto. Il fatto che se il tuo robot vada nella direzione sbagliata l'errore aumenti, significa che i movimenti fisici dei tuoi robot agiranno comunque come un termine integrale.
I valori specifici di P, D e I saranno determinati dalla reattività del tuo sistema. Per consigli generali sull'ottimizzazione dei parametri PID, vedere la mia risposta e altri su Quali sono le buone strategie per l'ottimizzazione dei loop PID?