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)