Robot's source code

Dependencies:   mbed

Revision:
118:09bfc62d4867
Parent:
116:73d7d87e0299
Parent:
117:f8c147141a0c
Child:
119:c45efcd706d9
diff -r 73d7d87e0299 -r 09bfc62d4867 main.cpp
--- a/main.cpp	Wed May 06 11:14:02 2015 +0000
+++ b/main.cpp	Wed May 06 11:23:08 2015 +0000
@@ -7,6 +7,8 @@
 
 #include "Objectif.h"
 #include "Obj_clap.h"
+#include "Obj_pince.h"
+#include "Obj_depot.h"
 
 
 #include "AX12.h"
@@ -199,7 +201,17 @@
     if(couleur == COULEUR_JAUNE)
     {
         couleurRobot = COULEUR_JAUNE;
-        objectifs.push_back(new Obj_clap(0, 0, 0, &asserv, &ax12_brasG,&ax12_brasD));
+        
+        odometry.setTheta(PI/2);
+        odometry.setX(1000);
+        odometry.setY(400);
+        
+        //objectifs.push_back(new Obj_clap(0, 0, 0, &ax12_brasG,&ax12_brasD));
+        objectifs.push_back( new Obj_pince(1750, 550, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_PC1);
+        
+        objectifs.push_back( new Obj_depot(1000, 500, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT);
     }
     else
     {
@@ -242,27 +254,46 @@
     
     while(continuer)
     {
+        logger.printf("Recherche d'objectif.......");
         int objAct = 0;
         bool newObj = false;
         for(objAct = 0 ; objAct < objectifs.size() ; objAct++)
         {
+            //logger.printf("Obj %d\r\n",objAct);
             if(objectifs[objAct]->isDone()) // Pas la peine de le faire, il est déjà fait ;)
                 continue;
-                
-            if(objectifs[objAct]->isActive()) // Pas la peine de le faire, il n'est pas actif
+            //logger.printf("Pas done\r\n"); 
+            if(!objectifs[objAct]->isActive()) // Pas la peine de le faire, il n'est pas actif
                 continue;
+            //logger.printf("Actif\r\n");
+            int retourAStar = terrain.AStar(odometry.getX(), odometry.getY(), objectifs[objAct]->getX(), objectifs[objAct]->getX(), 5);
+            if(retourAStar == 1) // L'objectif est atteignable !!
+            {
+                newObj = true;
+                break;
+            }
             
-            if(terrain.AStar(odometry.getX(), odometry.getY(), objectifs[objAct]->getX(), objectifs[objAct]->getX(), 0.05) != 1) // L'objectif est atteignable !!
+            if(retourAStar == 3) // Overload memoire
+            {
+                retourAStar = terrain.AStar(odometry.getX(), odometry.getY(), objectifs[objAct]->getX(), objectifs[objAct]->getX(), 50);
+            }
+            
+            if(retourAStar == 1) // L'objectif est atteignable !!
             {
                 newObj = true;
                 break;
             }
         }
         
+        logger.printf("[done]\r\n");
+        
         if(newObj)
         {
-            /* Déplacement vers le nouvel objectif */
-            for(i=0;i<terrain.path.size()-1;i++)
+            
+            logger.printf("-> Objectif : %d\r\n",objectifs[objAct]->getId());
+            
+            // Déplacement vers le nouvel objectif //
+            for(int i=1;i<terrain.path.size()-1;i++)
             {
                 logger.printf("%d\t%.3f\t%.3f\r\n",i,terrain.path[i].x,terrain.path[i].y);
                 asserv.setGoal(terrain.path[i].x,terrain.path[i].y);
@@ -271,11 +302,14 @@
             asserv.setGoal(objectifs[objAct]->getX(),objectifs[objAct]->getY(),objectifs[objAct]->getTheta());
             while(!asserv.isArrived())wait(0.1);
             
+            logger.printf("Execution de l'objectif....");
+            // Exection de l'objectif //
             objectifs[objAct]->run();
+            logger.printf("[done]\r\n");
         }
         else
         {
-            logger.printf("Nothind to be done ... :( \r\n");
+            logger.printf("-> Nothind to be done ... :( \r\n");
             wait(1);
         }
     }