summaryrefslogtreecommitdiff
path: root/2004/i/nono/src/motor/motor.h
diff options
context:
space:
mode:
Diffstat (limited to '2004/i/nono/src/motor/motor.h')
-rw-r--r--2004/i/nono/src/motor/motor.h28
1 files changed, 21 insertions, 7 deletions
diff --git a/2004/i/nono/src/motor/motor.h b/2004/i/nono/src/motor/motor.h
index e7312a9..b33ede3 100644
--- a/2004/i/nono/src/motor/motor.h
+++ b/2004/i/nono/src/motor/motor.h
@@ -28,6 +28,8 @@
#include "tracker.h"
#include "movement.h"
+#include <list>
+
/// Gestion des moteurs principaux du robot. Cette classe gére les
/// déplacements simples (enfin pas si simple que ça) comme aller vers un
/// point, atteindre un angle...
@@ -43,9 +45,13 @@ class Motor : public AsservTracker
static Motor *instance_;
/// Echelles (mm/unit, mm/s.unit, mm/s^2.unit).
double s_, vs_, a_;
+ /// Echelles entre l'unitée et la vitesse max.
+ double fact_;
/// Distance de freinage à vitesse maximale.
double brakeDistance_;
- /// Mouvement en cours.
+ /// File de mouvements.
+ typedef std::list<Movement *> MovementQueue;
+ MovementQueue movementQueue_;
Movement *movement_;
/// Vitesses maximale et minimale (unit).
int maxSpeed_, minSpeed_;
@@ -60,8 +66,10 @@ class Motor : public AsservTracker
/// l, r : mise à jour moteur gauche et droit (unit).
/// zero : vrai si le mouvement est à considérer comme nul.
void updateCounter (int l, int r, bool zero);
- /// Choisi le mouvement en cours.
- void setMovement (Movement *m);
+ /// Ajoute un mouvement à la file d'attente.
+ void addMovement (Movement *m);
+ /// Vide la file d'attente.
+ void clearMovement (void);
/// Active l'asservissement.
void go (bool fl = true) { asserv_.setAsserv (fl); }
/// Teste si l'émission est terminée.
@@ -78,20 +86,26 @@ class Motor : public AsservTracker
void waitStopped (void);
/// Récupère l'object tracker.
const Tracker &getTracker (void) const { return tracker_; }
+ /// Récupère l'object asserv.
+ Asserv &getAsserv (void) { return asserv_; }
/// Paramètre la vitesse linéaire (-1..+1) et angulaire (-1..+1). Limite
- /// la vitesse pour pouvoir freiner au bout de dist (mm).
- void speed (double l, double a, double dist);
+ /// la vitesse pour pouvoir freiner au bout de dist (mm) et au bout de
+ /// l'angle (rad).
+ void speed (double l, double a, double dist, double angle);
/// Paramètre la vitesse des moteurs (-1..+1).
void speed (double l, double r);
/// Paramètre la vitesse des moteurs (-1..+1) avec une vitesse limite
- /// (unit).
- void speedLimit (double l, double r, double vLimit);
+ /// linéaire en angulaire (unit).
+ void speedLimit (double l, double r, double vLimitL, double vLimitA);
/// Calcule la vitesse (unit) en ligne droit afin de pouvoir freiner au
/// bout d'une distance (mm).
double computeSpeed (double dist) const;
/// Va vers un point, en formant un arc de cercle, renvois faux si atteind.
/// \deprecated Utiliser goTo().
bool goToArc (double x, double y, double eps = 5.0);
+ protected:
+ /// Passe au mouvement suivant.
+ bool nextMovement (void);
};
#endif // motor_h