From a3a3a4d6d183b22036a606cda8553192c98321cd Mon Sep 17 00:00:00 2001 From: schodet Date: Fri, 16 Apr 2004 16:46:46 +0000 Subject: Logger fonctionne. MovementRotation aussi. Ajout de Serial::wait. Ajout de commentaires. --- 2004/i/nono/src/motor/tracker.h | 49 ++++++++++++++++++++++++++++------------- 1 file changed, 34 insertions(+), 15 deletions(-) (limited to '2004/i/nono/src/motor/tracker.h') diff --git a/2004/i/nono/src/motor/tracker.h b/2004/i/nono/src/motor/tracker.h index 2674782..63c58b2 100644 --- a/2004/i/nono/src/motor/tracker.h +++ b/2004/i/nono/src/motor/tracker.h @@ -24,46 +24,65 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // }}} +#include "logger/log.h" #include +/// Classe de suivi des coordonnée et de calcul d'erreur. class Tracker { - // Position et angle (mm et rad). + /// Position et angle (mm et rad). double posX_, posY_, angle_; - // Distance entre les deux roues (mm). + /// Distance entre les deux roues (mm). double f_; - // Nombre d'updates nuls consécutifs. + /// Nombre d'updates nuls consécutifs. int zero_; + // Système de log. + mutable Log log_; public: - // Constructeur. + /// Constructeur. Tracker (void); - // Destructeur. + /// Destructeur. ~Tracker (void); - // Set the position. + /// Set the position. void setPos (double x, double y, double angle); - // Get the position. + /// Get the position. void getPos (double &x, double &y, double &angle) const; + /// Get X position. double getX (void) const { return posX_; } + /// Get Y position. double getY (void) const { return posY_; } + /// Get angle. double getAngle (void) const { return angle_; } + /// Retourne vrai si arrété. bool stopped (void) { return zero_ > 10; } - // Calcule l'erreur linéaire et angulaire pour atteindre un point, - // retourne faux si atteind. + /// Récupère l'angle entre l'angle courant et a normalisé entre -pi et pi. + double getAngleDiff (double a) const; + /// Calcule l'erreur linéaire et angulaire pour atteindre un point, + /// retourne faux si atteind. + /// (x, y) : point à atteindre (mm). + /// el, ea : erreur linéaire et angulaire (-1..+1). + /// eps : distance en dessous de laquelle on considère qu'on est arrivé + /// (mm). + /// dist : Distance maximale du point de référence (mm). bool computeError (double x, double y, double &el, double &ea, double eps, double dist) const; - // Calcule l'erreur angulaire pour atteindre un angle, retourne faux si - // atteind. + /// Calcule l'erreur angulaire pour atteindre un angle, retourne faux si + /// atteind. + /// a : angle à atteindre (rad). + /// ea : erreur angulaire (-1..+1). + /// eps : angle en dessous duquel on considère qu'on est arrivé (rad). bool computeAngleError (double a, double &ea, double eps) const; - // Calcule la longueur de l'arc gauche et droite pour atteindre un point. - // EPS précise la distance minimale. Renvois faux si atteind. + /// Calcule la longueur de l'arc gauche et droite pour atteindre un point. + /// EPS précise la distance minimale. Renvois faux si atteind. + /// \deprecated Pas vraiment l'algo qui faut. bool computeArcs (double x, double y, double &l, double &r, double eps) const; - // Met à jour la position. + /// Met à jour la position. void update (double dL, double dR); }; -// Affiche la position. +/// Affiche la position. std::ostream &operator<< (std::ostream &os, const Tracker &t); #endif // tracker_h -- cgit v1.2.3