Imaginez la programmation d'un robot de football à 3 roues. Quel type de contrôleur utiliseriez-vous pour le faire tourner? P? PID?
Le but de ce contrôleur est qu'il doit faire se tenir le robot dans un angle défini (0 degré) et faire demi-tour s'il est tourné à la main ou par un autre robot.
J'utilise des moteurs pas à pas pour mon robot et non des servos donc j'ai besoin de l'implémenter dans mon logiciel!
J'ai déjà écrit un exemple de contrôleur de type P et le mouvement est assez bon. Mais je voudrais faire mieux si possible. Le code est comme suit:
void spinSpeed(int devidedValue, int addedValue, int correction) {
if(degree<correction && degree>-correction) {
motorSpeed = 0;
} else {
if(degree > 0) {
motorSpeed = ((degree)/(devidedValue) + (addedValue));
} else {
motorSpeed = ((degree)/(devidedValue) - (addedValue));
}
}
}
correction
est une gamme dans laquelle le robot n'a aucun mouvement.
degree
est un nombre compris entre -127 et 128 qui est renvoyé par la boussole.
motorSpeed
est un nombre compris entre 0 et 255 qui est appliqué au PWM.
degree
?Réponses:
La chose importante à retenir à propos d'une boucle de contrôle PID est que chaque terme est destiné à dominer le contrôle à différents moments pendant un mouvement.
Le terme proportionnel est destiné à dominer et à fournir un couple plus important (ou dans votre cas la vitesse) plus vous vous éloignez de votre position cible.
Le terme dérivé est destiné à dominer pendant la phase de «croisière» de votre mouvement trapézoïdal typique. Il aide à régner sur un terme proportionnel très élevé et à limiter l'accélération galopante lorsque vous êtes loin de votre destination, mais il peut également aider à augmenter la vitesse à laquelle vous convergez vers votre destination lorsque vous vous en approchez et le terme proportionnel contribue beaucoup moins .
Si vous utilisez un contrôleur de vitesse plutôt qu'un contrôleur de couple, le terme dérivé peut en fait être caché dans votre contrôleur de vitesse et non directement accessible à votre boucle PID. Cela peut rendre le contrôle plus simple (il accélérera généralement aussi rapidement qu'il peut jusqu'à la vitesse souhaitée ou la vitesse maximale, la plus faible des deux), mais il peut également le rendre moins prévisible. Souvent, un terme D (ou P) trop agressif peut entraîner un cycle limite (souvent appelé à tort résonance ou oscillation en raison du bruit des moteurs fredonnant ou même hurlant dans cet état, bien que le cycle limite soit une description beaucoup plus précise). ).
Le terme intégral est là pour corriger l'erreur résiduelle en régime permanent , c'est-à-dire là où il y a une différence persistante et à long terme entre l'endroit où l'on vous demande d'aller et où vous êtes réellement. Votre valeur actuelle
correction
(vraiment juste la tolérance) fonctionne comme l'opposé d'un terme intégral, elle coupe le moteur entièrement lorsque vous êtes dans une zone morte autour de la position souhaitée.En raison de ces facteurs, vous gagnerez peu à mettre en œuvre une boucle PID complète, sauf si vous planifiez également dans un profil de vitesse avec des phases d'accélération, de croisière et de décélération distinctes.
Gardez également à l'esprit que la zone morte et l'absence de terme I signifieront que la position finale sera toujours quelque peu aléatoire et différera très probablement selon la direction dans laquelle vous vous approchez de la position souhaitée. En tant que tel, votre répétabilité bidirectionnelle pourrait être bien pire que votre répétabilité standard.
Pour plus d'informations sur la différence entre la précision, la répétabilité et la résolution, consultez cette excellente description . Dans votre cas, votre résolution est votre capteur de boussole, tandis que la précision et la répétabilité sont très probablement limitées par votre
correction
valeur, car si lacorrection
valeur est supérieure à votre résolution de boussole, vous jetez une partie de votre précision de position en échange de pouvoir éteignez votre moteur lorsque vous êtes proche.la source
Un contrôleur PID serait le meilleur.À l'aide d'une boussole, il est relativement simple d'obtenir le relèvement de votre robot et de le comparer au relèvement que vous souhaitez atteindre, et d'utiliser certaines techniques de réglage PID pour obtenir un mouvement de rotation en douceur vers votre cap souhaité. Cette approche peut également être appliquée à la rotation d'une quantité donnée avec précision.
Je l' ai déjà fait quelques robotique dans ce domaine, c'est ce que nous avons utilisé dans notre robot, faire une tâche pas trop différente de la vôtre ...
la source