Test et réglage des boucles PID

Un défi dans l’utilisation de capteurs pour contrôler les mécanismes est d’avoir un bon algorithme pour conduire les moteurs à la bonne position ou vitesse. L’algorithme de contrôle le plus couramment utilisé est appelé contrôle PID. Il y a une excellente série de vidéos (recherchez la liste de lecture sur les commandes du robot) qui expliquent les algorithmes de commande décrits ici. L’algorithme PID convertit les valeurs des capteurs en vitesse de moteur ainsi:

  1. Lecture des valeurs du capteur pour déterminer la distance du robot ou du mécanisme par rapport à la valeur cible souhaitée. La cible est la valeur du capteur qui correspond à l’objectif attendu. Par exemple, un bras de robot avec un joint articulé similaire à un poignet, défini ci-dessous comme « poignet » pour alléger le texte, devrait pouvoir se déplacer très rapidement selon un angle spécifié et s’arrêter à cet angle, comme indiqué par un capteur. Un potentiomètre est un capteur qui peut mesurer l’angle de rotation. En le connectant à une entrée analogique, le programme peut obtenir une mesure de tension directement proportionnelle à l’angle.

  2. Calcul de l’écart (la différence entre la valeur du capteur et la valeur souhaitée). Le signe de la valeur de l’écart indique de quel côté de la valeur cible le poignet se trouve. Par exemple, des valeurs négatives peuvent indiquer que l’angle de poignet mesuré est supérieur à l’angle de poignet souhaité. L’ampleur de l’écart est la différence entre l’angle du poignet mesuré et l’angle réel du poignet. Si l’écart est nul, l’angle mesuré correspond exactement à l’angle souhaité. L’écart peut être utilisé comme entrée de l’algorithme PID pour calculer la vitesse d’un moteur.

  3. La vitesse du moteur qui en résulte est utilisée pour entraîner le moteur dans la bonne direction et à une vitesse qui, espérons-le, atteindra la valeur cible le plus rapidement possible sans dépassement (dépassement de la valeur cible).

WPILib a une classe PIDController qui supporte l’algorithme PID et accepte des constantes correspondant aux valeurs Kp, Ki et Kd. L’algorithme PID a trois composants qui contribuent au calcul de la vitesse du moteur à partir de l’écart.

  1. P (proportionnel) - c’est un terme qui, multiplié par une constante (Kp), générera une vitesse du moteur qui aidera à déplacer le moteur dans la bonne direction et à la bonne vitesse.

  2. I (intégrale) - ce terme est la somme des écarts successifs. Plus l’écart persiste, plus la contribution intégrale sera importante. Il s’agit simplement de la somme de tous les écarts dans le temps. Si le poignet n’atteint pas tout à fait la valeur cible en raison d’une grande charge qu’il essaie de déplacer, le terme intégral continuera d’augmenter (somme des écarts) jusqu’à ce qu’il contribue suffisamment à la vitesse du moteur pour le faire passer au point cible. La somme des écarts est multipliée par une constante (Ki) pour mettre à l’échelle le terme intégral du système.

  3. D (différentiel) - cette valeur est le taux de variation des écarts. Elle est utilisée pour ralentir la vitesse du moteur s’il se déplace trop vite. Elle est calculée en prenant la différence entre la valeur d’écart actuelle et la valeur d’écart précédente. Elle est également multipliée par une constante (Kd) pour la mettre à l’échelle afin qu’elle corresponde au reste du système.

Réglage du contrôleur PID

Le réglage du contrôleur PID consiste à choisir des constantes qui donneront de bonnes performances. Shuffleboard facilite ce processus en affichant les détails d’un sous-système PID avec une interface utilisateur pour définir les valeurs constantes et tester son bon fonctionnement. Ceci est affiché pendant que le robot fonctionne en mode Test (fait en réglant « Test » dans la station de pilotage).

Covers each section of the PIDController Subsystem widget.

Il s’agit de l’image du mode Test d’un sous-système baptisé wrist qui représente un poignet articulé et qui a un potentiomètre comme capteur (pot) et un contrôleur de moteur connecté au moteur. Il a un certain nombre de champs qui correspondent au PIDSubsystem.

  1. La valeur de la tension d’entrée analogique du potentiomètre. Il s’agit de la valeur d’entrée du capteur.

  2. Un curseur qui déplace le moteur du poignet dans les deux sens avec 0 à l’arrêt. Les valeurs positives et négatives correspondent à un déplacement vers le haut et vers le bas.

  3. Les constantes PID telles que décrites ci-dessus (F est une valeur à action directe utilisée pour les boucles PID de vitesse)

  4. La valeur cible qui correspond à la valeur du pot lorsque le poignet a atteint la valeur souhaitée

  5. Active le contrôleur PID - Ne fonctionne plus, voir ci-dessous.

Essayez différents gains PID pour obtenir les performances moteur souhaitées. Vous pouvez regarder la vidéo liée au début de cet article ou d’autres sources sur Internet pour obtenir les performances souhaitées.

Important

L’option enable n’affecte pas le PIDController introduit en 2020, car le contrôleur est mis à jour à chaque boucle de robot. Consultez l’exemple ci-dessous pour savoir comment conserver cette fonctionnalité.

Activer la fonctionnalité dans le nouveau PIDController

L’exemple suivant montre comment créer un bouton sur votre tableau de bord qui activera / désactivera le PIDController.

ShuffleboardTab tab = Shuffleboard.getTab("Shooter");
NetworkTableEntry shooterEnable = tab.add("Shooter Enable", false).getEntry();

// Command Example assumed to be in a PIDSubsystem
new NetworkButton(shooterEnable).whenPressed(new InstantCommand(m_shooter::enable));

// Timed Robot Example
if (shooterEnable.getBoolean()) {
  // Calculates the output of the PID algorithm based on the sensor reading
  // and sends it to a motor
  motor.set(pid.calculate(encoder.getDistance(), setpoint));
}