From a8e25e107bfd486b945f656d5358b63259799909 Mon Sep 17 00:00:00 2001 From: dufourj Date: Wed, 11 Jan 2006 16:22:49 +0000 Subject: Correction des syncs --- 2005/i/robert/src/ai/ai.cc | 136 +++++++++++++++++++++++++++------------------ 1 file changed, 83 insertions(+), 53 deletions(-) (limited to '2005/i/robert/src/ai/ai.cc') diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index 25445e8..341f260 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -96,12 +96,6 @@ void Ai::stop(void) } while (!motor_.idle ()); } -/// Attend des données. -void Ai::wait (int t) -{ - motor_.wait(t); -} - /// Fonction de temporisation void Ai::temporisation(int t) { @@ -203,7 +197,7 @@ void Ai::ventouses (void) /// Attend une mise à jour bool Ai::update (void) { - scheduler_.schedule(500, true); + scheduler_.schedule(100, true); bool retour = sync (); // On vérifie que le match n'est pas fini if (Timer::getRoundTime () > roundDuration_) @@ -215,12 +209,7 @@ bool Ai::update (void) bool Ai::sync (void) { - bool motor = motor_.sync(); - bool es = es_.sync(); - if (es && motor) - return true; - else - return false; + return es_.sync () && motor_.sync (); } /// Reset la PWM à zéro. @@ -292,12 +281,33 @@ Ai::runProtectFond (void) void Ai::runVisionLine(void) { - initTest(); + initTest (); + int i = 1; + bool sensHorraire = true; do { - scanVision(true); - basic(100); - }while(motor_.getY() < 1700); + // On recherche une quille et on y va si besoin + scanVision (true); + std::cout << "Petite pause d'1 seconde" << std::endl; + temporisation (1000); + // On continue à tourner + rotation (((2. * M_PI) / 8.) * i); + if (sensHorraire) + i++; + else + i--; + if (i == 9) + { + sensHorraire = !sensHorraire; + i -= 2; + } + if (i == -1) + { + sensHorraire = !sensHorraire; + i += 2; + } + } + while (true); } // Pour les Tests. void @@ -317,7 +327,6 @@ Ai::runTest (void) //stop (); // On restaure la vitesse temporisation (400); - init (); std::cout << "On restaure la vitesse à 8" << std::endl; setAccel (96); setMaxSpeed (8, -1); @@ -384,7 +393,7 @@ void Ai::initMatch (void) temporisation(tempoDebutMatch_); }/*}}}*/ -// Parcourt la ligne du fond, en aveugle pour relever des quilles et les poser derrière soit +// Parcourt la ligne du fond, en aveugle pour relever des quilles et les poser derrière soit/*{{{*/ void Ai::parcourtFond (void) { @@ -430,17 +439,27 @@ Ai::parcourtFond (void) } std::cout << "Fini : " << Timer::getRoundTime () << std::endl; } - +/*}}}*/ // *** Fonctions de vision *** // On scan tout autour du robot void Ai::scanVision (bool followLine) /// XXX mettre un argument { + // XXX Cet algo n'est pas bon : c'est trop compliqué de retenir la + // position des quilles. + // Il faut prendre des photos jusquà qu'on trouve une quille. + // La liste doit être purgé à chaque déplacement car elle ne fonctionne + // qu'en position relative, à moins d'arriver à les stoquer en position + // absolue. + // Il serai interessant de stoquer la position (x, y, et orientation) et + // de maintenir cette liste et de virer les quilles que l'on a relever. + // XXX std::cout << "On commence le scannage de quiles" << std::endl; double angleDepart = motor_.getA(); std::vector > skittles; for (int i = 0; i < (followLine ? 1 : 4) ; i++) { + temporisation (1000); std::cout << "On prend la photo" << std::endl; // On prend la photo oVision_.takeShoot(); @@ -471,14 +490,16 @@ void Ai::analyseSkittles(std::vector > skittlesBrut) // On regarde zone par zone for(std::vector::iterator it2 = it->begin(); it2 != it->end(); it2++) { - if (!it2->alone) - continue; - if (it2->vertical) - continue; - if (it2->partial) // XXX to manage - continue; - if (it2->small) - continue; + std::cout << "On regarde si on a une quille qui a les bonnes " + "propriétés" << std::endl; +// if (!it2->alone) +// continue; +// if (it2->vertical) +// continue; +// if (it2->partial) // XXX to manage +// continue; +// if (it2->small) +// continue; std::cout << "On a une quille une gagnante !" << std::endl; goodSkittles_.push_back(*it2); } @@ -489,7 +510,8 @@ void Ai::analyseSkittles(std::vector > skittlesBrut) // On remonte la ze quille la meilleur détecté par la cam void Ai::remonteWithCam(void) { - int x, y , angle, dist; + int x, y , dist; + double angle; std::cout << "remonteWithCam" << std::endl; if (goodSkittles_.size () > 0) { @@ -500,30 +522,38 @@ void Ai::remonteWithCam(void) oVision_.getLoc(zeSkittles, x, y, angle, dist); std::cout << "x : " << x << ", y : " << y << ", a : " << angle << ", d : " << dist << "." << std::endl; - // On enlève la partie avant du robot du au calibrage - dist -= 90; - // On pivote de l'angle demandée - // XXX position relative par rapport à la prise de photo - std::cout << "Rotation" << std::endl; - rotation(motor_.getA() + angle); - std::cout << "Pas Max speed" << std::endl; -// setMaxSpeed(2,1); - std::cout << "basic dist/d" << std::endl; - basic(dist); - std::cout << "Ascenceur +" << std::endl; - ascenceur(true); -// basic (-dist - 5); -// rotation(M_PI); -// rotation(M_PI / 2); -// basic(30); // XXX vérifier valeur - ventouses(); - std::cout << "Max speed" << std::endl; - setMaxSpeed(8, 4); - std::cout << "basic - 30" << std::endl; - basic(-30); // XXX Vérifier valeur - std::cout << "Ascenceur -" << std::endl; - ascenceur(false); -// rotation(3 * M_PI / 4); + if (dist < 600) + { + // On enlève la partie avant du robot du au calibrage + // dist -= 90; + // On pivote de l'angle demandée + // XXX position relative par rapport à la prise de photo + std::cout << "Rotation" << std::endl; + rotation(motor_.getA() + angle); +// std::cout << "Max speed 2, -1" << std::endl; +// setMaxSpeed(3, -1); + std::cout << "basic dist" << std::endl; + basic(dist); + std::cout << "Ascenceur up" << std::endl; + ascenceur(true); + // basic (-dist - 5); + // rotation(M_PI); + // rotation(M_PI / 2); + // basic(30); // XXX vérifier valeur + std::cout << "On temporise de 1500 ms" << std::endl; + temporisation (1500); + std::cout << "On relache les ventouses" << std::endl; + ventouses(); + std::cout << "On temporise de 500 ms" << std::endl; + temporisation (1000); +// std::cout << "Max speed 4, -1" << std::endl; +// setMaxSpeed(4, -1); + std::cout << "On recule de la distance parcouru" << std::endl; + basic(-dist); // XXX Vérifier valeur + std::cout << "Ascenceur down" << std::endl; + ascenceur(false); + } + // XXX Here, we should check if the skittle is up or not } } -- cgit v1.2.3