summaryrefslogtreecommitdiff
path: root/2005/i/robert/src/asserv/asserv.hh
diff options
context:
space:
mode:
Diffstat (limited to '2005/i/robert/src/asserv/asserv.hh')
-rw-r--r--2005/i/robert/src/asserv/asserv.hh84
1 files changed, 58 insertions, 26 deletions
diff --git a/2005/i/robert/src/asserv/asserv.hh b/2005/i/robert/src/asserv/asserv.hh
index b2cca59..08b8aa0 100644
--- a/2005/i/robert/src/asserv/asserv.hh
+++ b/2005/i/robert/src/asserv/asserv.hh
@@ -32,49 +32,81 @@
/// Classe de dialogue avec la carte d'asservissement.
class Asserv : public NonCopyable, public Proto::Receiver
{
+ /// Les clients de Asserv doivent dériver de Receiver.
+ class Receiver
+ {
+ public:
+ /// Recoit un packet.
+ virtual void receive (char command, const Frame &frame) = 0;
+ };
// Communication avec l'AVR
Proto proto_;
- // Paramètres.
- int accel_, kp_, ki_, kd_;
- int statMotor_;
- int counter_;
- bool posAsserv_;
- int gpiDelay_;
- bool asserv_;
- int zeroEps_;
- bool noSetParam_;
- // Ancienne valeur des compteur.
- bool firstCounter_;
- int countLeft_, countRight_;
- int countLeftSum_, countRightSum_;
- // Valeurs GPIO.
- unsigned int gpi_;
- unsigned int gpo_;
+ std::string ttyName_;
+ // Paramètre de l'avr
+ double footing_;
+ double epsilon_;
+ double accel_;
+ double kp_;
+ double ki_;
+ double kd_;
+ double maxSpeed_;
+
// Système de log.
Log log_;
public:
/// Constructeur.
- Asserv (const Config & config);
- /// Destructeur. XXX Y'a besoin du destructeur?
+ Asserv (const Config & config, Receiver & receiver);
+ /// Destructeur.
~Asserv (void);
/// Reset la carte et envois les paramètres.
void reset (void);
- /// Teste si l'émission est terminée.
- bool ok (void);
+ /// Essaie de purger la liste d'émission et indique si elle est vide.
+ bool sync (void);
/// Attend que toute les émissions soit terminées.
- void waitOk (void);
+ bool wait (int timeout = -1);
+ /// Commandes asservissement
+ void linearMove(double distance);
+ void angularMove(int8_t angle);
+ void goToPosition(int32_t xPos, int32_t yPos);
+ void fuckTheWall(int8_t speed);
+ void setSpeed(int8_t xSpeed = 0, int8_t ySpeed = 0);
+ void setPwm(int16_t leftPwm = 0, int16_t rightPwm = 0);
+ /// Statistiques
+ void statCounter(int8_t period = 0);
+ void statPosition(int8_t period = 0);
+ void statMotor(int8_t period = 0);
+ void statPwm(int8_t period = 0);
+ void statTimer(int8_t period = 0);
+ void statInPort(int8_t period = 0);
//@{
/// Change les paramètres de la carte.
+ void setXPos(int32_t pos);
+ void setYPos(int32_t pos);
+ void setAngle(int32_t angle);
+ void setFooting(int32_t dist);
+ void setEpsilon(int32_t e);
void setAccel (int accel);
void setKp (int kp);
void setKi (int ki);
void setKd (int kd);
- void setStatMotor (int delay);
- void setCounter (int delay);
- void setPosAsserv (bool fl = true);
- void setGpiDelay (int delay);
- void setAsserv (bool fl = true);
+ void setMaxSpeed(int16_t);
//@}
+
+ /// implémentation du proto::Receiver
+ void receive (char command, const Frame &frame);
+
+ private:
+ /// Charge les données de la classe config
+ void loadConfig(void);
+ /// Fonctions de conversion
+ int mm2pasW(double dist);
+ int mm2pasD(double dist);
+ int radTo256(double angle);
+ int mms2ppp(double vitesse);
+ int rCycl2Pwm(double rCycl);
+
+
+
};
#endif // asserv_h