Robots suiveurs 3 - Code Tutoriel Contrôle moteurs
Codes sources
Comme vu sur la page précédente, les robots sont pilotés à partir de programme appelées controllers.
Pour contrôler les moteurs, il existe 2 solutions possibles, asservir les moteurs en position ou en vitesse. Pour cela, il faut créer un nouveau controller (Voir Tuto sur la création et l'ajout de controller).
Le code pour piloter un moteur (les 2 solutions) peut se trouver ici.
Détails
- Contrôle des moteurs en position
#include <webots/Robot.hpp> #include <webots/Motor.hpp>
Il s'agit ici d'ajouter les bibliothèques nécessaires pour définir le robot et acceder au contrôle de ses moteurs
#define TIME_STEP 64
Definition du pas temporel. Ce paramètre doit nécessairement être un multiple du paramètre basicTimeStep associé au monde généré dans la section WorldInfo, sans quoi la simulation risque de saccader, voire planter.
Robot *robot = new Robot();
// get the motor devices
Motor *leftMotor = robot->getMotor("left wheel motor");
Motor *rightMotor = robot->getMotor("right wheel motor");
Dans cette section, le robot est défini et les moteurs des roues sont associés aux pointeurs créés pour pouvoir être utilisés dans la suite
// set the target position of the motors leftMotor->setPosition(10.0); rightMotor->setPosition(10.0);
Ici, des "positions" sont données comme cibles au moteurs, mais après certaines expérimentation, plus que des positions, il semblerait s'agir de distances à parcourir pour chaque moteur.
while (robot->step(TIME_STEP) != -1); delete robot;
La fonction step(TIME_STEP) est cruciale et doit être utilisée dans tout controller. Cette fonction actualise les données des capteurs et actionneurs entre Webots et les controllers.
Si la fonction n'est pas appelée, il n'y aura alors pas d'action réalisée par le robot dans Webot ni de mise ajour des données retournées par les capteurs dans le controller.
Si cette fonction retourne -1, cela indique que Webots est sur le point d'éteindre le controller. Ce moment arrive lorsque l'on appuie sur un des boutons reload ou quit de Webots.
- Contrôle des moteurs en vitesse