summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ai
diff options
context:
space:
mode:
authorhaller2005-05-05 11:16:39 +0000
committerhaller2005-05-05 11:16:39 +0000
commit2fd79d3f76e6364e3d69ef8ebf3453bf33605987 (patch)
tree9f0a2330c07378674cb56f800546dd93e7058ffd /2005/i/robert/src/ai
parent6a66a0cdc3910914b042c287866e6c3de4cb6d33 (diff)
Codage du programme d'homologuation
Mise en place de l'arret en fin de match
Diffstat (limited to '2005/i/robert/src/ai')
-rw-r--r--2005/i/robert/src/ai/ai.cc110
-rw-r--r--2005/i/robert/src/ai/ai.hh4
-rw-r--r--2005/i/robert/src/ai/test_ai.cc9
3 files changed, 88 insertions, 35 deletions
diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc
index 8762475..c184f95 100644
--- a/2005/i/robert/src/ai/ai.cc
+++ b/2005/i/robert/src/ai/ai.cc
@@ -23,6 +23,8 @@
//
// }}}
+#include <iostream>
+
#include "ai.hh"
#include "config/config.hh"
#include "timer/timer.hh"
@@ -41,10 +43,20 @@ Ai::Ai(const Config & config)
roundDuration_(config.get<int>("ai.roundDuration")),
vitesseAsc_(config.get<int>("ai.vitesseAsc"))
{
+ //instance = this
scheduler_.insert (schedulableMotor_);
scheduler_.insert (schedulableEs_);
}
+Ai::~Ai (void)
+{
+ init ();
+ do {
+ update ();
+ }
+ while (motor_.sync ());
+}
+
/// Initialise le robot
void Ai::init(void)
{
@@ -53,8 +65,9 @@ void Ai::init(void)
// initialise la carte es
es_.init();
// on init la vision
- oVision_.init(motor_.colorState() ? Group::redSkittle :
- Group::greenSkittle); /// XXX
+ //oVision_.init(motor_.colorState() ? Group::redSkittle :
+// Group::greenSkittle); /// XXX
+ update();
}
/// stop le robot
@@ -67,54 +80,85 @@ void Ai::stop(void)
/// Lance le robot
void Ai::run(void)
{
+ //Initialise le robot
+ std::cout << "On init le robot" << std::endl;
+ init();
// Attend l'entrée du jack "pret à initialiser"
+ std::cout << "On attend le jack" << std::endl;
waitJack(false);
+ std::cout << "Le jack est mis" << std::endl;
// Attend la première sortie du jack(init)
waitJack(true);
- //Initialise le robot
- init();
+ std::cout << "Le jack est sorti" << std::endl;
+ //On fait une rotation pour recaler y
+ 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;
// Attend le jack "pret à partir"
waitJack(false);
+ std::cout << "Le jack est mis" << std::endl;
// Attend la seconde sortie du jack(Daniel)
waitJack(true);
+ std::cout << "Le jack est sortie" << std::endl;
// on lance le temps
+ std::cout << "Lancmeent du match" << std::endl;
Timer::startRound();
// On temporise pour laisser Taz sortir
- temporisation(500);
+ std::cout << "Attente du 15 secondes" << std::endl;
+ temporisation(15000); ///XXX
// On avance pour pouvoir aller vers la boule parallèlement au socle
+ std::cout << "On avance de 540mm" << std::endl;
basic(540); // 600 - 60
// Aller devant la boule
- goTo(1200, -975, M_PI);
+ std::cout << "GoTo 870,-675 -> Pi" << std::endl;
+ goTo(870, -675, M_PI);
+ // On change l'accélération
+ motor_.setAccel(32);
// Taper la boule
- basic(-220);
+ std::cout << "Recule de 410mm" << std::endl;
+ basic(-410);
+ // On restaure la valeur de l'acceleration
+ motor_.setAccel(64);
// se placer devant nos quilles près du pont
- basic(220);
+ std::cout << "Avance de 410mm" << std::endl;
+ basic(410);
// On va derière les quilles
- goTo(motor_.getX(),motor_.getY() - 150 ,M_PI); /// Mauvaise valeur, changer valeur
- // On set la vitesse à 2
+ std::cout << "GoTo" << std::endl;
+ goTo(motor_.getX(),motor_.getY() - 150 ,M_PI);
+/* // On set la vitesse à 2
int MaxLSpeedConf = motor_.getMaxLSpeed();
+ std::cout << "Reduction vitesse" << std::endl;
motor_.setMaxSpeed(2, -1);
// On colle les quilles
- basic (-250); // 260 - 10 de marge
+ std::cout << "Recule de 400mm" << std::endl;
+ basic (-400); // 260 - 10 de marge
// On retaure la vitesse
+ std::cout << "Acceleration vitesse" << std::endl;
motor_.setMaxSpeed(MaxLSpeedConf, -1);
- // On temporise....
- temporisation(200); // XXX Mauvaise valeur, changer valeur
+ // XXX On temporise et on fait mumuse avec l'ascenceur */
+ // On a fini notre run
+ std::cout << "On a fini" << std::endl;
}
/// Attend.
void Ai::wait (int t)
{
+ std::cout << "On attend le putain de Jack" << std::endl;
motor_.wait(t);
- throw std::runtime_error("nan faut pas utiliser");
}
/// Fonction de temporisation
@@ -131,8 +175,11 @@ void Ai::temporisation(int t)
// Attend le jack entré (false) ou sorti (true).
void Ai::waitJack (bool out)
{
- while (motor_.jackState() != out)
+ do
+ {
update();
+ }
+ while (motor_.jackState() != out);
}
/// Rejoint un point. (argument en mm)
@@ -155,19 +202,6 @@ void Ai::recale (void)
update();
}
while(!motor_.idle());
- double angle = motor_.getA();
- if(angle > M_PI / 4 && angle < (3 * M_PI) / 4) // Si on point vers la droite
- {
- motor_.setPosition(motor_.getX(), -60, -M_PI / 2);
- }
- else if (angle < M_PI / 4 || angle > (7 * M_PI) / 4) // Si on pointe vers 0
- {
- motor_.setPosition(60, motor_.getY(), 0);
- }
- else // On pointe vers y
- {
- motor_.setPosition(motor_.getX(), -2040, 0);
- }
}
/// Mouvement basic.
@@ -176,7 +210,7 @@ void Ai::basic (double d)
motor_.linearMove(d);
do
{
- update(); // XXX Et si on se prend un mur?????
+ update();
}
while (!motor_.idle());
}
@@ -184,6 +218,8 @@ void Ai::basic (double d)
/// Rotation (argument en radian)
void Ai::rotation (double a)
{
+ // On vérifie que ca ne fasse pas moins de trois degré
+ // XXX
motor_.rotation(a);
do
{
@@ -214,11 +250,19 @@ void Ai::ventouses (void) /// XXX Temps à régler dans la config
bool Ai::update (void)
{
- scheduler_.schedule();
- motor_.sync();
- es_.sync();
+ 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;
}
+
+void
+Ai::sync (void)
+{
+ motor_.sync();
+ es_.sync();
+}
diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh
index e1f63ed..4de1e5d 100644
--- a/2005/i/robert/src/ai/ai.hh
+++ b/2005/i/robert/src/ai/ai.hh
@@ -40,7 +40,7 @@ class Ai
// Modules de controle du robot
Motor motor_;
Es es_;
- OVision oVision_;
+ //OVision oVision_;
// Scheduler du robot
scheduler::Scheduler scheduler_;
scheduler::SchedulableReadFd schedulableMotor_;
@@ -52,6 +52,7 @@ class Ai
public:
/// Constructeur
Ai(const Config & config);
+ ~Ai (void);
// Initialise le robot.
void init (void);
/// Arrète le robot.
@@ -78,6 +79,7 @@ class Ai
void ventouses (void);
/// Attend une mise à jour
bool update (void);
+ void sync (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 c71c09b..0d0aae8 100644
--- a/2005/i/robert/src/ai/test_ai.cc
+++ b/2005/i/robert/src/ai/test_ai.cc
@@ -76,7 +76,7 @@ main (int argc, char **argv)
case 'j':
if(++i > argc)
throw std::runtime_error("syntax error");
- if(argv[i][0] == 0)
+ if(argv[i][0] == '0')
{
std::cout << "Attente de l'entrée de Jack" << std::endl;
ai_.waitJack(false);
@@ -130,7 +130,13 @@ main (int argc, char **argv)
case 'U':
ai_.update();
break;
+ case 'z':
+ ai_.init();
+ break;
+ default:
+ throw std::runtime_error ("Error de syntaxe");
}
+ ai_.update ();
break;
}
case 'w':
@@ -144,6 +150,7 @@ main (int argc, char **argv)
{
ai_.wait (stop - t);
t = Timer::getProgramTime ();
+ ai_.update();
}
break;
}