From 9b4d2709fc7ebd2285e5f5d0cb98d72e8d6e2d03 Mon Sep 17 00:00:00 2001 From: haller Date: Wed, 27 Apr 2005 21:42:37 +0000 Subject: Modification de deux trois choses Y'a encore du boulot --- 2005/i/robert/src/ai/ai.cc | 33 ++++++++++++++++----------------- 2005/i/robert/src/ai/ai.hh | 1 + 2005/i/robert/src/asserv/asserv.hh | 2 +- 2005/i/robert/src/es/es.cc | 29 +++++++++++++++++++++-------- 2005/i/robert/src/es/es.hh | 17 ++++++++++++----- 2005/i/robert/src/motor/motor.cc | 32 +++++++++----------------------- 2005/i/robert/src/motor/motor.hh | 3 +++ 7 files changed, 63 insertions(+), 54 deletions(-) (limited to '2005/i/robert') diff --git a/2005/i/robert/src/ai/ai.cc b/2005/i/robert/src/ai/ai.cc index 2fbe9cb..7331d8c 100644 --- a/2005/i/robert/src/ai/ai.cc +++ b/2005/i/robert/src/ai/ai.cc @@ -31,7 +31,6 @@ Ai::Ai(const Config & config) roundDuration_(config.get("ai.roundDuration")), vitesseAsc_(config.set("ai.vitesseAsc")) { - /// XXX comment on lance le robot? apelle dans main?? } /// Initialise le robot @@ -41,7 +40,9 @@ void Ai::init(void) motor_.init(); // initialise la carte es es_.init(); - // XXX Faut-il initialiser la vision + // on init la vision + ovision_.init(es_.getColor() ? Group::ZoneType::RedSkittle : + Group::ZoneType::GreenColor); } /// stop le robot @@ -64,10 +65,10 @@ void Ai::run(void) waitJack(false); // Attend la seconde sortie du jack(Daniel) waitJack(true); - // XXX on lance le temps - Timer::get_time(); + // on lance le temps + Timer::start_round(); // Aller devant la boule - goTo(x, y, 0); // XXX l'angle 0 ca pointe ou?? + goTo(x, y, 0); // Taper la boule basic(d); // se placer devant nos quilles près du pont @@ -88,35 +89,33 @@ void Ai::run(void) void Ai::waitJack (bool out) { while (es_.stateJack() != out) - update(); // XXX Le timeout, générale statique ou argument de update - /// on verra + update(); } /// Rejoint un point. (argument en mm) -void Ai::goTo (double x, double y) // XXX Y'a une vitesse par defaut?? non +void Ai::goTo (double x, double y ,double a) { while (motor_.getX() != x || motor_.getY() != y) { - motor_.goTo(x,y); /// XXX On peut pas mettre un arg pour a? oui c'est cool et surcharger + motor_.goTo(x,y,a); update(); } } /// Recale contre une bordure. +// XXX Voir ca plus précisemment void Ai::recale (void) { while(!es_.capteursContact()) { - motor_.recalage(); //XXX hum... + motor_.recalage(); update(); } } -/// Mouvement basic. XXX c'est quoi les arguments là?? -void Ai::basic (double v, double d) +/// Mouvement basic. +void Ai::basic (double d) { - motor_.setSpeed(v); // XXX Vitesse par defaut à restorer? - // XXX A chercher dans config?? do { motor_.linearMove(d); @@ -140,14 +139,14 @@ 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) + 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(); } } /// Désactive les ventouse -void Ai::ventouses (void) +void Ai::ventouses (void) /// XXX Temps à régler dans la config { 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 8261097..5ce3bc2 100644 --- a/2005/i/robert/src/ai/ai.hh +++ b/2005/i/robert/src/ai/ai.hh @@ -37,6 +37,7 @@ class Ai // Modules de controle du robot Motor motor_; Es es_; + ovision_ ov_; // Scheduler du robot scheduler::Scheduler scheduler_; // Paramètre de Ai diff --git a/2005/i/robert/src/asserv/asserv.hh b/2005/i/robert/src/asserv/asserv.hh index d015729..246ef5c 100644 --- a/2005/i/robert/src/asserv/asserv.hh +++ b/2005/i/robert/src/asserv/asserv.hh @@ -104,7 +104,7 @@ class Asserv : public NonCopyable, public Proto::Receiver void goToPosition(double xPos, double yPos); void fuckTheWall(double speed); void fuckTheWall(int speed); - void setSpeed(double xSpeed = 0, double ySpeed = 0); + void setSpeed(double xSpeed, double ySpeed); void setSpeed(int xSpeed = 0, int ySpeed = 0); void setPwm(int leftPwm = 0, int rightPwm = 0); void finishAck(void); //met le paramètre F à 0 diff --git a/2005/i/robert/src/es/es.cc b/2005/i/robert/src/es/es.cc index b4aab7e..41baa51 100644 --- a/2005/i/robert/src/es/es.cc +++ b/2005/i/robert/src/es/es.cc @@ -34,6 +34,7 @@ Es::Es (const Config & config) void Es::init(void) { + // XXX Bon ca serait cool que l'AVR renvoie toute ses info au reset // On reset l'AVR proto_.send('z'); // XXX z = reset AVR // on récup les données de couleur_ et de jackOut(mais comment??) @@ -42,25 +43,21 @@ void Es::init(void) bool Es::stateJack(void) { - proto_.sync(); - return jackOut_; // XXX Ou autre methode + return jackOut_; } bool Es::capteursContact(void) { - proto_.sync(); return stateCapteurs_; } -levelAsc Es::stateAsc(void) // XXX Probleme dans le nom +levelAsc Es::stateAsc(void) // XXX Au secours!! { - proto_sync(); return stateAsc_; } void Es::moveAsc(levelAsc niveau) { - proto.sync(); if(niveau == HAUT) proto_.send('a',"b",2); else if(niveau == MILIEU) @@ -72,12 +69,28 @@ void Es::moveAsc(levelAsc niveau) void Es::ventouses(void) { - proto_.sync(); proto_.send('v'); } void receive(char command, const Proto::Frame & frame) { - // XXX Voir comment on fait + switch(command) + { + case 'J': //position jack + if(frame.args[0]) + jackOut_ = true; + else + jackOut = false; + break; + case 'C': //couleur selectionné + if(frame.args[0]) + couleur_ = true; + else + couleur_ = false; + break; + case 'F': //J'ai fini (on suppose qu'il n'y a que l'asc) + proto.send('F'); // XXX On met un argument?? + ascIdle_ = true; + } } diff --git a/2005/i/robert/src/es/es.hh b/2005/i/robert/src/es/es.hh index 4828c85..86db4ed 100644 --- a/2005/i/robert/src/es/es.hh +++ b/2005/i/robert/src/es/es.hh @@ -38,9 +38,14 @@ class Es : public Proto::Receiver // Objet Proto de communication vers la carte es Proto proto_; // vitesse de déplacement de l'ascenceur - int vitesseAsc_; - // couleur de notre camp (rouge/vert); - int couleur_; + int ascMinHaut; + int ascMaxHaut; + int ascAscHaut; + int ascMinBas; + int ascMaxBas; + int ascAscBas; + // couleur de notre camp (rouge(true)/vert(false)); + bool couleur_; // Etat du jack (false si entré, true si sortie) bool jackOut_; /// Etat des capteurs enculeurs de murs (true si enfoncés) @@ -54,11 +59,13 @@ class Es : public Proto::Receiver /// Initialise les capteurs et actionneurs void init(void); // Renvoie la position du jack (false si entré, true si sortie) - bool stateJack(void); + bool getStateJack(void); + /// Renvoie la couleur sélectionné + bool getColor(void); /// Renvoie l'état des capteurs de contact(true si les 2 enfoncés) bool capteursContact(void); /// Renvoie la position de l'ascenceur(true en haut false en bas) - Es::levelAsc stateAsc(void); ///XXX au secours + levelAsc stateAsc(void); ///XXX au secours /// Execute un déplacement de l'ascenceur void moveAsc(bool monte); /// Désactive les ventouses pour X secondes XXX vérifier la durées arg/config diff --git a/2005/i/robert/src/motor/motor.cc b/2005/i/robert/src/motor/motor.cc index 3b48104..896c7f4 100644 --- a/2005/i/robert/src/motor/motor.cc +++ b/2005/i/robert/src/motor/motor.cc @@ -26,9 +26,11 @@ #include "motor.hh" /// Constructeur -Motor::Motor (const Config & config) // XXX Voir si besoin de config +Motor::Motor (const Config & config) :asserv_(config, *this), idle_(true) { + pStatPosition = config.get("motor.pStatPosition"); + pStatMotor = config.get("motor.pStatMotor"); } /// Initialise les moteurs @@ -39,37 +41,31 @@ void Motor::init (void) // On stop le moteur stop(); // on règle le rafraichissement des positions - asserv_.statPosition(1); /// XXX Le temps combien et réglé ou?? - asserv_.statMotor(1); - // on remet les position à 0 XXX à 0? + asserv_.statPosition(pStatPosition); + asserv_.statMotor(pStatMotor); + // on remet les position à 0 XXX à 0? dns ai en dur posX_ = posY_ = posA_ = 0; - // on regarde si les moteurs sont idle - while (!idle()) {} // XXX humhum? } // Arrête les moteurs void Motor::stop(void) { - asserv_.setSpeed(0,0); - // XXX Peut-on lui dire d'oublier une commande? - while(!idle()){} ///XXX vaut mieux appeler la commande ou la var? + asserv_.setSpeed(); + while(!idle()){} ///XXX } double Motor::getX(void) { - sync(); // XXX attendre true?? return posX_; } double Motor::getY(void) { - sync(); return posY_; } double Motor::getA(void) { - sync(); return posA_; } @@ -87,25 +83,21 @@ void Motor::setSpeed(double v) { asserv_.setSpeed(v,v); /// XXX sur ca? idle_ = false; - sync(); // XXX avant ou après? } bool Motor::idle(void) { - sync(); return idle_; } void Motor::linearMove(double d) { - sync(); asserv_.linearMove(d); idle_ = false; } -void Motor::rotation(double newA) //Est-ce un nouveau angle asb ou rel?? +void Motor::rotation(double newA) { - sync(); asserv_.angularMove(newA); idle_ = false; } @@ -117,7 +109,6 @@ bool Motor::sync(void) void Motor::receiveCounter (double lMotor, double rMotor) { - /// XXX que faire } void Motor::receivePosX (double xPos) @@ -146,29 +137,24 @@ void Motor::receiveSpeedStat (int leftError, int leftInt, int rightError, void Motor::receivePwm (double leftPwm, double rightPwm) { - // XXX que faire?? } void Motor::receiveTiming (int motorTimer4, int motorTimer3, int motorTimer2, int motorTimer1, int motorTimer0) { - // XXX Que faire??? } void Motor::receiveInPort (int port) { - // XXX Que faire? } void Motor::receiveSharp (int sharp1, int sharp2, int sharp3) { - // XXX Que faire? } void Motor::receiveTazState(int state, int subState) { - // XXX Que faire? } void Motor::done (void) diff --git a/2005/i/robert/src/motor/motor.hh b/2005/i/robert/src/motor/motor.hh index f81af49..e617980 100644 --- a/2005/i/robert/src/motor/motor.hh +++ b/2005/i/robert/src/motor/motor.hh @@ -41,6 +41,9 @@ class Motor : public Asserv::Receiver double speed_; /// Etat des commandes bool idle_; + /// Paramètre de conf + int pStatPosition; + int pStatMotor; public: /// Constructeur -- cgit v1.2.3