Ci sono problemi con questo?
Il problema principale è che mentre la soluzione proposta correggerà istantaneamente per una discrepanza tra le prestazioni dei motori, non correggerà l'errore accumulato, per non parlare di errori più complessi in posizione come l' errore di Abbe (vedi più avanti).
Qual è un approccio migliore?
Ci sono diverse cose che puoi fare, a seconda di quale sia la tua tolleranza agli errori e di quanti sforzi vuoi fare per correggerli.
Il primo passo sarebbe quello di impostare una coppia di loop PID, uno per ogni ruota, dando ad entrambi la stessa posizione richiesta. Come ho suggerito nella mia risposta a una domanda simile , se si mantengono entrambe le ruote entro un limite di errore molto stretto rispetto a dove si chiede loro di essere, allora ci vorrà del tempo per accumulare un errore sufficiente a causare una virata evidente.
Sarà anche molto più facile mettere a punto due loop PID a livello di motore nominalmente indipendenti piuttosto che mettere a punto un singolo sistema combinato complesso e interdipendente. Per resistere a qualsiasi modifica del controllo di livello superiore, è necessario che ciascun motore si comporti nel modo più simile possibile all'altro motore per il maggior tempo possibile e ciò richiede realmente circuiti di servo separati.
Esistono tuttavia alcune ulteriori complicazioni, e dipende dalla precisione di cui hai bisogno e dalla quantità di sforzi che sei disposto a fare per correggerle per quanto riguarda la soluzione. È possibile che Dead Reckoning sia sufficiente, oppure potrebbe essere necessario aggiungere la determinazione della posizione relativa o assoluta al robot.
Un problema è che anche se la vostra sinistra e ruote di destra entrambi i conteggi encoder mossa 1000, si potrebbe ancora finire in una posizione diversa su due piste diverse.
Ad esempio, supponiamo che tu abbia un errore di inseguimento massimo di 10 conteggi dell'encoder e che i tuoi motori funzionino a una velocità di 10 conteggi dell'encoder per ogni iterazione del loop PID. Il tuo motore sinistro potrebbe muovere 5,10,10,10 ... 10,5 mentre il tuo motore destro potrebbe avere un profilo di 4,11,10,10 ... 10,5 e anche quella leggera differenza di accelerazione all'avvio della mossa potrebbe far muovere il robot leggermente nella direzione sbagliata. Non solo, ma più ti muovi in quella direzione, maggiore sarà l'errore in termini assoluti. Questo è ciò di cui stiamo parlando quando parliamo dell'errore di Abbe e senza un modello cinematico complesso o una sorta di riferimento esterno, non sarete mai in grado di correggerlo.
Per ulteriori informazioni, vedere la mia risposta a una domanda simile ma non del tutto duplicata: come posso utilizzare la libreria PID di Arduino per guidare un robot in linea retta?
e la mia risposta all'ottimizzazione di Line Follower anche correlata