From 9994761107b21577732a4926bf1f2d847ed00913 Mon Sep 17 00:00:00 2001 From: dufourj Date: Fri, 6 May 2005 08:58:15 +0000 Subject: RC Config : correction d'un petit bug de config Ai : update qui sont "censé" fonctionner de manière à renvoyer l'état des buffer de proto suppression de log --- 2005/i/robert/src/ai/ai.cc | 134 ++++++++++++++++++++++++++-------------- 2005/i/robert/src/ai/ai.hh | 4 +- 2005/i/robert/src/ai/test_ai.cc | 24 ++++--- 2005/i/robert/src/es/es.cc | 2 +- 4 files changed, 107 insertions(+), 57 deletions(-) diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index 096f529..adce36a 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -69,7 +69,7 @@ void Ai::init(void) // on init la vision //oVision_.init(motor_.colorState() ? Group::redSkittle : // Group::greenSkittle); /// XXX - update(); + while (!update()); } /// stop le robot @@ -149,46 +149,90 @@ Ai::initBalNonFiable (void) protectQuillePont (); } +// Match de parcourt du fond du terrain +void +Ai::runProtectFond (void) +{ + // Lancement du placement pour les matchs + initMatch (); + // Protection des quilles devant le pont + parcourtFond (); +} // test void Ai::initTest (void) { + /*** Init du match ***/ init(); - std::cout << "Le jack est en attente" << std::endl; - waitJack(false); - std::cout << "Le jack est entré" << std::endl; // Reset la PWM à zéro si on a fait de la merde en le posant sur la table resetPwm (); - // Attend la première sortie du jack(init) - waitJack(true); - std::cout << "Le jack est sorti" << std::endl; + std::cout << "On tourne -> -PI/2" << std::endl; + rotation(-M_PI/2); + // On recule dans le mur + std::cout << "On se recale" << std::endl; + recale (); + motor_.setPosition(motor_.getX(), -60, -M_PI / 2); + // On avance vers la position de départ en y + std::cout << "On avance de 155mm" << std::endl; + basic (155); // 215 - 60 = 155 + // On rotate de 90 ° + std::cout << "On rotate -> 0" << std::endl; + rotation (0); + // On se recale vers x + std::cout << "On se recale" << std::endl; + recale(); + motor_.setPosition(60, motor_.getY(), 0); + std::cout << "On attend le jack" << std::endl; + // On lance le timer de début de match + std::cout << "Lancmeent du match" << std::endl; + Timer::startRound(); + /*** Fin de l'init du match ***/ + + parcourtFond (); - //début des tests - std::cout << "VItesse default" << std::endl; - basic(200); - basic(200); - - setMaxSpeed(8,-1); - std::cout << "VItesse à 8" << std::endl; - basic(-200); - std::cout << "Re 200" << std::endl; - basic(200); - std::cout << "Av 200" << std::endl; - - setMaxSpeed(4,-1); - std::cout << "VItesse à 4" << std::endl; - basic(-200); - std::cout << "Re 200" << std::endl; - basic(200); - std::cout << "Av 200" << std::endl; - - setMaxSpeed(2,-1); - std::cout << "VItesse à 2" << std::endl; - basic(-200); - std::cout << "Re 200" << std::endl; - basic(200); - std::cout << "Av 200" << std::endl; +} + +// Parcourt la ligne du fond, en aveugle pour relever des quilles et les poser derrière soit +void +Ai::parcourtFond (void) +{ + /*** Préplacement ***/ + std::cout << "Placement dans la ligne - goTo 170" << std::endl; + goTo (200, motor_.getY (), - M_PI / 2); + std::cout << "On avance de 30 cm" << std::endl; + basic (300); + /*** Fin du préplacement ***/ + + /*** Boucle de parcours de la ligne de fond ***/ + while (motor_.getY () > -1700) + { + std::cout << "On lève" << std::endl; + ascenceur (true); + std::cout << "Vitesse lente de rotation 2" << std::endl; + setMaxSpeed (-1, 2); + std::cout << "Tourne un peu" << std::endl; + rotation (M_PI); + std::cout << "Fini le tour" << std::endl; + rotation (M_PI / 2); + std::cout << "On attend" << std::endl; + temporisation (1000); + std::cout << "On lache" << std::endl; + ventouses (); + std::cout << "On attend" << std::endl; + temporisation (1500); + std::cout << "On restaure les vitesses" << std::endl; + setMaxSpeed (-1, 4); + std::cout << "On recule de 100" << std::endl; + basic (-100); + std::cout << "On descend" << std::endl; + ascenceur (false); + std::cout << "On se retourne" << std::endl; + rotation ( -M_PI / 2); + std::cout << "On avance de 100" << std::endl; + basic (200); + } + std::cout << "Fini" << std::endl; } @@ -246,7 +290,6 @@ Ai::protectQuillePont (void) /// Attend. void Ai::wait (int t) { - std::cout << "On attend le putain de Jack" << std::endl; motor_.wait(t); } @@ -343,7 +386,7 @@ void Ai::ascenceur (bool monte) void Ai::ventouses (void) /// XXX Temps à régler dans la config { es_.ventouses(); - update(); + while (!update()); } /// Attend une mise à jour @@ -352,19 +395,22 @@ bool Ai::update (void) scheduler_.schedule(500, true); // Gestion des cas critiques /// XXX - sync (); // On vérifie que le match n'est pas fini if (Timer::getRoundTime () > roundDuration_) throw std::runtime_error ("Fin de match, merci d'avoir participé !"); - return true; + return sync (); } /// Synchronise les données avec motor et es. -void +bool Ai::sync (void) { - motor_.sync(); - es_.sync(); + bool motor = motor_.sync(); + bool es = es_.sync(); + if (es && motor) + return true; + else + return false; } /// Reset la PWM à zéro. @@ -372,9 +418,7 @@ void Ai::resetPwm (void) { motor_.setPwm (0, 0); // synchronise - update(); - // XXX - update(); + while (!update()); } /// Initialise le robot pour faire un match (placement). @@ -417,17 +461,17 @@ void Ai::initMatch (void) waitJack(true); std::cout << "Le jack est sortie" << std::endl; // On lance le timer de début de match - std::cout << "Lancmeent du match" << std::endl; + std::cout << "Lancement du match" << std::endl; Timer::startRound(); // On temporise pour laisser Taz sortir std::cout << "Attente du 15 secondes" << std::endl; - //temporisation(15000); + temporisation(15000); } void Ai::setMaxSpeed (int l, int r) { motor_.setMaxSpeed (l, r); - update (); + while (!update ()); } diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh index f39993a..969bc16 100644 --- a/2005/i/robert/src/ai/ai.hh +++ b/2005/i/robert/src/ai/ai.hh @@ -80,7 +80,7 @@ class Ai /// Attend une mise à jour bool update (void); /// Synchronise les données avec motor et es. - void sync (void); + bool sync (void); /// Reset la PWM à zéro. void resetPwm (void); /// Initialise le robot pour faire un match (placement). @@ -94,6 +94,8 @@ class Ai // test void initTest (void); void setMaxSpeed (int l, int r); + void runProtectFond (void); + void parcourtFond (void); }; #endif // ai_hh diff --git a/2005/i/robert/src/ai/test_ai.cc b/2005/i/robert/src/ai/test_ai.cc index da34917..2b7bbbb 100644 --- a/2005/i/robert/src/ai/test_ai.cc +++ b/2005/i/robert/src/ai/test_ai.cc @@ -74,21 +74,25 @@ main (int argc, char **argv) // Gestion des différents cas/types de robot if (++i > argc) throw std::runtime_error ("syntax error"); - if (argv[i][0] == '0') - { + switch (argv[i][0]) + { + case '0': // Pour un robot qui n'est pas fiable en // asservissement ai_.initBalNonFiable(); - // XXX Différents types d'ai - } - if (argv[i][0] == '1') - { + break; + case '1': ai_.initBalFiable (); - } - if (argv[i][0] == '2') - { + break; + case '2': ai_.initTest (); - } + break; + case '3': + ai_.runProtectFond (); + break; + default: + throw std::runtime_error ("Param inconnue"); + } break; case 'j': if(++i > argc) diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index 7bcd26c..d1e8e76 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -138,7 +138,7 @@ void Es::receive(char command, const Proto::Frame & frame) break; case 'C': // retour télémètre proto_.decode(frame,"ww", distGauche_, distDroite_); - //log_("Télémètre") << "Valeur gauche" << distGauche_ << "Valeur Droite" << distDroite_; +// log_("Télémètre") << "Valeur gauche" << distGauche_ << "Valeur Droite" << distDroite_; break; } -- cgit v1.2.3