Différences entre versions de « Pololu-Zumo-Shield-Arduino-detecter-bord »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{Pololu-Zumo-Shield-Arduino-NAV}}
 
{{Pololu-Zumo-Shield-Arduino-NAV}}
  
{{traduction}}
+
Ajouter des senseurs au Zumo lui permet de sentir et réagir au monde qui l'entoure. Dans les compétitions sumo où deux robots essayent de se pousser l'un l'autre hors du ring (ring circulaire), il est important que  que le robot puisse détecter le bord du ring afin de ne pas dépasser la frontière. Etant donné que les rings sumo sont noir avec une bordure blanche (tout le long de la frontière), un senseur infrarouge tel que les capteurs QTR <small>[https://www.pololu.com/category/123/pololu-qtr-reflectance-sensors lien pololu]</small> est particulièrement bien adapté. Le réseau de senseur infrarouge du Zumo {{polpl|1419}} est équipé de 6 capteurs QTR sur une carte conçue pour prendre place directement sur le connecteur d'extension situé à l'avant du shield Zumo (note: le {{pl|448|zumo robot pre-assemblé}} {{polpl|2510}} est déjà équipé avec le réseau de senseur infrarouge).
  
Adding sensors to the Zumo allows it to sense and react to its surroundings. In a sumo competition where two robots try to push each other out of a circular ring, it is important for a robot to be able to detect the border of the ring so it can avoid driving over the edge. Since standard robot sumo rings are colored black with a white border around the edge, infrared reflectance sensors like our QTR sensors <small>[https://www.pololu.com/category/123/pololu-qtr-reflectance-sensors lien pololu]</small> are great for this purpose. The Zumo Reflectance Sensor Array {{polpl|1419}} conveniently mounts six of these sensors in a module designed to plug directly into the front expansion header of the Zumo Shield (note: the {{pl|448|pre-assembled version of the Zumo robot}} {{polpl|2510}} ships with this reflectance sensor array already installed).
+
{{POLImage|Pololu-Zumo-Shield-Arduino-detecter-bord-00.jpg|300px|Un robot Zumo se préparant à attaquer un SumoBot Parallax.}} {{POLImage|Pololu-Zumo-Shield-Arduino-ajouter-detecteur-ligne-33.jpg|300px|Le réseau de senseur infrarouge du Robot Zumo, vue du dessous.}}
  
{{POLImage|Pololu-Zumo-Shield-Arduino-detecter-bord-00.jpg|300px|A Zumo robot preparing to attack a Parallax SumoBot.}} {{POLImage|Pololu-Zumo-Shield-Arduino-ajouter-detecteur-ligne-33.jpg|300px|Zumo reflectance sensor array on a Zumo robot, bottom view.}}
+
Cet exemple montre comment programmer un Robot Zumo Arduino équipé du réseau de senseur infrarouge pour qu'il se balade dans sur un ring sans jamais en sortir. Notez qu'il utilise les deux senseurs situés sur chaque extrémité du réseau de capteur (ce qui est suffisant pour une détection de bordure). Après avoir installé les [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|bibliothèques Arduino du shield Zumo]], vous pouvez ouvrir le croquis/sketch en sélectionnant le point de menu '''Fichier > Exemples > ZumoExamples > BorderDetect'''.
  
This example demonstrates how to program an Arduino-controlled Zumo equipped with a reflectance sensor array to drive around and stay within a sumo ring. Note that it only uses the two outermost sensors on the array, which are sufficient for border detection. With the [[Pololu-Zumo-Shield-Arduino-bibliotheque-Zumo|Zumo Shield Arduino Libraries]] installed, the sketch file can be opened in Arduino by selecting '''Fichier > Exemples > ZumoExamples > BorderDetect'''.
+
Vous pourriez avoir besoin de modifier quelques éléments du script pour qu'il fonctionne bien avec votre Zumo:
 +
* S'il l'un de vos moteurs est connecté à l'envers, dé-commentez les lignes 48 et/ou 49 pour corriger leur sens de rotation.
 +
