summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhaller2005-04-27 21:42:37 +0000
committerhaller2005-04-27 21:42:37 +0000
commit9b4d2709fc7ebd2285e5f5d0cb98d72e8d6e2d03 (patch)
tree3d2e1d07d1ee939d39be6e8794742c597141df9b
parentf0ccf37dce1373d0e3ca70a68772de98ed67d995 (diff)
Modification de deux trois choses
Y'a encore du boulot
-rw-r--r--2005/i/robert/src/ai/ai.cc33
-rw-r--r--2005/i/robert/src/ai/ai.hh1
-rw-r--r--2005/i/robert/src/asserv/asserv.hh2
-rw-r--r--2005/i/robert/src/es/es.cc29
-rw-r--r--2005/i/robert/src/es/es.hh17
-rw-r--r--2005/i/robert/src/motor/motor.cc32
-rw-r--r--2005/i/robert/src/motor/motor.hh3
7 files changed, 63 insertions, 54 deletions
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<int>("ai.roundDuration")),
vitesseAsc_(config.set<int>("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<int>("motor.pStatPosition");
+ pStatMotor = config.get<int>("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