Voili voilou
Dependencies: RoboClaw StepperMotor mbed
Fork of Robot2016_2-0 by
Diff: Odometry/Odometry.h
- Revision:
- 8:12d7123a500e
- Parent:
- 7:961c1acdf753
- Child:
- 9:e39b218ab20d
--- a/Odometry/Odometry.h Tue Nov 24 22:54:55 2015 +0000 +++ b/Odometry/Odometry.h Tue Nov 24 22:59:01 2015 +0000 @@ -15,77 +15,101 @@ class Odometry { - public: - /** Constructeur standart - * @param diameter_right Definit le diametre de la roue droite - * @param diameter_left Definit le diametre de la roue gauche - * @param v Definit l'entraxe du robot - * @param rc Definit une reference vers l'objet permettant l'asserv des moteurs - @note Cet objet doit etre initialise en amont - */ - Odometry(double diameter_right, double diameter_left, double v, RoboClaw &rc); - - /** Les fonctions suivantes permettent de reinitialiser les valeurs de position de l'odometrie. - */ - void setPos(double x, double y, double theta); - void setX(double x); - void setY(double y); - void setTheta(double theta); - - /** Les fonctions suivantes permettent de deplacer le robot vers une position ou un angle voulu - */ - void GotoXYT(double x_goal, double y_goal, double theta_goal); - void GotoThet(double theta_); - void GotoDist(double distance); - - double getX() {return x;} - double getY() {return y;} - double getTheta() {return theta;} // ]-PI;PI] - double getTheta_(double x, double y); - - double abs_d(double x){ - if(x<0) return -x; - else return x; - } - - /** Les fonction suivantes sont actuellement inutilisables, elles pourraient buguer en cas d'utilisation. - * @note pour que les fonctions retournent une valeur correcte, il faut actualiser l'odometrie avec update_odo auparavant - */ - double getVitLeft() {return m_vitLeft;} - double getVitRight() {return m_vitRight;} - - double getDistLeft() {return m_distLeft;} - double getDistRight() {return m_distRight;} - - void setDistLeft(double dist) {m_distLeft = dist;} - void setDistRight(double dist) {m_distRight = dist;} +public: + /** Constructeur standart + * @param diameter_right Definit le diametre de la roue droite + * @param diameter_left Definit le diametre de la roue gauche + * @param v Definit l'entraxe du robot + * @param rc Definit une reference vers l'objet permettant l'asserv des moteurs + @note Cet objet doit etre initialise en amont + */ + Odometry(double diameter_right, double diameter_left, double v, RoboClaw &rc); + + /** Les fonctions suivantes permettent de reinitialiser les valeurs de position de l'odometrie. + */ + void setPos(double x, double y, double theta); + void setX(double x); + void setY(double y); + void setTheta(double theta); + + /** Les fonctions suivantes permettent de deplacer le robot vers une position ou un angle voulu + */ + void GotoXYT(double x_goal, double y_goal, double theta_goal); + void GotoThet(double theta_); + void GotoDist(double distance); + + double getX() { + return x; + } + double getY() { + return y; + } + double getTheta() { + return theta; // ]-PI;PI] + } + double getTheta_(double x, double y); + + double abs_d(double x) { + if(x<0) return -x; + else return x; + } - double calcul_distance(double x, double y, double theta_goal); - - int32_t getPulsesLeft(void) {return m_pulses_left;} - int32_t getPulsesRight(void) {return m_pulses_right;} - double carre(double a) {return a*a;} - - /** La fonction retourne vraie quand le robot atteint l'angle voulu avec une marge d'erreur definie par la fonction - * @param theta_ valeur de l'angle devant etre atteint - */ - bool isArrivedRot(double theta_); - /** Permet de mettre à jour les valeurs de l'odometrie - */ - void update_odo(void); - - private: - RoboClaw &roboclaw; - int32_t m_pulses_left; - int32_t m_pulses_right; - - double x, y, theta; - double m_vitLeft, m_vitRight; - double m_distLeft, m_distRight; - - double m_distPerTick_left, m_distPerTick_right, m_v; - - double erreur_ang; + /** Les fonction suivantes sont actuellement inutilisables, elles pourraient buguer en cas d'utilisation. + * @note pour que les fonctions retournent une valeur correcte, il faut actualiser l'odometrie avec update_odo auparavant + */ + double getVitLeft() { + return m_vitLeft; + } + double getVitRight() { + return m_vitRight; + } + + double getDistLeft() { + return m_distLeft; + } + double getDistRight() { + return m_distRight; + } + + void setDistLeft(double dist) { + m_distLeft = dist; + } + void setDistRight(double dist) { + m_distRight = dist; + } + + double calcul_distance(double x, double y, double theta_goal); + + int32_t getPulsesLeft(void) { + return m_pulses_left; + } + int32_t getPulsesRight(void) { + return m_pulses_right; + } + double carre(double a) { + return a*a; + } + + /** La fonction retourne vraie quand le robot atteint l'angle voulu avec une marge d'erreur definie par la fonction + * @param theta_ valeur de l'angle devant etre atteint + */ + bool isArrivedRot(double theta_); + /** Permet de mettre à jour les valeurs de l'odometrie + */ + void update_odo(void); + +private: + RoboClaw &roboclaw; + int32_t m_pulses_left; + int32_t m_pulses_right; + + double x, y, theta; + double m_vitLeft, m_vitRight; + double m_distLeft, m_distRight; + + double m_distPerTick_left, m_distPerTick_right, m_v; + + double erreur_ang; }; #endif