Lorsque vous utilisez une boucle PID pour diriger à l'aide de la ligne suivante, votre point de consigne sera toujours le même. Vous voudrez toujours que la ligne soit dans la même position par rapport au robot, par exemple au centre de votre capteur.
Donc, si votre capteur de ligne génère une valeur de -1 à 1, 0 étant le centre du capteur, vous souhaiterez que votre point de consigne soit nul (et que la lecture et la différence du capteur soient les mêmes). Si votre capteur de ligne génère une valeur de 0 à 10, vous souhaiterez que votre point de consigne soit 5 (et que votre capteur relise et que la différence soit différente).
Puisque vous dirigez en réglant les roues pour qu'elles tournent à des vitesses différentes, puis pour suivre en douceur une ligne à une vitesse constante, vous voudrez probablement ajuster les vitesses des deux roues en fonction de l'erreur. Par exemple, si vous devez tourner à gauche pour rester sur la ligne, vous ralentirez la roue gauche et accélérerez la roue droite. Plus vous devez tourner, plus vous devrez ralentir la roue intérieure et plus vous devrez accélérer la roue extérieure.
Considérez la situation dans laquelle vous devez vous tourner θ radians vers la gauche pour corriger l'erreur e et votre vitesse actuelle est S0:
Votre roue gauche doit donc voyager à SL= r θ et votre roue droite doit voyager à SR= ( r + b ) θ.
Pour maintenir la même vitesse globale S0, vous avez besoin S0= ( r + b / 2 ) θ, donc la roue gauche devra se déplacer à SL=S0- ( b / 2 ) θ
tandis que la roue droite devra se déplacer à SR=S0+ ( b / 2 ) θ.
Comme votre erreur tend vers zéro, les vitesses de chaque moteur auront également tendance à se rapprocher. À mesure que l'erreur augmente, les écarts de vitesse augmentent également.
Vous pouvez même avoir besoin que votre roue intérieure tourne vers l'arrière si votre capteur vous indique que la ligne se courbe plus étroitement que la distance entre vos roues. Ce sont des complications que vous pouvez résoudre étape par étape à mesure que votre contrôle devient plus sophistiqué.
De plus, puisque votre erreur aura à la fois des valeurs positives et négatives (pour représenter le continuum hors de l'échelle à gauche ... trop à gauche ... sur la ligne ... trop à droite ... hors de l'échelle à droite, alors vous devriez vous n'avez jamais besoin de demander si if
l'erreur est positive ou négative, vous devez simplement calculer de nouvelles valeurs en fonction de la valeur d'erreur, car une valeur positive et une valeur négative doivent avoir des effets opposés et symétriques sur les moteurs.
Notez que pour le suivi de ligne, vous pourrez peut-être vous en tirer avec le terme de gain proportionnel (c'est-à-dire en laissant les autres termes à zéro). La mise en œuvre d'un terme dérivé peut bien vous permettre d'augmenter le terme de gain proportionnel pour obtenir un système plus réactif, mais un terme intégral est peu susceptible de vous aider. Le fait que si votre robot va dans la mauvaise direction, l'erreur augmentera signifie que les mouvements physiques de votre robot agiront de toute façon comme un terme intégral.
Les valeurs spécifiques de P, D et I seront déterminées par la réactivité de votre système. Pour des conseils généraux sur le réglage des paramètres PID, voir ma réponse et d'autres sur Quelles sont les bonnes stratégies pour régler les boucles PID?