Robots suiveurs 3 - Code Contrôle au Clavier
Sauter à la navigation
Sauter à la recherche
#include <webots/Robot.hpp>
// Added a new include file
#include <webots/Motor.hpp>
#include <webots/Keyboard.hpp> // Ajout de la bibliothèque gérant les événements clavier.
#define TIME_STEP 64
#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;
}