Robot's source code

Dependencies:   mbed

Revision:
123:55e5e9acc541
Parent:
122:3d059ad76dd7
--- a/main.cpp	Thu May 07 14:18:07 2015 +0000
+++ b/main.cpp	Mon May 11 20:32:11 2015 +0000
@@ -196,7 +196,7 @@
     // *--------------------------* //
     //     Tirrette + couleur       //
     
-    //while(tirette); // La tirrette
+    while(tirette); // La tirrette
     
     if(couleur == COULEUR_JAUNE)
     {
@@ -204,20 +204,38 @@
         
         odometry.setTheta(PI/2);
         odometry.setX(1000);
-        odometry.setY(400);
+        odometry.setY(177);
+        
+        objectifs.push_back( new Obj_depot(1000, 350, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_PC);
         
-        //objectifs.push_back(new Obj_clap(0, 0, 0, &ax12_brasG,&ax12_brasD));
-        objectifs.push_back( new Obj_pince(1750, 600, 1750, 450, -PI/2, &ax12_pince) );
-        objectifs.back()->setId(IDO_PC1);
+        objectifs.push_back( new Obj_depot(1000, 350+100, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_P);
+        objectifs.push_back( new Obj_depot(1000, 350+2*100, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_P);
+        objectifs.push_back( new Obj_depot(1000, 350+3*100, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_P);
+        objectifs.push_back( new Obj_depot(1100, 330+3*100, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_P);
+        objectifs.push_back( new Obj_depot(900, 330+3*100, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_DEPOT_P);
         
-        objectifs.push_back( new Obj_depot(1000, 400, -PI/2, &ax12_pince) );
-        objectifs.back()->setId(IDO_DEPOT);
+        //objectifs.push_back( new Obj_pince(800, 620, 800, 700, PI/2, &ax12_pince) );
+        //objectifs.back()->setId(IDO_PC1);
+        objectifs.push_back( new Obj_pince(1750, 250+350, 1750, 250+190, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_PC2);
+        objectifs.push_back( new Obj_pince(1750, 90+350, 1750, 90+190, -PI/2, &ax12_pince) );
+        objectifs.back()->setId(IDO_P5);
+        objectifs.push_back( new Obj_pince(1850-247, 90+247, 1850-130, 90+130, -PI/4, &ax12_pince) );
+        objectifs.back()->setId(IDO_P6);
         
-        objectifs.push_back( new Obj_pince(800, 620, 800, 710, PI/2, &ax12_pince) );
-        objectifs.back()->setId(IDO_PC2);
+        
+        objectifs.push_back( new Obj_clap(1750, 192, -PI/4, 1750, 400, PI/2, &ax12_brasG, &ax12_brasD) );
         
-        objectifs.push_back( new Obj_depot(1000, 500, -PI/2, &ax12_pince) );
-        objectifs.back()->setId(IDO_DEPOT);
+        objectifs.push_back( new Obj_pince(1770-247, 1100-247, 1770-135, 1100-135, PI/4, &ax12_pince) );
+        objectifs.back()->setId(IDO_P7);
+        objectifs.push_back( new Obj_pince(1355-247, 870-247, 1355-135, 870-135, PI/4, &ax12_pince) );
+        objectifs.back()->setId(IDO_P4);
     }
     else
     {
@@ -233,32 +251,23 @@
     // *--------------------------* //
     //              IA              //
     
-    /*while(1)
-    {
-        if(logger.readable())
-        {
-            char c = logger.getc();
-            logger.printf("%c",c);
-            if(c == 'a')
-            {
-                motorL.setSpeed(motorL.getSpeed()+0.05);
-                motorR.setSpeed(motorR.getSpeed()+0.05);
-                logger.printf("%.2f\r\n",motorL.getSpeed());
-            }
-            if(c == 'z')
-            {
-                motorL.setSpeed(motorL.getSpeed()-0.05);
-                motorR.setSpeed(motorR.getSpeed()-0.05);
-                logger.printf("%.2f\r\n",motorL.getSpeed());
-            }
-        }
-    }*/
-    
     #define IA
     #ifdef IA
     
     while(continuer)
     {
+        if(terrain.getHeight(odometry.getX(), odometry.getY()) >= 32000)
+        {
+            logger.printf("Collision, echappement.....");
+            
+            // Réduction de la taille des obstacles
+            for(unsigned int i=0;i < terrain.obstacles.size();i++)
+                while(terrain.obstacles[i]->height(odometry.getX(), odometry.getY()) >= 32000)
+                    terrain.obstacles[i]->setRobotRadius(terrain.obstacles[i]->getRobotRadius()-1);
+            
+            logger.printf("[done]\r\n");
+        }
+        
         logger.printf("Recherche d'objectif.......");
         int objAct = 0;
         bool newObj = false;
@@ -272,8 +281,6 @@
             if(retourAStar == 1) // L'objectif est atteignable !!
             {
                 newObj = true;
-                for(unsigned int i=0;i<terrain.path.size();i++)
-                    logger.printf("%d : %.3f %.3f\r\n",i,terrain.path[i].x,terrain.path[i].y);
                 break;
             }
             
@@ -298,19 +305,23 @@
         
         logger.printf("[done]\r\n");
         
+        // On remet la taille des obstacles
+        for(unsigned int i=0;i < terrain.obstacles.size();i++)
+            terrain.obstacles[i]->setRobotRadius(ROBOTRADIUS);
+        
         if(newObj)
         {
             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);
+                logger.printf("Prochain point : %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);
                 while(!asserv.isArrived())wait(0.1);
             }
+            logger.printf("Dernier point : %.3f\t%.3f\r\n",objectifs[objAct]->getX(),objectifs[objAct]->getY(),objectifs[objAct]->getTheta()*180/PI);
             asserv.setGoal(objectifs[objAct]->getX(),objectifs[objAct]->getY(),objectifs[objAct]->getTheta());
             while(!asserv.isArrived())wait(0.1);
             
@@ -324,8 +335,22 @@
         }
         else
         {
-            logger.printf("-> Nothind to be done ... :( \r\n");
+            logger.printf("-> Nothind to be done ... :D \r\n");
+            
+            ax12_brasG.setMaxTorque(MAX_TORQUE);
+            ax12_brasD.setMaxTorque(MAX_TORQUE);
+            
+            ax12_brasG.setGoal(130);
+            ax12_brasD.setGoal(BRASD_FERME);
             wait(1);
+            ax12_brasG.setGoal(BRASG_FERME);
+            ax12_brasD.setGoal(215);
+            wait(1);
+            ax12_brasD.setGoal(BRASD_FERME);
+            wait(1);
+            
+            ax12_brasG.setMaxTorque(0);
+            ax12_brasD.setMaxTorque(0);
         }
     }
     
@@ -394,31 +419,31 @@
         asserv.setGoal(1,5);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(1,10);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(1,15);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(1,20);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(1,25);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(1,30);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         asserv.setGoal(0,0,PI/2);
         logger.printf("Attente\r\n");
         while(!asserv.isArrived())wait(0.1);
-        logger.printf("Arrivé\r\n");
+        logger.printf("Arrive\r\n");
         while(1);
         /*logger.printf("Arrivé\r\n");
         wait(1);