Zumo32U4 linefollower

De Wiki TGE CSTwiki
Aller à la navigation Aller à la recherche

Configuration initiale

1. À partir du bureau de Windows ou du gestionnaire d'application, démarrez Arduino IDE :

2. Dans la barre à gauche, cliquez sur « Library Manager » recherchez « Zumo32U4 » et assurez-vous que la librairie soit installée. Appuyez sur « Install » si ce n’est pas le cas.

3. Allez dans « File => Preferences ». À droite de « Additional boards manager URLs », aussurez-vous d’avoir :
https://files.pololu.com/arduino/package_pololu_index.json
Copiez et collez au besoin. Appuyez sur « OK ».

4. Dans la barre à gauche, cliquez sur « Board Manager » recherchez « Pololu A-Star Boards » et assurez-vous que la plaquette soit installée. Appuyez sur « Install » si ce n’est pas le cas.

5. Allez dans « File => Examples => Zumo32U4 » et cliquez sur « LineFollower ».

6. Modifiez les lignes 27 et 28 pour qu’elles soient ainsi :

Zumo32U4LCD display;
// Zumo32U4OLED display;

Cette modification permet de sélectionner le bon type d’écran qui est installé sur le robot. Le « // » fait ignorez la ligne au compilateur. Ainsi, le OLED est désactivé et le LCD est activé en tant qu’écran.

7. Branchez le robot Zumo à l’ordinateur à l’aide d’un câble USB et appuyez sur le bouton « Upload » :

Le robot devrait émettre une tonalité. Ignorez le message « Device code : 0x44 ».

8. Débranchez le robot du câble USB, assurez vous que le bouton des moteurs soit à « ON » et que la lumière bleue soit allumée et déposez le robot centré sur une ligne d’un parcours quelconque. Voyez comment le robot se comporte avant d’aller à la suite.

Modification du programme

9. Trouvez la ligne

const uint16_t maxSpeed = 400;

Ajoutez les lignes suivantes en dessous.

const uint16_t maxSpeed = 400;
// Paramètres PID
const float kp = 1;    // Action proportionnelle qui travaille avec l'erreur actuelle
const float ti = 1;  // Action intégrale (en seconde) qui travaille avec le passé de l'erreur
const float td = 0.05;    // Action dérivé (en seconde) qui travaille avec le futur de l'erreur

10. Trouvez la ligne

int16_t lastError = 0;

et changez la pour

float lastError = 0;

11. Trouvez les lignes

  int16_t speedDifference = error / 4 + 6 * (error - lastError);
  lastError = error;

et changez les pour

float kperreur = kp*error;
float accumulateur = accumulateur + kperreur;
accumulateur = constrain(accumulateur, 0, 5*maxSpeed);
float speedDifference = kperreur + 1/(1000*ti)*kperreur + (td/1000)*(kperreur-lastError);
lastError = kperreur;

12. Ajustez vos paramètres

const uint16_t maxSpeed = 400;
// Paramètres PID
const float kp = 1;    // Action proportionnelle qui travaille avec l'erreur actuelle
const float ti = 1;  // Action intégrale (en seconde) qui travaille avec le passé de l'erreur
const float td = 0.05;    // Action dérivé (en seconde) qui travaille avec le futur de l'érreur

La vitesse maximale est de 400. À cette vitesse, l'algorithme a de la difficulté à opérer le robot. Vous pouvez la diminuer à 200 pour travailler le kp, le ki et le kd. Faites des tests sur différents circuits et essayez d'augmenter en vitesse par la suite.

Le kp est le paramètre proportionnel qui réagit directement. C'est comme donner un coup de volant. Le ki est le paramètre de l'action intégrale, il corrige lentement des déviations de trajectoire. Sur le robot, Ki n'est pas très utile car le robot bouge rapidement. Le kd est le paramètre de l'action dérivée, il corrige rapidement les tendences de l'erreur mais augmente l'instabilité du robot.