From 7c4f39a4f958177b6a9f6b718055dd2dfe688e98 Mon Sep 17 00:00:00 2001 From: haller Date: Wed, 4 May 2005 20:21:52 +0000 Subject: Codage en profondeur des fonctions Début de l'automate --- 2005/i/robert/src/ai/ai.cc | 104 ++++++++++++++++++++++++++++++++++----------- 2005/i/robert/src/ai/ai.hh | 4 +- 2 files changed, 83 insertions(+), 25 deletions(-) (limited to '2005/i/robert/src') diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index 12e8f88..8762475 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -54,7 +54,7 @@ void Ai::init(void) es_.init(); // on init la vision oVision_.init(motor_.colorState() ? Group::redSkittle : - Group::greenSkittle); + Group::greenSkittle); /// XXX } /// stop le robot @@ -73,33 +73,59 @@ void Ai::run(void) waitJack(true); //Initialise le robot init(); + // On recule dans le mur + recale (); + // On avance vers la position de départ en y + basic (155); // 215 - 60 = 155 + // On rotate de 90 ° + rotation (0); + // On se recale vers x + recale(); // Attend le jack "pret à partir" waitJack(false); // Attend la seconde sortie du jack(Daniel) waitJack(true); // on lance le temps Timer::startRound(); + // On temporise pour laisser Taz sortir + temporisation(500); + // On avance pour pouvoir aller vers la boule parallèlement au socle + basic(540); // 600 - 60 // Aller devant la boule - goTo(10, 10, 0); // XXX Mauvaise valeur, changer valeur + goTo(1200, -975, M_PI); // Taper la boule - basic(1245665486); // XXX Mauvaise valeur, changer valeur + basic(-220); // se placer devant nos quilles près du pont - basic(5568786); // XXX Mauvaise valeur, changer valeur - rotation(-M_PI / 2); - goTo(4546,42424242, M_PI); // XXX Mauvaise valeur, changer valeur - basic(56465456); // XXX Mauvaise valeur, changer valeur - // 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 + basic(220); + // On va derière les quilles + goTo(motor_.getX(),motor_.getY() - 150 ,M_PI); /// Mauvaise valeur, changer valeur + // On set la vitesse à 2 + int MaxLSpeedConf = motor_.getMaxLSpeed(); + motor_.setMaxSpeed(2, -1); + // On colle les quilles + basic (-250); // 260 - 10 de marge + // On retaure la vitesse + motor_.setMaxSpeed(MaxLSpeedConf, -1); + // On temporise.... + temporisation(200); // XXX Mauvaise valeur, changer valeur } /// Attend. void Ai::wait (int t) { + motor_.wait(t); + throw std::runtime_error("nan faut pas utiliser"); +} + +/// Fonction de temporisation +void Ai::temporisation(int t) +{ + int time = Timer::getRoundTime(); + time += t; + while (time > Timer::getRoundTime()) + { + update(); + } } // Attend le jack entré (false) ou sorti (true). @@ -112,25 +138,44 @@ void Ai::waitJack (bool out) /// Rejoint un point. (argument en mm) void Ai::goTo (double x, double y ,double a) { - while (motor_.getX() != x || motor_.getY() != y) + motor_.goTo(x,y,a); + do { - motor_.goTo(x,y,a); update(); - } + }while(!motor_.idle()); } /// Recale contre une bordure. // XXX Voir ca plus précisemment void Ai::recale (void) { + motor_.recalage(); + do + { + update(); + } + while(!motor_.idle()); + double angle = motor_.getA(); + if(angle > M_PI / 4 && angle < (3 * M_PI) / 4) // Si on point vers la droite + { + motor_.setPosition(motor_.getX(), -60, -M_PI / 2); + } + else if (angle < M_PI / 4 || angle > (7 * M_PI) / 4) // Si on pointe vers 0 + { + motor_.setPosition(60, motor_.getY(), 0); + } + else // On pointe vers y + { + motor_.setPosition(motor_.getX(), -2040, 0); + } } /// Mouvement basic. void Ai::basic (double d) { + motor_.linearMove(d); do { - motor_.linearMove(d); update(); // XXX Et si on se prend un mur????? } while (!motor_.idle()); @@ -139,30 +184,41 @@ void Ai::basic (double d) /// Rotation (argument en radian) void Ai::rotation (double a) { + motor_.rotation(a); do { - motor_.rotation(a); update(); - }while (!motor_.idle()); + }while (!motor_.idle()); // XXX Gérer le cas d'une rotation trop petite } /// Monte(vrai) ou descend(faux) l'ascenceur void Ai::ascenceur (bool monte) { - while(es_.getAscCurPos() != monte ? true : false) + if (monte) + es_.monterAsc(); + else + es_.descendreAsc(); + do { - //es_.moveAsc(monte); - // XXX On peut régler la vitesse de l'asc( config min max acc haut et bas entier unité ons'entape) update(); } + while(!es_.ascIsIdle()); } /// Désactive les ventouse void Ai::ventouses (void) /// XXX Temps à régler dans la config { es_.ventouses(); + update(); } -void Ai::update (void) +bool Ai::update (void) { + scheduler_.schedule(); + motor_.sync(); + es_.sync(); + // Gestion des cas critiques + /// XXX + + return true; } diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh index 187fdb6..e1f63ed 100644 --- a/2005/i/robert/src/ai/ai.hh +++ b/2005/i/robert/src/ai/ai.hh @@ -60,6 +60,8 @@ class Ai void run (void); /// Attend. void wait (int t); + /// Fonction de temporisation + void temporisation (int t); // Attend le jack entré (false) ou sorti (true). void waitJack (bool out); /// Rejoint un point. @@ -75,7 +77,7 @@ class Ai /// Désactive les ventouse void ventouses (void); /// Attend une mise à jour - void update (void); + bool update (void); }; #endif // ai_hh -- cgit v1.2.3