Test du path finding

Dependencies:   RoboClaw mbed

Fork of TestMyPathFind by Romain Ame

Committer:
IceTeam
Date:
Wed Apr 13 16:17:19 2016 +0000
Revision:
41:53d5990ff99d
Parent:
39:ca4dd3faffa8
Correction odometrie;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sype 0:ad9600df4a70 1 #ifndef ODOMETRY_H
sype 0:ad9600df4a70 2 #define ODOMETRY_H
sype 0:ad9600df4a70 3
sype 0:ad9600df4a70 4 #include "mbed.h"
IceTeam 31:8bcc3a0bfa8a 5 #include "../RoboClaw/RoboClaw.h"
sype 0:ad9600df4a70 6
sype 0:ad9600df4a70 7 #define PI 3.1415926535897932384626433832795
sype 10:ae3178aa94e9 8 #define C 1.0
sype 10:ae3178aa94e9 9
IceTeam 31:8bcc3a0bfa8a 10 /* Vitesse d'acceleration d'angle reduite de 8000->4000 */
IceTeam 41:53d5990ff99d 11 #define accel_angle 1500
IceTeam 39:ca4dd3faffa8 12 #define vitesse_angle 3000
IceTeam 41:53d5990ff99d 13 #define deccel_angle 1500
sype 10:ae3178aa94e9 14
IceTeam 41:53d5990ff99d 15 #define accel_dista 6000
IceTeam 41:53d5990ff99d 16 #define vitesse_dista 16000
IceTeam 41:53d5990ff99d 17 #define deccel_dista 6000
IceTeam 41:53d5990ff99d 18
IceTeam 41:53d5990ff99d 19 // on attend un cran en dessous dans GotoDist GotoThet
sype 0:ad9600df4a70 20
sype 0:ad9600df4a70 21 /*
sype 0:ad9600df4a70 22 * Author : Benjamin Bertelone, reworked by Simon Emarre
sype 0:ad9600df4a70 23 */
sype 0:ad9600df4a70 24
sype 38:da3a2c781672 25 extern Serial logger;
sype 10:ae3178aa94e9 26 extern DigitalOut led;
sype 2:abdf8c6823a1 27
IceTeam 9:e39b218ab20d 28 /** Permet la gestion de l'odometrie du robot **/
sype 0:ad9600df4a70 29 class Odometry
sype 0:ad9600df4a70 30 {
IceTeam 8:12d7123a500e 31 public:
sype 10:ae3178aa94e9 32 /** Constructeur standard
IceTeam 8:12d7123a500e 33 * @param diameter_right Definit le diametre de la roue droite
IceTeam 8:12d7123a500e 34 * @param diameter_left Definit le diametre de la roue gauche
IceTeam 8:12d7123a500e 35 * @param v Definit l'entraxe du robot
IceTeam 8:12d7123a500e 36 * @param rc Definit une reference vers l'objet permettant l'asserv des moteurs
sype 10:ae3178aa94e9 37 * @note Cet objet doit etre initialise en amont
IceTeam 8:12d7123a500e 38 */
sype 10:ae3178aa94e9 39 Odometry(double diameter_right, double diameter_left, double v, uint16_t quadrature, RoboClaw &rc);
IceTeam 8:12d7123a500e 40
IceTeam 35:4e3d9ab1b94b 41 void TestEntraxe(int i);
IceTeam 35:4e3d9ab1b94b 42
IceTeam 8:12d7123a500e 43 /** Les fonctions suivantes permettent de reinitialiser les valeurs de position de l'odometrie.
IceTeam 8:12d7123a500e 44 */
IceTeam 8:12d7123a500e 45 void setPos(double x, double y, double theta);
IceTeam 8:12d7123a500e 46 void setX(double x);
IceTeam 8:12d7123a500e 47 void setY(double y);
IceTeam 8:12d7123a500e 48 void setTheta(double theta);
IceTeam 8:12d7123a500e 49
IceTeam 8:12d7123a500e 50 /** Les fonctions suivantes permettent de deplacer le robot vers une position ou un angle voulu
IceTeam 8:12d7123a500e 51 */
sype 14:d5e21f71c2a9 52 void GotoXY(double x_goal, double y_goal);
IceTeam 8:12d7123a500e 53 void GotoXYT(double x_goal, double y_goal, double theta_goal);
IceTeam 8:12d7123a500e 54 void GotoThet(double theta_);
IceTeam 8:12d7123a500e 55 void GotoDist(double distance);
IceTeam 8:12d7123a500e 56
IceTeam 8:12d7123a500e 57 double getX() {
IceTeam 8:12d7123a500e 58 return x;
IceTeam 8:12d7123a500e 59 }
IceTeam 8:12d7123a500e 60 double getY() {
IceTeam 8:12d7123a500e 61 return y;
IceTeam 8:12d7123a500e 62 }
IceTeam 8:12d7123a500e 63 double getTheta() {
IceTeam 8:12d7123a500e 64 return theta; // ]-PI;PI]
IceTeam 8:12d7123a500e 65 }
IceTeam 8:12d7123a500e 66 double getTheta_(double x, double y);
IceTeam 8:12d7123a500e 67
IceTeam 8:12d7123a500e 68 double abs_d(double x) {
IceTeam 8:12d7123a500e 69 if(x<0) return -x;
IceTeam 8:12d7123a500e 70 else return x;
IceTeam 8:12d7123a500e 71 }
IceTeam 7:961c1acdf753 72
sype 10:ae3178aa94e9 73 /* Les fonction suivantes sont actuellement inutilisables, elles pourraient buguer en cas d'utilisation. */
sype 10:ae3178aa94e9 74
IceTeam 8:12d7123a500e 75 double getVitLeft() {
IceTeam 8:12d7123a500e 76 return m_vitLeft;
IceTeam 8:12d7123a500e 77 }
IceTeam 8:12d7123a500e 78 double getVitRight() {
IceTeam 8:12d7123a500e 79 return m_vitRight;
IceTeam 8:12d7123a500e 80 }
IceTeam 8:12d7123a500e 81
IceTeam 8:12d7123a500e 82 double getDistLeft() {
IceTeam 8:12d7123a500e 83 return m_distLeft;
IceTeam 8:12d7123a500e 84 }
IceTeam 8:12d7123a500e 85 double getDistRight() {
IceTeam 8:12d7123a500e 86 return m_distRight;
IceTeam 8:12d7123a500e 87 }
IceTeam 8:12d7123a500e 88
IceTeam 8:12d7123a500e 89 void setDistLeft(double dist) {
IceTeam 8:12d7123a500e 90 m_distLeft = dist;
IceTeam 8:12d7123a500e 91 }
IceTeam 8:12d7123a500e 92 void setDistRight(double dist) {
IceTeam 8:12d7123a500e 93 m_distRight = dist;
IceTeam 8:12d7123a500e 94 }
IceTeam 8:12d7123a500e 95
IceTeam 8:12d7123a500e 96 double calcul_distance(double x, double y, double theta_goal);
IceTeam 8:12d7123a500e 97
IceTeam 8:12d7123a500e 98 int32_t getPulsesLeft(void) {
IceTeam 8:12d7123a500e 99 return m_pulses_left;
IceTeam 8:12d7123a500e 100 }
IceTeam 8:12d7123a500e 101 int32_t getPulsesRight(void) {
IceTeam 8:12d7123a500e 102 return m_pulses_right;
IceTeam 8:12d7123a500e 103 }
IceTeam 8:12d7123a500e 104 double carre(double a) {
IceTeam 8:12d7123a500e 105 return a*a;
IceTeam 8:12d7123a500e 106 }
sype 14:d5e21f71c2a9 107
sype 14:d5e21f71c2a9 108 void getEnc();
sype 14:d5e21f71c2a9 109
IceTeam 8:12d7123a500e 110 /** La fonction retourne vraie quand le robot atteint l'angle voulu avec une marge d'erreur definie par la fonction
IceTeam 8:12d7123a500e 111 * @param theta_ valeur de l'angle devant etre atteint
IceTeam 8:12d7123a500e 112 */
sype 10:ae3178aa94e9 113 bool isArrived(void) {return arrived;}
IceTeam 8:12d7123a500e 114 /** Permet de mettre à jour les valeurs de l'odometrie
IceTeam 8:12d7123a500e 115 */
IceTeam 8:12d7123a500e 116 void update_odo(void);
IceTeam 8:12d7123a500e 117
IceTeam 8:12d7123a500e 118 private:
IceTeam 8:12d7123a500e 119 RoboClaw &roboclaw;
IceTeam 8:12d7123a500e 120 int32_t m_pulses_left;
IceTeam 8:12d7123a500e 121 int32_t m_pulses_right;
sype 10:ae3178aa94e9 122 uint8_t pos_prog;
IceTeam 8:12d7123a500e 123 double x, y, theta;
IceTeam 8:12d7123a500e 124 double m_vitLeft, m_vitRight;
IceTeam 8:12d7123a500e 125 double m_distLeft, m_distRight;
IceTeam 8:12d7123a500e 126
IceTeam 8:12d7123a500e 127 double m_distPerTick_left, m_distPerTick_right, m_v;
IceTeam 8:12d7123a500e 128
IceTeam 8:12d7123a500e 129 double erreur_ang;
sype 10:ae3178aa94e9 130 bool arrived;
sype 0:ad9600df4a70 131 };
sype 0:ad9600df4a70 132
sype 0:ad9600df4a70 133 #endif