Différences entre versions de « Pololu-Zumo-Shield-Arduino-suiveur-de-ligne »
Ligne 1 : | Ligne 1 : | ||
{{Pololu-Zumo-Shield-Arduino-NAV}} | {{Pololu-Zumo-Shield-Arduino-NAV}} | ||
− | Ce croquis/sketch montre comment le programmer le Zumo et son réseau de senseur {{polpl|1419}} pour suivre des lignes et participer à des courses de suivit de ligne. Une fois les [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|bibliothèques du shield Zumo]] installées, vous pouvez ouvrir l'exemple depuis le point de menu '''Fichier > Exemples > ZumoExamples > LineFollower'''. | + | Ce croquis/sketch montre comment le programmer le Zumo et son réseau de senseur {{polpl|1419}} pour suivre des lignes et participer à des courses de suivit de ligne (également appelé "'''Line Tracker'''" en anglais). Une fois les [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|bibliothèques du shield Zumo]] installées, vous pouvez ouvrir l'exemple depuis le point de menu '''Fichier > Exemples > ZumoExamples > LineFollower'''. |
{{POLImage|Pololu-Zumo-Shield-Arduino-suiveur-de-ligne-00.jpg|640px|Exemple de circuit "suiveur de ligne"}} | {{POLImage|Pololu-Zumo-Shield-Arduino-suiveur-de-ligne-00.jpg|640px|Exemple de circuit "suiveur de ligne"}} | ||
+ | |||
+ | Vous pouvez également consulter [https://youtu.be/fl0CJhPiEfY cette '''vidéo YouTube''' de Pololu] utilisant le 3Pi de Pololu mais dont le principe est identique avec notre Zumo. | ||
Cette implémentation du suiveur de ligne est très similaire à l'exemple de Pololu pour le robot 3pi {{polpl|975}}. Les concepts et stratégies mises en oeuvre sont expliquées en détails dans [https://www.pololu.com/docs/0J21/7 la section 7] du [https://www.pololu.com/docs/0J21|guide utilisateur du robot 3pi] (''pololu, anglais''). | Cette implémentation du suiveur de ligne est très similaire à l'exemple de Pololu pour le robot 3pi {{polpl|975}}. Les concepts et stratégies mises en oeuvre sont expliquées en détails dans [https://www.pololu.com/docs/0J21/7 la section 7] du [https://www.pololu.com/docs/0J21|guide utilisateur du robot 3pi] (''pololu, anglais''). |
Version du 19 avril 2017 à 16:01
Ce croquis/sketch montre comment le programmer le Zumo et son réseau de senseur lien pololu pour suivre des lignes et participer à des courses de suivit de ligne (également appelé "Line Tracker" en anglais). Une fois les bibliothèques du shield Zumo installées, vous pouvez ouvrir l'exemple depuis le point de menu Fichier > Exemples > ZumoExamples > LineFollower.
Vous pouvez également consulter cette vidéo YouTube de Pololu utilisant le 3Pi de Pololu mais dont le principe est identique avec notre Zumo.
Cette implémentation du suiveur de ligne est très similaire à l'exemple de Pololu pour le robot 3pi lien pololu. Les concepts et stratégies mises en oeuvre sont expliquées en détails dans la section 7 du utilisateur du robot 3pi (pololu, anglais).
Le code
Voici une copie de l'exemple avec traduction des commentaires pour vous aider à mieux comprendre le fonctionnement du croquis/sketch
Nous recommandons de toujours charger l'exemple depuis les codes d'exemples de la bibliothèque Zumo.
/*
* Demo line-following code for the Pololu Zumo Robot
*
* This code will follow a black line on a white background, using a
* PID-based algorithm. It works decently on courses with smooth, 6"
* radius curves and has been tested with Zumos using 30:1 HP and
* 75:1 HP motors. Modifications might be required for it to work
* well on different courses or with different motors.
*
* http://www.pololu.com/catalog/product/2506
* http://www.pololu.com
* http://forum.pololu.com
*/
#include <QTRSensors.h>
#include <ZumoReflectanceSensorArray.h>
#include <ZumoMotors.h>
#include <ZumoBuzzer.h>
#include <Pushbutton.h>
ZumoBuzzer buzzer;
ZumoReflectanceSensorArray reflectanceSensors;
ZumoMotors motors;
Pushbutton button(ZUMO_BUTTON);
int lastError = 0;
// This is the maximum speed the motors will be allowed to turn.
// (400 lets the motors go at top speed; decrease to impose a speed limit)
const int MAX_SPEED = 400;
void setup()
{
// Play a little welcome song
buzzer.play(">g32>>c32");
// Initialize the reflectance sensors module
reflectanceSensors.init();
// Wait for the user button to be pressed and released
button.waitForButton();
// Turn on LED to indicate we are in calibration mode
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
// Wait 1 second and then begin automatic sensor calibration
// by rotating in place to sweep the sensors over the line
delay(1000);
int i;
for(i = 0; i < 80; i++)
{
if ((i > 10 && i <= 30) || (i > 50 && i <= 70))
motors.setSpeeds(-200, 200);
else
motors.setSpeeds(200, -200);
reflectanceSensors.calibrate();
// Since our counter runs to 80, the total delay will be
// 80*20 = 1600 ms.
delay(20);
}
motors.setSpeeds(0,0);
// Turn off LED to indicate we are through with calibration
digitalWrite(13, LOW);
buzzer.play(">g32>>c32");
// Wait for the user button to be pressed and released
button.waitForButton();
// Play music and wait for it to finish before we start driving.
buzzer.play("L16 cdegreg4");
while(buzzer.isPlaying());
}
void loop()
{
unsigned int sensors[6];
// Get the position of the line. Note that we *must* provide the "sensors"
// argument to readLine() here, even though we are not interested in the
// individual sensor readings
int position = reflectanceSensors.readLine(sensors);
// Our "error" is how far we are away from the center of the line, which
// corresponds to position 2500.
int error = position - 2500;
// Get motor speed difference using proportional and derivative PID terms
// (the integral term is generally not very useful for line following).
// Here we are using a proportional constant of 1/4 and a derivative
// constant of 6, which should work decently for many Zumo motor choices.
// You probably want to use trial and error to tune these constants for
// your particular Zumo and line course.
int speedDifference = error / 4 + 6 * (error - lastError);
lastError = error;
// Get individual motor speeds. The sign of speedDifference
// determines if the robot turns left or right.
int m1Speed = MAX_SPEED + speedDifference;
int m2Speed = MAX_SPEED - speedDifference;
// Here we constrain our motor speeds to be between 0 and MAX_SPEED.
// Generally speaking, one motor will always be turning at MAX_SPEED
// and the other will be at MAX_SPEED-|speedDifference| if that is positive,
// else it will be stationary. For some applications, you might want to
// allow the motor speed to go negative so that it can spin in reverse.
if (m1Speed < 0)
m1Speed = 0;
if (m2Speed < 0)
m2Speed = 0;
if (m1Speed > MAX_SPEED)
m1Speed = MAX_SPEED;
if (m2Speed > MAX_SPEED)
m2Speed = MAX_SPEED;
motors.setSpeeds(m1Speed, m2Speed);
}
Basé sur "Zumo Shield for Arduino" de Pololu (www.pololu.com/docs/0J57) - Traduit en Français par shop.mchobby.be CC-BY-SA pour la traduction
Toute copie doit contenir ce crédit, lien vers cette page et la section "crédit de traduction". Traduit avec l'autorisation expresse de Pololu (www.pololu.com)
Based on "Zumo Shield for Arduino" from Pololu (www.pololu.com/docs/0J57) - Translated to French by shop.mchobby.be CC-BY-SA for the translation
Copies must includes this credit, link to this page and the section "crédit de traduction" (translation credit). Translated with the Pololu's authorization (www.pololu.com)