From c2dd6a00399552d0bb39955cba0e6d70f54b6f9c Mon Sep 17 00:00:00 2001 From: haller Date: Sat, 23 Apr 2005 22:33:57 +0000 Subject: Définition des fonctions Ebauche pour Ai::run --- 2005/i/robert/src/ai/Makefile.defs | 2 +- 2005/i/robert/src/ai/ai.cc | 73 +++++++++++++++++++++++++++----------- 2005/i/robert/src/ai/ai.hh | 15 +++++--- 3 files changed, 64 insertions(+), 26 deletions(-) (limited to '2005/i/robert/src') diff --git a/2005/i/robert/src/ai/Makefile.defs b/2005/i/robert/src/ai/Makefile.defs index 4855ca6..f150cac 100644 --- a/2005/i/robert/src/ai/Makefile.defs +++ b/2005/i/robert/src/ai/Makefile.defs @@ -2,6 +2,6 @@ PROGRAMS += test_ai ai_OBJECTS = ai.o -test_ai_OBJECTS = test_ai.o $(ai_OBJECTS) +test_ai_OBJECTS = test_ai.o $(ai_OBJECTS) $(motor_OBJECTS) test_ai: $(test_ai_OBJECTS) diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index 599efc1..2fbe9cb 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -23,56 +23,87 @@ // // }}} +#include"ai.hh" + /// Constructeur Ai::Ai(const Config & config) - :motor(config), roundDuration(config.get("ai.roundDuration")), - enMouvement(false) + :motor_(config), es_(config), + roundDuration_(config.get("ai.roundDuration")), + vitesseAsc_(config.set("ai.vitesseAsc")) { + /// XXX comment on lance le robot? apelle dans main?? } /// Initialise le robot -void init(void) +void Ai::init(void) { // Initialise les moteurs motor_.init(); // initialise la carte es es_.init(); - // XXX peut-il faire des actions?? + // XXX Faut-il initialiser la vision } /// stop le robot -void stop(void) +void Ai::stop(void) { // Stop les moteurs motor_.stop(); } /// Lance le robot -void run(void) +void Ai::run(void) { - // XXX Effectue plein d'actions plus ou moins conne - + // Attend l'entrée du jack "pret à initialiser" + waitJack(false); + // Attend la première sortie du jack(init) + waitJack(true); + //Initialise le robot + init(); + // Attend le jack "pret à partir" + waitJack(false); + // Attend la seconde sortie du jack(Daniel) + waitJack(true); + // XXX on lance le temps + Timer::get_time(); + // Aller devant la boule + goTo(x, y, 0); // XXX l'angle 0 ca pointe ou?? + // Taper la boule + basic(d); + // se placer devant nos quilles près du pont + basic(-d); + rotation(-M_PI / 2); + goTo(x,y, M_PI); + basic(-d); + // Après attendre... XXX Ou voir un truc qui bouge + // Un truc + // Detecter les quilles tombées (voir si se déplacer proches du rb adverses serait utiles) + // Y Aller + // remonter les quilles (voir si sharp sur ventouses serait utiles) + // reculer + // redetecter le tout } // Attend le jack entré (false) ou sorti (true). -void waitJack (bool out) +void Ai::waitJack (bool out) { while (es_.stateJack() != out) - update(); + update(); // XXX Le timeout, générale statique ou argument de update + /// on verra } /// Rejoint un point. (argument en mm) -void goTo (double x, double y) // XXX Y'a une vitesse par defaut?? +void Ai::goTo (double x, double y) // XXX Y'a une vitesse par defaut?? non { while (motor_.getX() != x || motor_.getY() != y) { - motor_.goTo(x,y); + motor_.goTo(x,y); /// XXX On peut pas mettre un arg pour a? oui c'est cool et surcharger update(); } } /// Recale contre une bordure. -void recale (void) +void Ai::recale (void) { while(!es_.capteursContact()) { @@ -82,39 +113,41 @@ void recale (void) } /// Mouvement basic. XXX c'est quoi les arguments là?? -void basic (double v, double d) +void Ai::basic (double v, double d) { - motor.setSpeed(v); + motor_.setSpeed(v); // XXX Vitesse par defaut à restorer? + // XXX A chercher dans config?? do { motor_.linearMove(d); update(); // XXX Et si on se prend un mur????? } - while (!motor_.waiting()); + while (!motor_.idle()); } /// Rotation (argument en radian) -void rotation (double a) +void Ai::rotation (double a) { do { motor_.rotation(a); update(); - }while (!motor_.waiting()); + }while (!motor_.idle()); } /// Monte(vrai) ou descend(faux) l'ascenceur -void ascenceur (bool monte) +void Ai::ascenceur (bool monte) { while(es_.stateAsc() != monte ? true : false) { es_.moveAsc(monte); // XXX bon le nom de la fonction est à chier on est d'accord + // XXX On peut régler la vitesse de l'asc( config) update(); } } /// Désactive les ventouse -void ventouses (void) +void Ai::ventouses (void) { es_.ventouses(); while(!es_.stateVentouses()) // XXX Ca, ca doit servir à rien diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh index b86412e..8261097 100644 --- a/2005/i/robert/src/ai/ai.hh +++ b/2005/i/robert/src/ai/ai.hh @@ -25,6 +25,11 @@ // // }}} +#include "motor/motor.hh" +#include "es/es.hh" +#include "scheduler/scheduler.hh" +#include "config/config.hh" + /// Intelligence (encore plus heu...) artificielle class Ai { @@ -33,12 +38,10 @@ class Ai Motor motor_; Es es_; // Scheduler du robot - Scheduler scheduler_; - // Gpio gpio_; // XXX + scheduler::Scheduler scheduler_; // Paramètre de Ai const int roundDuration_; - // Etat du robot - bool enMouvement; + const int vitesseAsc_; public: /// Constructeur @@ -48,7 +51,7 @@ class Ai /// Arrète le robot. void stop (void); /// Lance le robot. - void run (int strat); + void run (void); protected: /// Lance le robot. void run0 (void); @@ -69,6 +72,8 @@ class Ai void ascenceur (bool monte); /// Désactive les ventouse void ventouses (void); + /// Attend une mise à jour + void update (void); }; #endif // ai_hh -- cgit v1.2.3