summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/ai
diff options
context:
space:
mode:
authorhaller2005-04-23 22:33:57 +0000
committerhaller2005-04-23 22:33:57 +0000
commitc2dd6a00399552d0bb39955cba0e6d70f54b6f9c (patch)
treefcf2fc38ef8d2b8569a2478f49c1dc691810c7b9 /2005/i/robert/src/ai
parent4f4b8796d95cdd5e3ba406fe6a08123d17c2a0f5 (diff)
Définition des fonctions
Ebauche pour Ai::run
Diffstat (limited to '2005/i/robert/src/ai')
-rw-r--r--2005/i/robert/src/ai/Makefile.defs2
-rw-r--r--2005/i/robert/src/ai/ai.cc73
-rw-r--r--2005/i/robert/src/ai/ai.hh15
3 files changed, 64 insertions, 26 deletions
diff --git a/2005/i/robert/src/ai/Makefile.defs b/2005/i/robert/src/ai/Makefile.defs
index 4855ca6..f150cac 100644
--- a/2005/i/robert/src/ai/Makefile.defs
+++ b/2005/i/robert/src/ai/Makefile.defs
@@ -2,6 +2,6 @@ PROGRAMS += test_ai
ai_OBJECTS = ai.o
-test_ai_OBJECTS = test_ai.o $(ai_OBJECTS)
+test_ai_OBJECTS = test_ai.o $(ai_OBJECTS) $(motor_OBJECTS)
test_ai: $(test_ai_OBJECTS)
diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc
index 599efc1..2fbe9cb 100644
--- a/2005/i/robert/src/ai/ai.cc
+++ b/2005/i/robert/src/ai/ai.cc
@@ -23,56 +23,87 @@
//
// }}}
+#include"ai.hh"
+
/// Constructeur
Ai::Ai(const Config & config)
- :motor(config), roundDuration(config.get("ai.roundDuration")),
- enMouvement(false)
+ :motor_(config), es_(config),
+ roundDuration_(config.get<int>("ai.roundDuration")),
+ vitesseAsc_(config.set<int>("ai.vitesseAsc"))
{
+ /// XXX comment on lance le robot? apelle dans main??
}
/// Initialise le robot
-void init(void)
+void Ai::init(void)
{
// Initialise les moteurs
motor_.init();
// initialise la carte es
es_.init();
- // XXX peut-il faire des actions??
+ // XXX Faut-il initialiser la vision
}
/// stop le robot
-void stop(void)
+void Ai::stop(void)
{
// Stop les moteurs
motor_.stop();
}
/// Lance le robot
-void run(void)
+void Ai::run(void)
{
- // XXX Effectue plein d'actions plus ou moins conne
-
+ // Attend l'entrée du jack "pret à initialiser"
+ waitJack(false);
+ // Attend la première sortie du jack(init)
+ waitJack(true);
+ //Initialise le robot
+ init();
+ // Attend le jack "pret à partir"
+ waitJack(false);
+ // Attend la seconde sortie du jack(Daniel)
+ waitJack(true);
+ // XXX on lance le temps
+ Timer::get_time();
+ // Aller devant la boule
+ goTo(x, y, 0); // XXX l'angle 0 ca pointe ou??
+ // Taper la boule
+ basic(d);
+ // se placer devant nos quilles près du pont
+ basic(-d);
+ rotation(-M_PI / 2);
+ goTo(x,y, M_PI);
+ basic(-d);
+ // Après attendre... XXX Ou voir un truc qui bouge
+ // Un truc
+ // Detecter les quilles tombées (voir si se déplacer proches du rb adverses serait utiles)
+ // Y Aller
+ // remonter les quilles (voir si sharp sur ventouses serait utiles)
+ // reculer
+ // redetecter le tout
}
// Attend le jack entré (false) ou sorti (true).
-void waitJack (bool out)
+void Ai::waitJack (bool out)
{
while (es_.stateJack() != out)
- update();
+ update(); // XXX Le timeout, générale statique ou argument de update
+ /// on verra
}
/// Rejoint un point. (argument en mm)
-void goTo (double x, double y) // XXX Y'a une vitesse par defaut??
+void Ai::goTo (double x, double y) // XXX Y'a une vitesse par defaut?? non
{
while (motor_.getX() != x || motor_.getY() != y)
{
- motor_.goTo(x,y);
+ motor_.goTo(x,y); /// XXX On peut pas mettre un arg pour a? oui c'est cool et surcharger
update();
}
}
/// Recale contre une bordure.
-void recale (void)
+void Ai::recale (void)
{
while(!es_.capteursContact())
{
@@ -82,39 +113,41 @@ void recale (void)
}
/// Mouvement basic. XXX c'est quoi les arguments là??
-void basic (double v, double d)
+void Ai::basic (double v, double d)
{
- motor.setSpeed(v);
+ motor_.setSpeed(v); // XXX Vitesse par defaut à restorer?
+ // XXX A chercher dans config??
do
{
motor_.linearMove(d);
update(); // XXX Et si on se prend un mur?????
}
- while (!motor_.waiting());
+ while (!motor_.idle());
}
/// Rotation (argument en radian)
-void rotation (double a)
+void Ai::rotation (double a)
{
do
{
motor_.rotation(a);
update();
- }while (!motor_.waiting());
+ }while (!motor_.idle());
}
/// Monte(vrai) ou descend(faux) l'ascenceur
-void ascenceur (bool monte)
+void Ai::ascenceur (bool monte)
{
while(es_.stateAsc() != monte ? true : false)
{
es_.moveAsc(monte); // XXX bon le nom de la fonction est à chier on est d'accord
+ // XXX On peut régler la vitesse de l'asc( config)
update();
}
}
/// Désactive les ventouse
-void ventouses (void)
+void Ai::ventouses (void)
{
es_.ventouses();
while(!es_.stateVentouses()) // XXX Ca, ca doit servir à rien
diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh
index b86412e..8261097 100644
--- a/2005/i/robert/src/ai/ai.hh
+++ b/2005/i/robert/src/ai/ai.hh
@@ -25,6 +25,11 @@
//
// }}}
+#include "motor/motor.hh"
+#include "es/es.hh"
+#include "scheduler/scheduler.hh"
+#include "config/config.hh"
+
/// Intelligence (encore plus heu...) artificielle
class Ai
{
@@ -33,12 +38,10 @@ class Ai
Motor motor_;
Es es_;
// Scheduler du robot
- Scheduler scheduler_;
- // Gpio gpio_; // XXX
+ scheduler::Scheduler scheduler_;
// Paramètre de Ai
const int roundDuration_;
- // Etat du robot
- bool enMouvement;
+ const int vitesseAsc_;
public:
/// Constructeur
@@ -48,7 +51,7 @@ class Ai
/// Arrète le robot.
void stop (void);
/// Lance le robot.
- void run (int strat);
+ void run (void);
protected:
/// Lance le robot.
void run0 (void);
@@ -69,6 +72,8 @@ class Ai
void ascenceur (bool monte);
/// Désactive les ventouse
void ventouses (void);
+ /// Attend une mise à jour
+ void update (void);
};
#endif // ai_hh