summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-05-04 20:21:52 +0000
committerhaller2005-05-04 20:21:52 +0000
commit7c4f39a4f958177b6a9f6b718055dd2dfe688e98 (patch)
treee2214126df9080497dbfefd69439b3644575a468
parentfed8c706760121f034e4d9e00173c8c624d350cd (diff)
Codage en profondeur des fonctions
Début de l'automate
-rw-r--r--2005/i/robert/src/ai/ai.cc104
-rw-r--r--2005/i/robert/src/ai/ai.hh4
2 files changed, 83 insertions, 25 deletions
diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc
index 12e8f88..8762475 100644
--- a/2005/i/robert/src/ai/ai.cc
+++ b/2005/i/robert/src/ai/ai.cc
@@ -54,7 +54,7 @@ void Ai::init(void)
es_.init();
// on init la vision
oVision_.init(motor_.colorState() ? Group::redSkittle :
- Group::greenSkittle);
+ Group::greenSkittle); /// XXX
}
/// stop le robot
@@ -73,33 +73,59 @@ void Ai::run(void)
waitJack(true);
//Initialise le robot
init();
+ // On recule dans le mur
+ recale ();
+ // On avance vers la position de départ en y
+ basic (155); // 215 - 60 = 155
+ // On rotate de 90 °
+ rotation (0);
+ // On se recale vers x
+ recale();
// Attend le jack "pret à partir"
waitJack(false);
// Attend la seconde sortie du jack(Daniel)
waitJack(true);
// on lance le temps
Timer::startRound();
+ // On temporise pour laisser Taz sortir
+ temporisation(500);
+ // On avance pour pouvoir aller vers la boule parallèlement au socle
+ basic(540); // 600 - 60
// Aller devant la boule
- goTo(10, 10, 0); // XXX Mauvaise valeur, changer valeur
+ goTo(1200, -975, M_PI);
// Taper la boule
- basic(1245665486); // XXX Mauvaise valeur, changer valeur
+ basic(-220);
// se placer devant nos quilles près du pont
- basic(5568786); // XXX Mauvaise valeur, changer valeur
- rotation(-M_PI / 2);
- goTo(4546,42424242, M_PI); // XXX Mauvaise valeur, changer valeur
- basic(56465456); // XXX Mauvaise valeur, changer valeur
- // 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
+ basic(220);
+ // On va derière les quilles
+ goTo(motor_.getX(),motor_.getY() - 150 ,M_PI); /// Mauvaise valeur, changer valeur
+ // On set la vitesse à 2
+ int MaxLSpeedConf = motor_.getMaxLSpeed();
+ motor_.setMaxSpeed(2, -1);
+ // On colle les quilles
+ basic (-250); // 260 - 10 de marge
+ // On retaure la vitesse
+ motor_.setMaxSpeed(MaxLSpeedConf, -1);
+ // On temporise....
+ temporisation(200); // XXX Mauvaise valeur, changer valeur
}
/// Attend.
void Ai::wait (int t)
{
+ motor_.wait(t);
+ throw std::runtime_error("nan faut pas utiliser");
+}
+
+/// Fonction de temporisation
+void Ai::temporisation(int t)
+{
+ int time = Timer::getRoundTime();
+ time += t;
+ while (time > Timer::getRoundTime())
+ {
+ update();
+ }
}
// Attend le jack entré (false) ou sorti (true).
@@ -112,25 +138,44 @@ void Ai::waitJack (bool out)
/// Rejoint un point. (argument en mm)
void Ai::goTo (double x, double y ,double a)
{
- while (motor_.getX() != x || motor_.getY() != y)
+ motor_.goTo(x,y,a);
+ do
{
- motor_.goTo(x,y,a);
update();
- }
+ }while(!motor_.idle());
}
/// Recale contre une bordure.
// XXX Voir ca plus précisemment
void Ai::recale (void)
{
+ motor_.recalage();
+ do
+ {
+ 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.
void Ai::basic (double d)
{
+ motor_.linearMove(d);
do
{
- motor_.linearMove(d);
update(); // XXX Et si on se prend un mur?????
}
while (!motor_.idle());
@@ -139,30 +184,41 @@ void Ai::basic (double d)
/// Rotation (argument en radian)
void Ai::rotation (double a)
{
+ motor_.rotation(a);
do
{
- motor_.rotation(a);
update();
- }while (!motor_.idle());
+ }while (!motor_.idle()); // XXX Gérer le cas d'une rotation trop petite
}
/// Monte(vrai) ou descend(faux) l'ascenceur
void Ai::ascenceur (bool monte)
{
- while(es_.getAscCurPos() != monte ? true : false)
+ if (monte)
+ es_.monterAsc();
+ else
+ es_.descendreAsc();
+ do
{
- //es_.moveAsc(monte);
- // XXX On peut régler la vitesse de l'asc( config min max acc haut et bas entier unité ons'entape)
update();
}
+ while(!es_.ascIsIdle());
}
/// Désactive les ventouse
void Ai::ventouses (void) /// XXX Temps à régler dans la config
{
es_.ventouses();
+ update();
}
-void Ai::update (void)
+bool Ai::update (void)
{
+ scheduler_.schedule();
+ motor_.sync();
+ es_.sync();
+ // Gestion des cas critiques
+ /// XXX
+
+ return true;
}
diff --git a/2005/i/robert/src/ai/ai.hh b/2005/i/robert/src/ai/ai.hh
index 187fdb6..e1f63ed 100644
--- a/2005/i/robert/src/ai/ai.hh
+++ b/2005/i/robert/src/ai/ai.hh
@@ -60,6 +60,8 @@ class Ai
void run (void);
/// Attend.
void wait (int t);
+ /// Fonction de temporisation
+ void temporisation (int t);
// Attend le jack entré (false) ou sorti (true).
void waitJack (bool out);
/// Rejoint un point.
@@ -75,7 +77,7 @@ class Ai
/// Désactive les ventouse
void ventouses (void);
/// Attend une mise à jour
- void update (void);
+ bool update (void);
};
#endif // ai_hh