* Ajuster la vitesse et les temps de de pause (''duration'') dans lignes 13-17. D'une façon générale, des vitesses plus faibles et temps de pause plus courts fonctionnent mieux avec des moteurs rapides -tandis- que des vitesses plus élevées et temps de pause plus long seront plus adéquat avec des moteurs plus lents.<br />Les valeurs par défaut fonctionnent bien avec un Zumo équipé de moteurs 75:1 HP {{polpl|2361}}.
 +
* Pour finir, le seuil de lecture du senseur (''threshold'' en anglais) utilisé pour différencier les surfaces noires et blanches, est définit à la ligne 10. Vous pourriez avoir besoin de changer cette valeur en fonction de votre environnement surface de votre ring). Attention: les surfaces noires lisses/en verre réfléchissent également la lumière infrarouge... il sera donc difficile, voire impossible, de distinguer la surface noire réfléchissante des surfaces blanches.
  
You might need to edit a few things in this sketch to make it work well with your Zumo:
+
Téléversez le croquis/sketch sur l'Arduino monté sur le Zumo, Placez votre robot Zumo sur le ring (ou une grade surface noire entouré d'une bordure claire) et pressez le bouton utilisateur. Soyez prêt à rattraper votre Zumo au cas où il quitterait le ring! Si tout fonctionne comme prévu, votre Zumo devrait entamer un décompte sonot (sur le Buzzer) puis commence à se déplacer en ligne droite jusqu'à ce qu'il rencontre le bord du ring; alors, il doit reculer, tourner puis continuer son déplacement.<br />Essayez d'ajuster les paramètres mentionnés ci-dessus si cela ne fonctionne pas comme prévu.  
* If one or both of your motors have been connected backwards, uncomment lines 48 and/or 49 to correct their directions.
 
* Adjust the speeds and durations in lines 13-17. Generally, lower speeds and shorter durations should work better with faster motors, while higher speeds and longer durations should be more appropriate for slower motors. We found that these default values worked well with a Zumo using 75:1 HP motors {{polpl|2361}}.
 
