BTS Mesure BTS Mesure
pH IOTMySQLressources phpjaugegraphesrobotGyro

               

Les parcours

Parcours test : allerRetour()

Ce parcours nous a servi de mise au point et n'est pas optimisé.

void allerRetour() {    // Fonction à optimiser : il y a des redondances
  
  // Si le Demi-Tour (DT) est validé par le compteur précis durant 100*2 = 200ms : 
   if (precis>100 && consigne==1800) { // Gestion dynamique des paramètres PID
      consigne=0;precis=0;    // On repasse la consigne à zéro
      Kp=Kp0;                 // correction P inchangée
      Ki=Ki0;                 // on réactive la correction I
      Kd=Kd0;                 // On remet la correction D à son niveau initial
      Gz=0;}
      
   correction(consigne); 	// Calcul de la correction et commande moteur

  // Au bout de 6s de marche avant, on commande un demi-tour et on ajuste les paramètres PID pour ce DT 
   if (nav==3000) {   
      consigne=1800;   // Consigne pour un DT Gauche
      precis=0;       // RAZ du compteur precis
      I=0;            // la correction I repart de zéro
      Kp=Kp0;         //  Corrrection P active
      Ki=0;           // Durant le demi-tour on supprime la correction I qui apporte de l'instabilité
      Kd=3*Kd0;       // On maximise la correction D
      } // Le premier DT commence 
      
 // Validation du premier DT 
   if (abs(consigne)>0 && precis >100 && nav<6000) {
      consigne=0;   // Après le DT  RAZ de consigne
      precis=0;     // RAZ du compteur precis
      nav=3000;     // On ne tient pas compte du temps du DT pour repartir 6 s dans l'autre sens
      Gz=0;         // Recalibrage de l'angle mesuré à 0
      Kp=Kp0; Ki=Ki0; Kd=Kd0;   // On remet les paramètres PID pour une ligne droite
      }  // Le premier DT est terminé

  // Après 6s aller et 6s retour on commande le DT final   
   if (nav==6000) {
        consigne=-1800; // Consigne pour un DT Droite, pour équilibrer...
        precis=0;
        I=0;
        Kp=Kp0;Ki=0;Kd=3*Kd0; // Paramètres PID pour un DT
        }// fin du paramétrage du DT final
        
   // Validation du DT final et arrêt des moteurs
   if (abs(consigne)>0 && precis >10 && nav>6000) {
      consigne=0;
      precis=0;
      Gz=0; 
      Kp=Kp0; Ki=Ki0; Kd=Kd0; // Ligne droite paramètres PID par défaut
      vitesse=0;    // après cette étape le robot s'arrête
      nav=0;
      Moteur(0,0);
      return;}
   
   nav++; // Compteur nav : n en marche avant...
}

A retenir :

Il est intéressant de ne pas prendre les mêmes paramètres PID pour une ligne droite et pour un virage.

Pour une ligne droite :

On active la correction I et la correction D peut-être faible.

Pour un virage : 

On désactive la correction I qui apporte de l'instabilité et on amplifie la correction D qui réduit la rapidité du virage mais le rend plus précis et plus stable.

A chaque fois qu'une consigne est validée on recalibre l'angle et Gz à zéro.

Parcours télécommande :

Le parcours télécommande sera plus simple. Par exemple :

  • Si la consigne est différente de 0 et abs(angle)<10 (détection d'une nouvelle consigne) , on remet précis à 0 et on applique les paramètres PID virage.
  • Si la consigne est différente de 0 et que précis >100 (virage effectué et validé) , on remet à zéro : consigne, précis, I et Gz pour recalibrer l'angle. Et on applique les paramètres PID ligne droite
    Rappel : la télécommande ne peut envoyer un nouvel ordre que si consigne=0.
  • on appelle la fonction correction(consigne)