Quelle est la bonne approche pour écrire le contrôleur de rotation pour un robot de football?

14

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));  
        }
    }
}

correctionest une gamme dans laquelle le robot n'a aucun mouvement. degreeest un nombre compris entre -127 et 128 qui est renvoyé par la boussole. motorSpeedest un nombre compris entre 0 et 255 qui est appliqué au PWM.

Miro Markaravanes
la source
Vraisemblablement, cette routine est exécutée à chaque fois que le compas génère une nouvelle valeur pour degree?
Mark Booth
@MarkBooth J'ai mon code depuis un certain temps (1), donc à chaque cycle, il obtient la valeur de la boussole, la donne à la fonction, puis applique le résultat aux moteurs.
Miro Markaravanes
J'examinerais le type de contrôleur utilisé par un servo, car vous essayez de reproduire le comportement du servo dans le logiciel.
Chris Laplante
Je n'utilise pas de servos. J'utilise des moteurs pas à pas donc il n'y a pas déjà un tel comportement dans le moteur.
Miro Markaravanes
2
Salut Miro, sur l'échange de pile, il est préférable de modifier votre question en réponse aux questions dans les commentaires, de cette façon les commentaires peuvent être rangés (supprimés) afin qu'ils ne distraient pas de la question elle-même.
Mark Booth

Réponses:

7

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 correctionvaleur, car si la correctionvaleur 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.

Mark Booth
la source
8

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 ...

Njdart
la source
1
Merci pour votre réponse. Je voulais accepter la réponse mais j'aimerais voir plus de réponses, donc j'accepterai quand il y aura plus de réponses;)
Miro Markaravanes