summaryrefslogtreecommitdiff
path: root/2005/i/robert/src
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src')
-rw-r--r--2005/i/robert/src/ai/ai.cc67
1 files changed, 47 insertions, 20 deletions
diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc
index 958aa78..cef6279 100644
--- a/2005/i/robert/src/ai/ai.cc
+++ b/2005/i/robert/src/ai/ai.cc
@@ -432,26 +432,33 @@ Ai::parcourtFond (void)
// On scan tout autour du robot
void Ai::scanVision (bool followLine) /// XXX mettre un argument
{
+ 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++)
- {
+ {
+ std::cout << "On prend la photo" << std::endl;
// On prend la photo
oVision_.takeShoot();
+ std::cout << "On update ovision" << std::endl;
// On analyse la photo
oVision_.update();
+ std::cout << "On sauvegarde la lsite de quilles" << std::endl;
// On mets la liste brute dans le vector
skittles.push_back(oVision_.getSkittles());
// on tournicote
- motor_.rotation(angleDepart + ((i + 1) * M_PI/4));
- }
+ if (!followLine)
+ motor_.rotation(angleDepart + ((i + 1) * M_PI/4));
+ }
analyseSkittles(skittles);
+ remonteWithCam ();
}
// XXX Aucun moyen de tourner pour l'instant (donc followLine only)
// On analyse les quilles pour ne garder que les prétendants
void Ai::analyseSkittles(std::vector<std::vector<Zone> > skittlesBrut)
{
+ std::cout << "AnalyseSkittles" << std::endl;
goodSkittles_.clear();
// On regarde pour tout les angles
for(std::vector<std::vector<Zone> >::iterator it = skittlesBrut.begin();
@@ -464,10 +471,11 @@ void Ai::analyseSkittles(std::vector<std::vector<Zone> > skittlesBrut)
continue;
if (it2->vertical)
continue;
- if (it2->partial)
+ 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);
}
}
@@ -478,22 +486,41 @@ void Ai::analyseSkittles(std::vector<std::vector<Zone> > skittlesBrut)
void Ai::remonteWithCam(void)
{
int x, y , angle, dist;
- Zone zeSkittles = goodSkittles_.back();
- oVision_.getLoc(zeSkittles, x, y, angle, dist);
- dist -= 9;
- rotation(motor_.getA() + angle);
- setMaxSpeed(2,1);
- basic(dist);
- ascenceur(true);
- basic (-dist - 5);
- rotation(M_PI);
- rotation(M_PI / 2);
- basic(30); // XXX vérifier valeur
- ventouses();
- setMaxSpeed(8, 4);
- basic(-30); // XXX Vérifier valeur
- ascenceur(false);
- rotation(3 * M_PI / 4);
+ std::cout << "remonteWithCam" << std::endl;
+ if (goodSkittles_.size () > 0)
+ {
+ // On récupère la quille
+ std::cout << "On récupère la quille" << std::endl;
+ Zone zeSkittles = goodSkittles_.back();
+ // On récupère sa position
+ 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 << "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);
+ }
}
// Va du point de départ au pont pour protéger les quilles.