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.cc134
-rw-r--r--2005/i/robert/src/ai/ai.hh4
-rw-r--r--2005/i/robert/src/ai/test_ai.cc24
-rw-r--r--2005/i/robert/src/es/es.cc2
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;
}