* Finally, the sensor reading threshold used to differentiate between black and white surfaces, defined on line 10, might need to be changed to suit your environment.
 
  
Upload the sketch to an Arduino mounted on a Zumo, place the Zumo on a sumo ring (or a similar large dark surface with a light border), and press the user pushbutton. Be ready to catch the Zumo in case it drives off the ring! If everything works right, the Zumo should sound a countdown with its buzzer and then start driving forward until it detects the ring border; it should then back up, turn, and continue. If not, try adjusting some of the parameters as described above. Here are some specific troubleshooting tips:
+
Voici quelques trucs et astuces de dépannage:
* If the Zumo overshoots the ring border, try lowering FORWARD_SPEED (especially if it is going very fast) or reducing QTR_THRESHOLD.
+
* Si le Zumo dépasse de bord du ring, essayez de diminuer la valeur de FORWARD_SPEED (''vitesse en marche avant'', particulièrement indiqué s'il se déplace rapidement) ou réduire la valeur de QTR_THRESHOLD (''seuil de détection du senseur infrarouge'').
* If the Zumo stops at the border but turns too much or not enough before continuing, adjust TURN_SPEED and/or TURN_DURATION.
+
* Si le Zumo s'arrête sur le bord mais tourne trop (ou pas assez) avant de continuer alors ajustez la valeur de TURN_SPEED (''vitesse de rotation'') et/ou TURN_DURATION (''temps de rotation'').
* If you do not hear any sound from the buzzer, make sure you have the [[Pololu-Zumo-Shield-Arduino-extension-avant|buzzer control jumper]] configured correctly for your Arduino.
+
* Si vous n'entendez pas de le son du buzzer, vérifiez que [[Pololu-Zumo-Shield-Arduino-extension-avant|le cavalier de configuration du buzzer]] est configuré conformément à votre modèle de carte Arduino.
  
The ability to wander around while staying inside a sumo ring is enough to allow a Zumo to compete as a basic sumo robot, but a more advanced robot might be able to detect its opponent and drive toward it directly. As a next step, you might consider adding more sensors, such as range finders <small>[https://www.pololu.com/category/79/sharp-distance-sensors lien pololu]</small> to allow the Zumo to find its opponent instead of relying on luck to make contact.
+
La possibilité de pouvoir errer à l'intérieur du ring sumo est suffisant pour que votre robot Zumo puisse participer à des compétitions de robot sumo. C'est une fonctionnalité rudimentaire, un croquis/sketch plus avancé permettrait la détection de l'opposant pour se diriger directement sur lui. Pour améliorer votre robot Zumo, vous pourriez considérer l'ajout de plusieurs senseurs, comme ceux permettant d'évaluer la distance <small>[https://www.pololu.com/category/79/sharp-distance-sensors lien pololu]</small> (permettant ainsi de détecter un opposant plutôt que de compter sur la chance de le percuter).
 +
 
 +
== 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.  
 +
 
 +
<syntaxhighlight lang="c">
 +
#include <ZumoBuzzer.h>
 +
#include <ZumoMotors.h>
 +
#include <Pushbutton.h>
 +
#include <QTRSensors.h>
 +
#include <ZumoReflectanceSensorArray.h>
 +
 +
#define LED 13
 +
 +
// Cette valeur aura peut être besoin d'être ajusté pour les
 +
// différentes conditions d'éclairages, surfaces, etc.
 +
#define QTR_THRESHOLD  1500 // microseconds
 +
 
 +
// A ajuster en en fonction des différents types de moteur
 +
#define REVERSE_SPEED    200 // 0 est stoppé, 400 à pleine vitesse
 +
#define TURN_SPEED        200
 +
#define FORWARD_SPEED    200
 +
#define REVERSE_DURATION  200 // ms
 +
#define TURN_DURATION    300 // ms
 +
 +
ZumoBuzzer buzzer;
 +
ZumoMotors motors;
 +
Pushbutton button(ZUMO_BUTTON); // Bouton poussoir sur la broche 12
 +
 +
#define NUM_SENSORS 6
 +
unsigned int sensor_values[NUM_SENSORS];
 +
 +
ZumoReflectanceSensorArray sensors(QTR_NO_EMITTER_PIN);
 +
 
 +
# Attendre après le bouton et faire le décompte
 +
void waitForButtonAndCountDown()
 +
{
 +
  digitalWrite(LED, HIGH);
 +
  button.waitForButton();
 +
  digitalWrite(LED, LOW);
 +
 
 +
  // Jouer un décompte audio
 +
  for (int i = 0; i < 3; i++)
 +
  {
 +
    delay(1000);
 +
    buzzer.playNote(NOTE_G(3), 200, 15);
 +
  }
 +
  delay(1000);
 +
  buzzer.playNote(NOTE_G(4), 500, 15); 
 +
  delay(1000);
 +
}
 +
 +
void setup()
 +
{
 +
  // Dé-commenter pour corriger le sens de rotation des moteurs (si nécessaire)
 +
  //motors.flipLeftMotor(true);
 +
  //motors.flipRightMotor(true);
 +
 
 +
  pinMode(LED, HIGH);
 +
 
 +
  waitForButtonAndCountDown();
 +
}
 +
 
 +
void loop()
 +
{
 +
  if (button.isPressed())
 +
  {
 +
    // Si le bouton est pressé, arrêter et attente une seconde
 +
    // pression du bouton pour continuer
 +
    motors.setSpeeds(0, 0);
 +
    button.waitForRelease();
 +
    waitForButtonAndCountDown();
 +
  }
 +
 
 +
 
 +
  sensors.read(sensor_values);
 +
 
 +
  if (sensor_values[0] < QTR_THRESHOLD)
 +
  {
 +
    // Si le senseur le plus à gauche détecte une ligne, reculer et tourner à droite
 +
    motors.setSpeeds(-REVERSE_SPEED, -REVERSE_SPEED);
 +
    delay(REVERSE_DURATION);
 +
    motors.setSpeeds(TURN_SPEED, -TURN_SPEED);
 +
    delay(TURN_DURATION);
 +
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
 +
  }
 +
  else if (sensor_values[5] < QTR_THRESHOLD)
 +
  {
 +
    // Si le senseur le plus à droit détecte une ligne, reculer et tourner à gauche
 +
    motors.setSpeeds(-REVERSE_SPEED, -REVERSE_SPEED);
 +
    delay(REVERSE_DURATION);
 +
    motors.setSpeeds(-TURN_SPEED, TURN_SPEED);
 +
    delay(TURN_DURATION);
 +
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
 +
  }
 +
  else
 +
  {
 +
    // Sinon, aller tout droit
 +
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
 +
  }
 +
}
 +
</syntaxhighlight>
  
 
{{Pololu-Zumo-Shield-Arduino-TRAILER}}
 
{{Pololu-Zumo-Shield-Arduino-TRAILER}}

Version actuelle datée du 19 avril 2017 à 15:47

Ajouter des senseurs au Zumo lui permet de sentir et réagir au monde qui l'entoure. Dans les compétitions sumo où deux robots essayent de se pousser l'un l'autre hors du ring (ring circulaire), il est important que que le robot puisse détecter le bord du ring afin de ne pas dépasser la frontière. Etant donné que les rings sumo sont noir avec une bordure blanche (tout le long de la frontière), un senseur infrarouge tel que les capteurs QTR lien pololu est particulièrement bien adapté. Le réseau de senseur infrarouge du Zumo lien pololu est équipé de 6 capteurs QTR sur une carte conçue pour prendre place directement sur le connecteur d'extension situé à l'avant du shield Zumo (note: le zumo robot pre-assemblé lien pololu est déjà équipé avec le réseau de senseur infrarouge).

Pololu-Zumo-Shield-Arduino-detecter-bord-00.jpg

Un robot Zumo se préparant à attaquer un SumoBot Parallax.

Cliquer l'image pour l'agrandir

Pololu-Zumo-Shield-Arduino-ajouter-detecteur-ligne-33.jpg

Le réseau de senseur infrarouge du Robot Zumo, vue du dessous.

Cliquer l'image pour l'agrandir

Cet exemple montre comment programmer un Robot Zumo Arduino équipé du réseau de senseur infrarouge pour qu'il se balade dans sur un ring sans jamais en sortir. Notez qu'il utilise les deux senseurs situés sur chaque extrémité du réseau de capteur (ce qui est suffisant pour une détection de bordure). Après avoir installé les bibliothèques Arduino du shield Zumo, vous pouvez ouvrir le croquis/sketch en sélectionnant le point de menu Fichier > Exemples > ZumoExamples > BorderDetect.

Vous pourriez avoir besoin de modifier quelques éléments du script pour qu'il fonctionne bien avec votre Zumo:

  • S'il l'un de vos moteurs est connecté à l'envers, dé-commentez les lignes 48 et/ou 49 pour corriger leur sens de rotation.
  • Ajuster la vitesse et les temps de de pause (duration) dans lignes 13-17. D'une façon générale, des vitesses plus faibles et temps de pause plus courts fonctionnent mieux avec des moteurs rapides -tandis- que des vitesses plus élevées et temps de pause plus long seront plus adéquat avec des moteurs plus lents.
    Les valeurs par défaut fonctionnent bien avec un Zumo équipé de moteurs 75:1 HP lien pololu.
  • Pour finir, le seuil de lecture du senseur (threshold en anglais) utilisé pour différencier les surfaces noires et blanches, est définit à la ligne 10. Vous pourriez avoir besoin de changer cette valeur en fonction de votre environnement surface de votre ring). Attention: les surfaces noires lisses/en verre réfléchissent également la lumière infrarouge... il sera donc difficile, voire impossible, de distinguer la surface noire réfléchissante des surfaces blanches.

Téléversez le croquis/sketch sur l'Arduino monté sur le Zumo, Placez votre robot Zumo sur le ring (ou une grade surface noire entouré d'une bordure claire) et pressez le bouton utilisateur. Soyez prêt à rattraper votre Zumo au cas où il quitterait le ring! Si tout fonctionne comme prévu, votre Zumo devrait entamer un décompte sonot (sur le Buzzer) puis commence à se déplacer en ligne droite jusqu'à ce qu'il rencontre le bord du ring; alors, il doit reculer, tourner puis continuer son déplacement.
Essayez d'ajuster les paramètres mentionnés ci-dessus si cela ne fonctionne pas comme prévu.

