Étape 8: Régulation PID (facultatif)
Dans le cas où vous voulez sauter cette partie, c’est OK. Vous pouvez rester avec la commande proportionnelle a expliqué sur la dernière étape, ou graver quelques cerveaux pour implémenter un système de contrôle plus complexe dans votre Robot, c’est votre choix. Allons-y.
PID (proportionnel, dérivé et intégral) est l’un des régimes de contrôle plus courantes autour. Plupart des boucles de contrôle utilisent certaine saveur de régulation PID. Il existe de nombreuses façons de régler une boucle de PID, y compris la technique manuelle utilisée dans cet exemple.
Penser comme un simple ressort à PID. Un ressort a une longueur d’origine, qui, une fois troublée, par la dilatation ou la contraction, tend à reprendre sa longueur initiale dans les plus brefs délais. De même, un algorithme PID dans un système a une valeur de consigne d’une grandeur physique particulier à contrôler, appelé un « set point », qui, une fois modifié pour une raison quelconque, le système contrôle les autres fonctions nécessaires dans ce document, de revenir à l’original de la consigne dans les plus brefs délais possibles. Contrôleurs de PID sont utilisés partout où il est nécessaire de contrôler une quantité physique et pour la rendre égale à une valeur spécifiée. Par exemple, le contrôleur de la croisière dans les voitures, Robots, régulateurs de température, régulateurs de tension, etc..
Comment fonctionne le PID ?
Le système calcule le « erreur », ou « déviation » de la quantité physique de la valeur de consigne, en mesurant la valeur actuelle de cette quantité physique utilisant un ou plusieurs capteurs. Pour revenir à la valeur de consigne, cette « erreur » devrait être réduite au minimum et doit idéalement être effectuée égale à zéro. En outre, ce processus devrait arriver aussi rapidement que possible. Idéalement, il doit être zéro lag dans la réponse du système au changement de son point de consigne.
Plus d’informations se trouvent dans de nombreux livres et site Web, y compris ici :
http://en.wikipedia.org/wiki/PID_controller
Mise en œuvre de PID
i) terme d’erreur (e) :
C’est égal à la différence entre la valeur de consigne et la valeur actuelle de la quantité commandée.
erreur = set_point – current_value (dans notre cas est l’EEG variable erreur de la position du Robot sur la ligne
II) le terme proportionnel (P) :
Ce terme est proportionnel à l’erreur.
P = erreur
Cette valeur est responsable de l’ampleur des changements nécessaires dans la quantité physique pour atteindre le point de consigne. Le terme de proportion est ce qui détermine le temps de montée de boucle de contrôle ou la vitesse à laquelle il atteindra le point de consigne.
III) le terme intégral (I) :
Ce terme est la somme de toutes les valeurs précédentes de l’erreur.
I = I + erreur
Cette valeur est responsable de la rapidité de réponse du système à la variation de la valeur de consigne. Le terme intégral sert l’éliminer l’erreur de l’état d’équilibre requis par le terme proportionnel. Généralement, petits Robots n’utilise pas le terme intégral parce que nous ne sommes pas préoccupés par erreur de l’état stationnaire et il peut compliquer la boucle de réglage.
IV) différentielle ou dérivé à terme (D) :
Ce terme est la différence entre l’erreur instantanée de la valeur de consigne et l’erreur de l’instant précédent.
D = erreur - previousError
Cette valeur est chargée de ralentir le taux de variation de la quantité physique quand il se rapproche de la valeur de consigne. Le terme dérivé sert le réduire la remise des gaz ou combien le système plus corrige.
Équation :
PIDvalue = (Kp * P) + (Ki * I) + (Kd * D)
Où :
KP est la constante qui utilisé pour faire varier l’amplitude du changement requis pour atteindre le point de consigne.
Ki est la la constante qui est utilisée pour faire varier la vitesse à laquelle le changement il y a lieu la quantité physique pour atteindre le point de consigne.
KD est la constante qui est utilisée pour faire varier la stabilité du système.
Une approche consiste à définir la variable de Kd à 0 et capter le terme Kp seul tout d’abord. PK 25 est un bon point de départ dans notre cas ici. À la dernière étape, nous avons utilisé un Kp 50 qui fonctionne très bien avec mon Robot. Si le robot réagit trop lentement, augmentez la valeur. Si le robot semble réagir vite et devenir instable, diminuer la valeur. Une fois que les réponses de robot tune raisonnablement, la partie dérivée de la boucle de régulation. Tout d’abord définir la valeur de Kp et Kd chaque à la 1/2 de la valeur de Kp. Par exemple, si les réponses de robot raisonnables avec un Kp = 50, alors la valeur de Kp = 25 et Kd = 25 pour commencer. Augmenter le gain Kd (dérivé) de diminuer le dépassement, il diminue si le robot devenue instable.
Un autre composant de la boucle à considérer est le taux réel/boucle d’échantillonnage. Cela accélère ou ralentit, cela peut faire une différence significative dans les performances du robot. Ceci est défini par les déclarations de retard que vous avez dans votre code. C’est un essai-erreur metod indicative pour obtenir le résultat optimal
L’approche décrite ci-dessus, la fonction ci-dessous a été mis en place :
Sub calculatePID()
{
P = erreur ;
I = I + erreur ;
D = erreur-previousError ;
PIDvalue = (Kp * P) + (Ki * I) + (Kd * D) ;
previousError = erreur ;
}
La constante Kp simple utilisée dans la dernière étape sera remplacée pour cette PIDvalue plus complète :
Sub motorPIDcontrol()
{
int leftMotorSpeed = 1500 - iniMotorPower - PIDvalue ;
int rightMotorSpeed = 1500 + iniMotorPower - PIDvalue ;
leftServo.writeMicroseconds(leftMotorSpeed) ;
rightServo.writeMicroseconds(rightMotorSpeed) ;
}
Mais notez que si vous avez Kd et Ki = 0, PIDvalue est seulement Kp * erreur dans la dernière étape