Robots suiveurs 3 - Code Contrôle au Clavier détaillé

De Learning Lab Environnements Connectés
Sauter à la navigation Sauter à la recherche

Pour voir les explications liées au contrôle moteur, se référer au tutoriel cité à la page précédente. <Nowiki>

  1. include <webots/Robot.hpp>

// Added a new include file

  1. include <webots/Motor.hpp>
  2. include <webots/Keyboard.hpp> // Ajout de la bibliothèque gérant les événements clavier.
  3. define TIME_STEP 64
  1. define MAX_SPEED 6.28

// All the webots classes are defined in the "webots" namespace using namespace webots;

int main(int argc, char **argv) { Robot *robot = new Robot();

// get a handler to the motors and set target position to infinity (speed control)
Motor *leftMotor = robot->getMotor("left wheel motor");
Motor *rightMotor = robot->getMotor("right wheel motor");
leftMotor->setPosition(INFINITY);
rightMotor->setPosition(INFINITY);
// Initialisation des moteurs à une vitesse nulle
leftMotor->setVelocity(0);
rightMotor->setVelocity(0);

// Initialisation de l'objet clavier

Keyboard keyboard = Keyboard();
keyboard.enable(50); // Activation de la détection des événements. La suite du code ne marchera pas sans cette option
while (robot->step(TIME_STEP) != -1){

  int key = keyboard.getKey(); // Détecte le code clavier retourné en fonction de la touche pressée

  
  if (key == -1) { // Si le code retourné est -1, aucune touche n'est enfoncée, il faut donc arrêter le robot
          leftMotor->setVelocity(0);
          rightMotor->setVelocity(0);
      }
   while (key > 0) {
     switch (key) {
       
       case 'Z': // Cas Z enfoncé : On applique la vitesse maximale pour avancer
          leftMotor->setVelocity(MAX_SPEED);
          rightMotor->setVelocity(MAX_SPEED);
          
         break;
       case 'S': //Cas S enfoncé : On applique la vitesse maximale négative pour reculer
          leftMotor->setVelocity(-MAX_SPEED);
          rightMotor->setVelocity(-MAX_SPEED);
         break;
       case 'Q': //Cas Q enfoncé : On applique une vitesse à une roue et l'inverse à l'autre pour pivoter à gauche. Au delà de 0.5 fois la vitesse maximale appliquée, la simulation de déplacement du robot saccade.
         leftMotor->setVelocity(-0.49*MAX_SPEED);
          rightMotor->setVelocity(0.49*MAX_SPEED);
         break;
       case 'D': //Cas D enfoncé : On applique une vitesse à une roue et l'inverse à l'autre pour pivoter à droite. Au delà de 0.5 fois la vitesse maximale appliquée, la simulation de déplacement du robot saccade.
         leftMotor->setVelocity(0.49*MAX_SPEED);
          rightMotor->setVelocity(-0.49*MAX_SPEED);
         break;
       //Cas A et E enfoncé : On applique une vitesse à une roue et une vitesse moins élevée à l'autre pour pivoter tout en avançant. Au delà de 0.75 fois la vitesse maximale appliquée, la simulation du déplacement du robot saccade aussi.
       case 'A': 
            leftMotor->setVelocity(0.5*MAX_SPEED);
            rightMotor->setVelocity(0.75*MAX_SPEED);
         break;
         case 'E':
            leftMotor->setVelocity(0.75*MAX_SPEED);
            rightMotor->setVelocity(0.5*MAX_SPEED);
         break;
       default: //Pour toute autre touche on arrête le robot
          leftMotor->setVelocity(0);
          rightMotor->setVelocity(0);
         break;
     }
     key = keyboard.getKey(); // Actualisation de la sortie clavier.
     
     
      
   }
  
   }
   
delete robot;
return 0;

}