Voici quelques trucs et astuces de dépannage:

  • Si le Zumo dépasse de bord du ring, essayez de diminuer la valeur de FORWARD_SPEED (vitesse en marche avant, particulièrement indiqué s'il se déplace rapidement) ou réduire la valeur de QTR_THRESHOLD (seuil de détection du senseur infrarouge).
  • Si le Zumo s'arrête sur le bord mais tourne trop (ou pas assez) avant de continuer alors ajustez la valeur de TURN_SPEED (vitesse de rotation) et/ou TURN_DURATION (temps de rotation).
  • Si vous n'entendez pas de le son du buzzer, vérifiez que le cavalier de configuration du buzzer est configuré conformément à votre modèle de carte Arduino.

La possibilité de pouvoir errer à l'intérieur du ring sumo est suffisant pour que votre robot Zumo puisse participer à des compétitions de robot sumo. C'est une fonctionnalité rudimentaire, un croquis/sketch plus avancé permettrait la détection de l'opposant pour se diriger directement sur lui. Pour améliorer votre robot Zumo, vous pourriez considérer l'ajout de plusieurs senseurs, comme ceux permettant d'évaluer la distance lien pololu (permettant ainsi de détecter un opposant plutôt que de compter sur la chance de le percuter).

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.

#include <ZumoBuzzer.h>
#include <ZumoMotors.h>
#include <Pushbutton.h>
#include <QTRSensors.h>
#include <ZumoReflectanceSensorArray.h>
 
#define LED 13
 
// Cette valeur aura peut être besoin d'être ajusté pour les 
// différentes conditions d'éclairages, surfaces, etc.
#define QTR_THRESHOLD  1500 // microseconds
  
// A ajuster en en fonction des différents types de moteur
#define REVERSE_SPEED     200 // 0 est stoppé, 400 à pleine vitesse
#define TURN_SPEED        200
#define FORWARD_SPEED     200
#define REVERSE_DURATION  200 // ms
#define TURN_DURATION     300 // ms
 
ZumoBuzzer buzzer;
ZumoMotors motors;
Pushbutton button(ZUMO_BUTTON); // Bouton poussoir sur la broche 12
 
#define NUM_SENSORS 6
unsigned int sensor_values[NUM_SENSORS];
 
ZumoReflectanceSensorArray sensors(QTR_NO_EMITTER_PIN);

# Attendre après le bouton et faire le décompte
void waitForButtonAndCountDown()
{
  digitalWrite(LED, HIGH);
  button.waitForButton();
  digitalWrite(LED, LOW);
   
  // Jouer un décompte audio
  for (int i = 0; i < 3; i++)
  {
    delay(1000);
    buzzer.playNote(NOTE_G(3), 200, 15);
  }
  delay(1000);
  buzzer.playNote(NOTE_G(4), 500, 15);  
  delay(1000);
}
 
void setup()
{
  // Dé-commenter pour corriger le sens de rotation des moteurs (si nécessaire)
  //motors.flipLeftMotor(true);
  //motors.flipRightMotor(true);
   
  pinMode(LED, HIGH);
   
  waitForButtonAndCountDown();
}

void loop()
{
  if (button.isPressed())
  {
    // Si le bouton est pressé, arrêter et attente une seconde
    // pression du bouton pour continuer
    motors.setSpeeds(0, 0);
    button.waitForRelease();
    waitForButtonAndCountDown();
  }
   

  sensors.read(sensor_values);
  
  if (sensor_values[0] < QTR_THRESHOLD)
  {
    // Si le senseur le plus à gauche détecte une ligne, reculer et tourner à droite
    motors.setSpeeds(-REVERSE_SPEED, -REVERSE_SPEED);
    delay(REVERSE_DURATION);
    motors.setSpeeds(TURN_SPEED, -TURN_SPEED);
    delay(TURN_DURATION);
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
  }
  else if (sensor_values[5] < QTR_THRESHOLD)
  {
    // Si le senseur le plus à droit détecte une ligne, reculer et tourner à gauche
    motors.setSpeeds(-REVERSE_SPEED, -REVERSE_SPEED);
    delay(REVERSE_DURATION);
    motors.setSpeeds(-TURN_SPEED, TURN_SPEED);
    delay(TURN_DURATION);
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
  }
  else
  {
    // Sinon, aller tout droit
    motors.setSpeeds(FORWARD_SPEED, FORWARD_SPEED);
  }
}

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)