Y a-t-il des problèmes avec cela?
Le principal problème est que, bien que la solution que vous proposez corrige instantanément un décalage entre les performances des moteurs, elle ne corrige pas les erreurs accumulées, encore moins les erreurs de position plus complexes telles que l' erreur Abbe (voir plus loin).
Quelle est la meilleure approche?
Il y a plusieurs choses que vous pouvez faire, selon votre tolérance aux erreurs et les efforts que vous souhaitez consacrer à leur correction.
La première étape serait de mettre en place une paire de boucles PID, une pour chaque roue, leur donnant à la fois la même position de demande. Comme je l'ai suggéré dans ma réponse à une question similaire , si vous maintenez les deux roues dans une erreur très serrée à la limite de l'endroit où vous leur demandez d'être, alors il faudra un certain temps pour accumuler suffisamment d'erreur pour provoquer un virage notable.
Il sera également beaucoup plus facile de régler deux boucles PID de niveau moteur indépendantes que de régler un seul système combiné complexe et interdépendant. Pour résister à tout changement du contrôle de niveau supérieur, vous avez vraiment besoin que chaque moteur se comporte aussi similaire que possible à l'autre moteur aussi longtemps que possible, et cela nécessite vraiment des boucles d'asservissement distinctes.
Il existe cependant un certain nombre de complications supplémentaires, et cela dépend de la précision dont vous avez besoin et de l'effort que vous êtes prêt à faire pour les corriger quant à la solution que vous recherchez. Il se peut que Dead Reckoning soit suffisant, ou vous devrez peut-être ajouter une détermination de position relative ou absolue à votre robot.
Un problème est que même si vos roues gauche et droite déplacent toutes les deux 1000 encodeurs, vous pouvez toujours vous retrouver dans une position différente sur deux pistes différentes.
Par exemple, supposons que vous ayez une erreur de suivi maximale de 10 comptes de codeur et que vos moteurs fonctionnent à une vitesse de 10 comptes de codeur par itération de boucle PID. Votre moteur gauche peut bouger de 5,10,10,10 ... 10,5 tandis que votre moteur droit peut avoir un profil de 4,11,10,10 ... 10,5 et même cette légère différence d'accélération au démarrage du mouvement pourrait amener le robot à s'éloigner légèrement dans la mauvaise direction. Non seulement cela, mais plus vous vous déplacez dans cette direction, plus l'erreur augmentera en termes absolus. C'est de cela que nous parlons lorsque nous parlons de l' erreur d'Abbe , et sans modèle cinématique complexe ou une sorte de référence externe, vous ne pourrez jamais le corriger.
Pour plus d'informations, voir ma réponse à une question similaire mais pas tout à fait en double: Comment puis-je utiliser la bibliothèque Arduino PID pour conduire un robot en ligne droite?
et ma réponse à l' optimisation Line Follower également liée