Étape 3: Utilisation d’un PID
Imaginons la première consigne = 2 tiques. Donc nous attendons le bot pour exécuter à 2 graduations par 0,1 seconde (comme j’ai mentionné : il s’agit d’un calcul approximatif, en laissant de côté l’accélération lors de l’intervalle). Puis le bot commence à courir à la vitesse de décrochage. Après 0,1 seconde, les capteurs sont lus et les encodeurs venir avec 1 tick. Nous ' re au-dessous de cible à une erreur de 1 tique.
Dans la formule :
erreur = consigne – tiques réelles
La vitesse réelle doit être augmentée car nous aspirons à une vitesse supérieure pour le bot à exécuter. La façon la plus simple à corriger cela ajoute l’erreur à la prochaine commande de vitesse. Dans la pratique cela se révélera pour être Vitesse trop ou trop peu pour obtenir le bot près la direction désirée. Réglage de la correction peut être fait en multipliant l’erreur avec une constante. Cette façon de corriger est appelée « proportionnelle ». La constante de syntonisation est appelée un « gain ».
Dans la formule :
P = Kp * erreur
Réglage de la correction proportionnelle soigneusement va réduire l’erreur au fil du temps significativement, mais n’apportera jamais il à zéro (car il n’y a toujours une erreur nécessaire pour une correction proportionnelle). Dans beaucoup de cas, cette façon de corriger l’erreur se traduira également par des changements rapides, ce qui entraîne un comportement choquant (oscillation) du bot. Pour lisser les réactions une partie « Intégrés » est ajoutée à la correction en additionnant les erreurs au fil du temps. La partie intégrée peut aussi être Assemblée à l’aide d’un gain.
Dans la formule :
J’ai = Ki * somme des erreurs * intervalle
Pour résumer permettra enfin de réduire l’erreur à zéro et il fonctionne très bien tant qu’il y a une partie de la gauche de l’erreur. Intégrer les empêchera également augmenter sans fin de la vitesse. La correction prend plus de temps et... œuvres plus longues. Alors quand l’erreur est finalement réduite à zéro, la partie intégrante de la correction va continuer à travailler (et devenir négatif) jusqu'à ce que la somme de toutes les erreurs est réduite à zéro. Il s’agit de dépassement.
Souvent (par exemple lorsqu’il est appliqué sur un robot équilibrage) une troisième partie de la correction est nécessaire pour « couper » la remise des gaz. C’est la partie « différentielle ». Il traite de la volatilité du changement en faisant la différence entre les 2 erreurs au fil du temps en compte. Aussi la partie différentielle peut être réglée à l’aide d’un gain.
Dans la formule :
D = Kd * (erreur : erreur précédente) / intervalle
Ajouter les pièces se traduira par une correction contrôlée de la vitesse: P + I + D.
Le point de consigne, l’erreur et la correction PID sont tous chez les tiques (par seconde). Pour la commande pour changer la vitesse du moteur, il est nécessaire de recalculer cela en PWM-pourcentage. Chaque fois que la partie contrôlée s’exécute, la vitesse des moteurs augmentera jusqu'à ce que le bot fonctionne à la vitesse désirée.
Comme mentionné précédemment : il s’agit d’un contrôle simplifié et fonctionne sans utiliser l’accélération dans les équations. En regardant le diagramme de la vitesse : ce script ne réalise pas une motion qui décélère. Lors de la saisie des concours vous devez et vous aurez probablement le bot ramper pour les derniers millimètres vers la distance de la cible exacte. (Travail avec RB2 se fait en centimètres au mieux).
Le codage de Python complet est fourni dans le script, donc je vais le laisser hors de ce blog. Garder une trace de toutes les valeurs et les enregistrer dans un fichier csv fichier formaté, nous permettront d’analyser les données d’erreur et les aide à réglage de la correction en changeant les gains (donc quitter peu d’exercice et une partie saine de la patience). L’image ci-dessous montre un tableau de bord utilisé pour l’analyse. Évident, que je n’étais pas là encore. -0)
Si le réglage est fait correctement les graphiques erreur montrera des courbes agréables, lentement proche de zéro.
RB2 est un robot d’entraînement différentiel : il a 2 séries de moteurs indépendants. Pour chaque côté, une partie distincte contrôlée est utilisée. En théorie, les deux séries de moteurs devraient être exécuté à la vitesse de la cible au même moment dans le temps et le bot doit être exécuté dans une ligne droite. Pour alerter, une troisième, équilibrage, PID peut être utilisé pour corriger les divergences qui subsistent entre gauche et droite.
RB2 produit un autre défi : je ne pouvais pas régler la différence entre la gauche et la bonne vitesse. Je ne sais toujours pas a raison pour que (j’ai changé les moteurs, commuté pneus, inversé le câblage, essayé un autre moteur, changé le cadre, remplacé la batterie, mais n’a pas pu combler l’écart). Donc, dans mon script le PID équilibrage a le plus de poids dans la correction totale et la plus élevée des deux lectures encodeur est utilisé pour calculer la distance effectuée (en ajoutant un autre inexactitude). Cependant je crois que c’est la façon de mettre en oeuvre : tout d’abord régler le PID pour les moteurs. Une fois atteint le résultat souhaité et le comportement, mettre en œuvre le PID d’équilibrage.
Tout ce qui est laissé pour l’exécution de places maintenant, apporte tour à tour en exactement de 90 degrés. Et bien sûr: « Pourquoi jamais vouloir le bot pour courir à carrés? »