Implementazione PID per Lineefollower

Ciao a tutti qualcuno mi può aiutare per favore? Praticamente un po di tempo fà ho realizzato per gioco il robotgelato che avevo postato su questo forum, http://arduino.cc/forum/index.php/topic,53014.0.html Alla fine seguendi il consiglio di superlol per gioco ho inserito il sensorino con 4 CNY70 per rilevare la riga nera per il line follower!(ringrazio ancora astrobeed per i dwg da cui ho realizzato il mini circuito)...e ne è uscito questo: http://www.youtube.com/watch?v=k2gztj7O9C0

Ora il dilemma voglio implementare il controllo PID per evitare gli scossoni nell inseguimento della linea nera! Premesso che ho letto l'ottima guida su roboitalia http://www.fabbrimarco.com/droboitalia/Le%20guide%20di%20Roboitalia%20-%20il%20PID%20facile1.pdf e quella di gioblu http://www.gioblu.com/tutorials/programmazione/102-che-cose-lalgoritmo-pid e quella della libreria PID sul playground! Non so da dove cominciare! descrivo l'hardware ho 4 sensori collegati agli ingressi analogici e 2 servi modificati per rotazione continua dovrei regolare la velocità di questi in funzione dei valori che leggo dagli infrarossi,ma come? chi è per me il target? il massimo valore dei sensori centrali?e con i due più esterni come mi comporto? Qualcuno è in grado di indirizzarci(a me e il robottonzolo)sulla strada da seguire? XD

secondo me più che un pid basta un poco di logica. Se i centrali sono sul bianco, sei fuori strada e devi tornare indietro.
se i laterali sono sul bianco devi fermare il motore opposto.
usando un array più vasto di sensori ( o muovendoli in qualche modo ) potresti stimare il tipo di curva che stai per affrontare e rallentare anzichè fermare il motore, e quì entra in campo il pid.

Ciao Marco!! Hahahah bellissimo il robot!! Si il PID è consigliato per line follower se si vuole ottenere discrete prestazioni e un funzionamento fluido. Quanti sensori hai al di sotto del robot?

grazie lesto,se dai un ochhiata al video la logica che hai descritto è stata implementata e penso correttamente ,solo che i motori li ho fatti andare in soli tre modi con dei valori fissi avanti, fermi e dietro piano con il pid vorrei fare in modo di ottenere tutte le velocità che passano tra il dietro piano e l'avanti in maniera fluida e dinamica, dopo aver googlato da matto ho trovato(tra l'altro proprio nel forum internazionale) questa guida http://www.mediafire.com/?9w31evdf95lj39k praticamente si può fare la media pesata dei valori analogici sensori dividerla per la somma degli stessi calcolarsi l'errore rispetto alla posizione ottimale di target..con questo errore positivo o negativo si accelerano e decelerano i motori per minimizzarlo!!! P.S. La guida è spettacolare :D Proverò ad implementarla poi posto i risultati!!anche se sarà un macello trovare le costanti per il PID :D :

ciao gbm ho quattro CNY70 nella guida ne hanno 5 ma tra l’altro secondo me c’è un errorino e alla fine ne usano 4!

for (int i = 0; i < 5; i++)
{sensors[i] = analogRead(i);
sensors_average += sensors[i] * i * 1000; //Calculating the weighted mean
sensors_sum += int(sensors[i]);} //Calculating sum of sensor readings

sensors * i * 1000 quando i è zero moltiplico per zero e si perde la lettura

Qui puoi trovare il progetto completo di un line follower che utilizza il pid, una volta scaricato lo zip dentro ci trovi anche i sorgenti e i link a due brevi video che illustrano la differenza di comportamento con e senza pid.