Romain Ame / Mbed 2 deprecated Timer71pt

Dependencies:   RoboClaw mbed

Fork of Timer by ARES

Files at this revision

API Documentation at this revision

Comitter:
IceTeam
Date:
Thu May 05 01:30:14 2016 +0200
Parent:
63:176d04975f06
Child:
65:7bf11abfefc3
Commit message:
Test du code d'execution des objectifs et des nouvelles fonctionnalites du path finding

Changed in this revision

Map/Objectif/objectif.cpp Show annotated file Show diff for this revision Revisions of this file
Map/Objectif/objectif.h Show annotated file Show diff for this revision Revisions of this file
Map/map.cpp Show annotated file Show diff for this revision Revisions of this file
Map/map.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Map/Objectif/objectif.cpp	Wed May 04 21:51:00 2016 +0000
+++ b/Map/Objectif/objectif.cpp	Thu May 05 01:30:14 2016 +0200
@@ -1,14 +1,16 @@
 #include "objectif.h"
 
-/* Dernier Changement : Romain 20h20 */
+/* Dernier Changement : Romain 0h20 */
 
-objectif::objectif (int ntype, float nx_obj, float ny_obj, float nthet_obj, AX12 * np, ControlleurPince * npince) {
+objectif::objectif (int ntype, float nx_obj, float ny_obj, float nthet_obj, Odometry * nCodo, AX12 * np, ControlleurPince * npince) {
 	Parasol = np;
 	pince = npince;
 	type = ntype;
 	x_objectif = nx_obj;
 	y_objectif = ny_obj;
 	thet_objectif = nthet_obj;
+	Codo = nCode;
+	marche_arrière = arr;
 }
 
 bool objectif::Action () {
@@ -22,10 +24,16 @@
 		default:
 			break;
 	}
+
+	if (marche_arrière != 0) {
+		odo->GotoDist(-marche_arrière);
+	}
 }
 
 bool objectif::obj_bloc_action () {
-	return true;
+	/* Range : 0 -> 10 (cm). pince.home remet à 0 */
+	pince.home();
+	pince.setPos(3);
 }
 
 bool objectif::obj_para_action() {
--- a/Map/Objectif/objectif.h	Wed May 04 21:51:00 2016 +0000
+++ b/Map/Objectif/objectif.h	Thu May 05 01:30:14 2016 +0200
@@ -1,16 +1,17 @@
 #ifndef OBJECTIF_H
 #define OBJECTIF_H
 
-/* Dernier Changement : Romain 20h20 
+/* Dernier Changement : Romain 0h20 
 Inclu dans : map.h */
 
 #include "objectif_type.h"
 #include "../../AX12/AX12.h"
+#include "../../Odometry/Odometry.h"
 #include "../../ControlleurPince/ControlleurPince.h"
 
 class objectif {
 public:
-	objectif (int ntype, float nx_obj, float ny_obj, float nthet_obj, AX12 * np, ControlleurPince * npince);
+	objectif (int ntype, float nx_obj, float ny_obj, float nthet_obj, Odometry * nCodo, AX12 * np, ControlleurPince * npince, float arr = 0);
 	bool Action ();
 	float getX() { return x_objectif; }
 	float getY() { return y_objectif; }
@@ -22,8 +23,10 @@
 
 	int type;
 	float x_objectif, y_objectif, thet_objectif;
+	float marche_arriere;
 	AX12 * Parasol;
 	ControlleurPince * pince;
+	Odometry * Codo;
 };
 
 #endif
\ No newline at end of file
--- a/Map/map.cpp	Wed May 04 21:51:00 2016 +0000
+++ b/Map/map.cpp	Thu May 05 01:30:14 2016 +0200
@@ -2,7 +2,27 @@
 
 /* Dernier Changement : Romain 20h30 */
 
-map::map (Odometry* nodo, AX12 * np, ControlleurPince * npince) : Codo(nodo) {
+void map::Build_Objectives() {
+    if (couleur == VERT) {
+        addObj (objectif (OBJ_BLOC, 120, 1000, 0, Parasol, pince));
+        addObj (objectif (OBJ_BLOC, 120, 1000, 0, Parasol, pince, 10));
+    }
+    else {
+        addObj (objectif (OBJ_BLOC, 3000-120, 1000, 0, Parasol, pince));
+        addObj (objectif (OBJ_BLOC, 3000-120, 1000, 0, Parasol, pince));
+    }
+}
+
+map::map (Odometry* nodo, AX12 * np, ControlleurPince * npince, int ncouleur, int nformation) : Codo(nodo), Parasol(np), ControlleurPince(npince) {
+    couleur = ncouleur;
+    formation = nformation;
+
+    if (couleur == VERT) {
+        Codo->setPos(X_START_VERT, Y_START, 0);
+    }
+    else {
+        Codo->setPos(Y_START, Y_START, -PI);
+    }
 }
 
 void map::addObs (obsCarr nobs) {
@@ -195,39 +215,54 @@
     endedParc = false;
 }
 
+void map::Execute() {
+    for (int i = 0; i < objectifs.size();++i) {
+        Execute(i);
+    }
+}
+
 void map::Build (int couleur, int formation) {
     if (couleur == VERT) {
         max_x_table = 1400;
-        max_y_table = 1800;
-        min_x_table = 0;
-        min_y_table = 0;
+        max_y_table = 1900;
+        min_x_table = 100;
+        min_y_table = 100;
     }
     else {
         max_x_table = 2900;
-        max_y_table = 1800;
+        max_y_table = 1900;
         min_x_table = 1600;
-        min_y_table = 0;
+        min_y_table = 100;
     }
 
     if (couleur == VERT) {
+        // Attention les commentaires sont inversées par rapport aux valeur en x et y des obstacles.
+        // Il faut lire les commentaires de la façon dont la carte est présentée dans le règlement
+        // Un / signifie un point de départ. Milieu/Haut/Haut signifie que l'on part du milieu, que l'on va en haut puis encore en haut  
+
         addObs(obsCarr (0, 2000, 250, 150));  // Coté haut droite
         addObs(obsCarr (200, 2000, 200, 50));
-        addObs(obsCarr (800, 100, 100, 15));
+
+        addObs(obsCarr (800, 100, 100, 15));    // Petit obstacle en haut à gauche
     }
     else {
         addObs(obsCarr (3000, 2000, 250, 150));     // Coté bas droite
         addObs(obsCarr (2800, 2000, 200, 50));
-        addObs(obsCarr (2200, 100, 100, 15));
+
+        addObs(obsCarr (2200, 100, 100, 15));   // Petit Obstacle en haut à gauche
     }
 
-    addObs(obsCarr (1500, 750, 1100, 15));
-    addObs(obsCarr (1500, 1050, 20, 300));
+    addObs(obsCarr (1500, 750, 1100, 15));      // Obstacle du milieu à la verticale
+    addObs(obsCarr (1500, 1050, 20, 300));      // Vitre du milieu (horizontale)
     
     if (formation == 1) { 
         Build_formation_1 (couleur);
     }
+    if (formation == 2) {
+        Build_formation_2 (couleur);        
+    }
     else {
-        addObs(obsCarr (1250, 1000, 220, 220));
+        addObs(obsCarr (1250, 1000, 220, 220)); // Obstacles du test standard hors-coupe. A ignorer
         addObs(obsCarr (1500, 750, 220, 220));
         addObs(obsCarr (1500, 1250, 220, 220));   
     }
@@ -235,17 +270,17 @@
 
 void map::Build_formation_1 (int couleur) {
     if (couleur == VERT) {
-        addObs(obsCarr (200, 2000-450, 40, 40));   // Coquillages du haut droit
-        addObs(obsCarr (200, 2000-750, 40, 40));
+        addObs(obsCarr (200, 2000-450, 40, 40));    // Coquillage du haut - droite
+        addObs(obsCarr (200, 2000-750, 40, 40));    // Coquillage sur le même axe horizontal
         
-        addObs(obsCarr (900, 2000-550, 40, 40));
-        addObs(obsCarr (1200, 2000-350, 40, 40)); // Coquillages du milieu/haut
+        addObs(obsCarr (900, 2000-550, 40, 40));    // Coqullage du milieu/haut/haut
+        addObs(obsCarr (1200, 2000-350, 40, 40));   // Coquillage du milieu/haut
         
-        addObs(obsCarr (1500, 2000-550, 40, 40));
-        addObs(obsCarr (1500, 2000-350, 40, 40)); 
+        addObs(obsCarr (1500, 2000-550, 40, 40));   // Coquillage du milieu gauche
+        addObs(obsCarr (1500, 2000-350, 40, 40));   // Coquillage du milieu droit
         
         //addObs(obsCarr (3000-900, 2000-550, 40, 40));
-        addObs(obsCarr (3000-1200, 2000-350, 40, 40));   
+        addObs(obsCarr (3000-1200, 2000-350, 40, 40));   // Coquillage du milieu bas
         
         //addObs(obsCarr (3000-200, 2000-450, 40, 40));   // Coquillages du bas droite
         //addObs(obsCarr (3000-200, 2000-750, 40, 40));        
@@ -257,51 +292,49 @@
         //addObs(obsCarr (900, 2000-550, 40, 40));
         addObs(obsCarr (1200, 2000-350, 40, 40)); // Coquillages du milieu/haut
         
-        addObs(obsCarr (1500, 2000-550, 40, 40));
-        addObs(obsCarr (1500, 2000-350, 40, 40)); 
+        addObs(obsCarr (1500, 2000-550, 40, 40));   // Coquillage du milieu gauche
+        addObs(obsCarr (1500, 2000-350, 40, 40));   // Coquillage du milieu droite
         
-        addObs(obsCarr (3000-900, 2000-550, 40, 40));
-        addObs(obsCarr (3000-1200, 2000-350, 40, 40));   
+        addObs(obsCarr (3000-900, 2000-550, 40, 40));   // Coquillage du milieu/bas 
+        addObs(obsCarr (3000-1200, 2000-350, 40, 40));  // Coquillage du milieu/bas/bas
         
         addObs(obsCarr (3000-200, 2000-450, 40, 40));   // Coquillages du bas droite
-        addObs(obsCarr (3000-200, 2000-750, 40, 40));        
+        addObs(obsCarr (3000-200, 2000-750, 40, 40));   // Coquillage sur le même axe horizontal       
     }
 }
 
 void map::Build_formation_2 (int couleur) {
     if (couleur == VERT) {
-        addObs(obsCarr (200, 2000-450, 40, 40));   // Coquillages du haut droit
-        addObs(obsCarr (200, 2000-750, 40, 40));
-
-        addObs(obsCarr (600, 2000-450, 40, 40));   // Coquillages du milieu haut
-        addObs(obsCarr (600, 2000-750, 40, 40));
+        addObs(obsCarr (200, 2000-450, 40, 40));    // Coquillage du haut gauche
+        addObs(obsCarr (200, 2000-750, 40, 40));    // Coquillage du haut droite
 
-        addObs(obsCarr (900, 2000-550, 40, 40));
-        addObs(obsCarr (1200, 2000-350, 40, 40)); // Coquillages du milieu/haut
-        
-        addObs(obsCarr (1500, 2000-550, 40, 40));
-        addObs(obsCarr (1500, 2000-350, 40, 40)); 
-        
-        //addObs(obsCarr (3000-900, 2000-550, 40, 40));
-        addObs(obsCarr (3000-1200, 2000-350, 40, 40));   
-        
-        //addObs(obsCarr (3000-200, 2000-450, 40, 40));   // Coquillages du bas droite
-        //addObs(obsCarr (3000-200, 2000-750, 40, 40));        
+        addObs(obsCarr (600, 2000-450, 40, 40));    // Coquillage du milieu/haut/haut droite
+        addObs(obsCarr (600, 2000-750, 40, 40));    // Coquillage du milieu/haut/haut sur le même axe horizontal
+
+        addObs(obsCarr (1200, 2000-350, 40, 40));   // Coquillage du milieu/haut droite
     }
     else {
         //addObs(obsCarr (200, 2000-450, 40, 40));   // Coquillages du haut droit
         //addObs(obsCarr (200, 2000-750, 40, 40));
         
         //addObs(obsCarr (900, 2000-550, 40, 40));
-        addObs(obsCarr (1200, 2000-350, 40, 40)); // Coquillages du milieu/haut
-        
-        addObs(obsCarr (1500, 2000-550, 40, 40));
-        addObs(obsCarr (1500, 2000-350, 40, 40)); 
-        
-        addObs(obsCarr (3000-900, 2000-550, 40, 40));
-        addObs(obsCarr (3000-1200, 2000-350, 40, 40));   
-        
-        addObs(obsCarr (3000-200, 2000-450, 40, 40));   // Coquillages du bas droite
-        addObs(obsCarr (3000-200, 2000-750, 40, 40));        
+        addObs(obsCarr (3000-200, 2000-450, 40, 40));    // Coquillage du bas gauche
+        addObs(obsCarr (3000-200, 2000-750, 40, 40));    // Coquillage du bas droite
+
+        addObs(obsCarr (3000-600, 2000-450, 40, 40));    // Coquillage du milieu bas/bas droite
+        addObs(obsCarr (3000-600, 2000-750, 40, 40));    // Coquillage du milieu bas/bas sur le même axe horizontal
+
+        addObs(obsCarr (1800, 2000-350, 40, 40));   // Coquillage du milieu/bas droite
+    }
+}
+
+void map::Build_Objectives() {
+    if (couleur == VERT) {
+        addObj (objectif (OBJ_BLOC, 120, 1000, 0, Parasol, pince));
+        addObj (objectif (OBJ_BLOC, 120, 1000, 0, Parasol, pince));
+    }
+    else {
+        addObj (objectif (OBJ_BLOC, 3000-120, 1000, 0, Parasol, pince));
+        addObj (objectif (OBJ_BLOC, 3000-120, 1000, 0, Parasol, pince));
     }
 }
\ No newline at end of file
--- a/Map/map.h	Wed May 04 21:51:00 2016 +0000
+++ b/Map/map.h	Thu May 05 01:30:14 2016 +0200
@@ -1,7 +1,7 @@
 #ifndef MAP_H
 #define MAP_H
 
-/* Dernier Changement : Romain 20h30 
+/* Dernier Changement : Romain 0h20 
 Inclu dans : main.cpp 
 Il faut encore gerer les formations de coquillage */
 
@@ -15,19 +15,21 @@
 #include "../AX12/AX12.h"
 #include "../../StepperMotor/Stepper.h"
 
-#define MAP_RIGHTSIDE 1
-#define MAP_LEFTSIDE 2
+#define X_START_VERT 110
+#define X_START_VIOLET 2990
+#define Y_START 1000
 
 class map {
 public:
-    map (Odometry* nodo, AX12 * np, ControlleurPince * npince);
+    map (Odometry* nodo, AX12 * np, ControlleurPince * npince, int ncouleur, int nformation);
     void addObs (obsCarr nobs);
     void addObj (objectif nobj);
     void FindWay (point dep, point arr);
     void FindWay (float depX, float depY, float arrX, float arrY);
     void Execute (int obj);
+    void Execute ();
     void Execute (float XObjectif, float YObjectif);
-    void Build(int couleur, int formation);
+    void Build();
     nVector<pointParcours>& getParc () { return path; }
     bool& getEnded () { return endedParc; }
 
@@ -37,14 +39,17 @@
     nVector<objectif> objectifs;
 
     bool endedParc; // Definit s'il existe un chemin parcourable dans le dernier FindWay
+    int couleur, formation;
     Odometry* Codo;
-    AX12 * A1, * A2, * A3;
-    Stepper * S1, * S2;
+    AX12 * Parasol;
+    ControlleurPince * pince;
 
     float min_x_table, min_y_table, max_x_table, max_y_table;
 
     void Build_formation_1 (int couleur);
     void Build_formation_2 (int couleur);
+
+    void Build_Objectives ();
 };
 
 #endif
\ No newline at end of file
--- a/main.cpp	Wed May 04 21:51:00 2016 +0000
+++ b/main.cpp	Thu May 05 01:30:14 2016 +0200
@@ -62,20 +62,10 @@
 /* Debut du programme */
 int main(void)
 {
-    //logger.printf("Depart homologation !\n\r");
-    //homologation();
-    logger.printf("Homming ...\n\r");
-    controlleurPince.home();
-    wait(1);
-    controlleurPince.setPos(10.f,0.f,0.f);
-    wait(1);
-    controlleurPince.setPos(20.f,0.f,0.f);
-    wait(1);
-    controlleurPince.setPos(70.f,0.f,0.f);
-    wait(1);
-    controlleurPince.setPos(20.f,0.f,0.f);
-    logger.printf("Done ...\n\r");
-    
+    map m(&odo, NULL, controlleurPince, VERT, 1);
+    m.Build();
+    m.Execute(1);
+    m.Execute();
     /*drapeau = 0;
     init();