summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ai/ai.cc
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/ai/ai.cc')
-rw-r--r--2005/i/robert/src/ai/ai.cc136
1 files changed, 83 insertions, 53 deletions
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<std::vector<Zone> > 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<std::vector<Zone> > skittlesBrut)
// On regarde zone par zone
for(std::vector<Zone>::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<std::vector<Zone> > 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
}
}