]> rtime.felk.cvut.cz Git - eurobot/public.git/blobdiff - src/pathplan/test/testastar.c
src: raw code a changes
[eurobot/public.git] / src / pathplan / test / testastar.c
index afebeab72213ed1405f6c31de640580640f06cbb..a9300bd487f954b344838f788835fefc8b1b82e4 100644 (file)
@@ -7,9 +7,17 @@
 #include <sys/time.h>
 #include <math.h>
 #include <shist.h>
+#include "aalgorithm.h"
 
 #define OBST_COUNT 4
+#define NBR_OF_TESTS 2
+#define DBG_PNG
 
+#ifdef DBG_PNG
+#include "map_2_png.h"
+#endif
+
+// print map to console
 void print_map(char *label)
 {
        int x, y;
@@ -63,20 +71,23 @@ void randomize_obstacles(bool first)
 /*                 printf("Obst%d (%5.2f,%5.2f) w=%5.2f  h=%5.2f\n", i, x, y, w, h); */
                 ShmapSetRectangleFlag(o[i].x1, o[i].y1, o[i].x2, o[i].y2, MAP_FLAG_WALL, 0);
         }
-       print_map("Obstacles:");
+       //print_map("Obstacles:");
 }
 
 void set_fix_obstacle(double x1,double y1,double x2,double y2){
-  ShmapSetRectangleFlag(x1, x2, y1, y2, MAP_FLAG_WALL, 0);
+  ShmapSetRectangleFlag(x1, y1, x2, y2, MAP_FLAG_WALL, 0);
 }    
 
 int main(int argc, char *argv[])
 {
-       double startx, starty, goalx, goaly, angle;
+       double startx_real, starty_real, goalx_real, goaly_real, angle = 0;
+       int startx = 0, starty = 0, goalx = 0, goaly = 0;
        PathPoint * path;
        int i, val;
        FILE * data =NULL;
-
+       
+       init_aalgorithm();
+       
        srand(time(0));
        
        /* histogram parameters */
@@ -92,43 +103,92 @@ int main(int argc, char *argv[])
        }
        
        // Init Shared Map Memory
-       ShmapInit(1);
-       
+       struct map *map;
+       map = ShmapInit(1);
+               
        // Create some obstacles
-       ShmapSetRectangleFlag(0.0, 0.0, 0.1, 2.1, MAP_FLAG_WALL, 0);
-       ShmapSetRectangleFlag(0.0, 0.0, 3.0, 0.1, MAP_FLAG_WALL, 0);
-       ShmapSetRectangleFlag(0.0, 2.0, 3.0, 2.1, MAP_FLAG_WALL, 0);
-       ShmapSetRectangleFlag(2.9, 0.0, 3.0, 2.1, MAP_FLAG_WALL, 0);
+       ShmapSetRectangleFlag(1.0, 0.0, 1.05, 1.45, MAP_FLAG_WALL, 0);
+       ShmapSetRectangleFlag(1.55, 0.65, 1.60, 2.1, MAP_FLAG_WALL, 0);
        
-//     set_fix_obstacle(0.3, 0.3, 0.8, 0.8);
-//     set_fix_obstacle(1.7, 0.5, 2.2, 1.2);
-//     set_fix_obstacle(1.1, 1.1, 1.3, 1.33);
+       // Add safety margin manualy, remove add_safety_margin (path_planer.c)
+//     ShmapSetRectangleFlag(0.0, 0.0, 0.99, 0.27, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.08, 0.0, 3.0, 0.27, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.0, 0.0, 0.27, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.0, 1.87, 1.54, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.63, 1.87, 3.0, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(2.73, 0.0, 3.0, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     
+//     
+//     
+//     ShmapSetRectangleFlag(0.73, 0.0, 0.99, 1.45, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.08, 0.0, 1.33, 1.45, MAP_FLAG_PLAN_MARGIN, 0);
+//     
+//     ShmapSetRectangleFlag(0.94, 1.66, 1.14, 1.66, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.91, 1.63, 1.16, 1.63, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.88, 1.61, 1.19, 1.61, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.85, 1.59, 1.21, 1.59, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.83, 1.56, 1.23, 1.56, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.81, 1.53, 1.26, 1.53, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.79, 1.51, 1.29, 1.51, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.76, 1.49, 1.31, 1.49, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(0.73, 1.47, 1.33, 1.47, MAP_FLAG_PLAN_MARGIN, 0);
+//     
+//     ShmapSetRectangleFlag(1.55, 0.65, 1.60, 2.1, MAP_FLAG_WALL, 0);
+//     
+//     ShmapSetRectangleFlag(1.28, 0.65, 1.54, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.63, 0.65, 1.89, 2.1, MAP_FLAG_PLAN_MARGIN, 0);
+//     
+//     ShmapSetRectangleFlag(1.28, 0.63, 1.89, 0.63, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.31, 0.61, 1.86, 0.61, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.33, 0.59, 1.83, 0.59, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.36, 0.56, 1.81, 0.56, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.39, 0.53, 1.79, 0.53, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.41, 0.51, 1.76, 0.51, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.43, 0.49, 1.73, 0.49, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.46, 0.46, 1.71, 0.46, MAP_FLAG_PLAN_MARGIN, 0);
+//     ShmapSetRectangleFlag(1.49, 0.43, 1.69, 0.43, MAP_FLAG_PLAN_MARGIN, 0);
+       
+
        randomize_obstacles(true);
+       // start point
         do {
-                startx = (rand()%(MAP_PLAYGROUND_WIDTH_MM-50)+25)/1000.0;
-                starty = ((rand()%(MAP_PLAYGROUND_HEIGHT_MM-50)+25)/1000.0);
-        } while (!ShmapIsFreePoint(startx, starty));
+                startx_real = (rand()%(MAP_PLAYGROUND_WIDTH_MM-50)+25)/1000.0;
+                starty_real = ((rand()%(MAP_PLAYGROUND_HEIGHT_MM-50)+25)/1000.0);
+        } while (!ShmapIsFreePoint(startx_real, starty_real));
         
+       
+       
        /* Main boucle */
-       for(i=1; i<2; i++){
-                if (i%100 == 0) {
-                        randomize_obstacles(false);
-                }
+       for(i=1; i < NBR_OF_TESTS; i++){
+//                 if (i%100 == 0) {
+//                          randomize_obstacles(false);
+//                  }
+               
+               // goal point
                do {
-                       goalx = (rand()%(MAP_PLAYGROUND_WIDTH_MM-50)+25)/1000.0;
-                       goaly = ((rand()%(MAP_PLAYGROUND_HEIGHT_MM-50)+25)/1000.0);
-               } while (!ShmapIsFreePoint(goalx, goaly));
+                       goalx_real = (rand()%(MAP_PLAYGROUND_WIDTH_MM-50)+25)/1000.0;
+                       goaly_real = ((rand()%(MAP_PLAYGROUND_HEIGHT_MM-50)+25)/1000.0);
+               } while (!ShmapIsFreePoint(goalx_real, goaly_real));
                
-//             startx=0.2;
-//             starty=0,6;
-//             goalx=1.8;
-//             goaly=1.8;
-
-               val = path_planner(startx, starty, goalx, goaly , &path, &angle, &angle);
+               // or start and goal point manualy
+//             startx_real=0.4;
+//             starty_real=0.6;
+//             goalx_real=2.6;
+//             goaly_real=1.2;
+               
+               // for png picture in every step
+               bool valid;
+               ShmapPoint2Cell(startx_real, starty_real, &startx, &starty, &valid);
+               ShmapSetCellFlag(startx, starty, MAP_FLAG_START);
+               
+               ShmapPoint2Cell(goalx_real, goaly_real, &goalx, &goaly, &valid);
+               ShmapSetCellFlag(goalx, goaly, MAP_FLAG_GOAL);
+               
+               val = path_planner(startx_real, starty_real, goalx_real, goaly_real , &path, &angle, &angle);
 
-               print_map("Found path:"); 
+               //print_map("Found path:"); 
                
-               startx=goalx;starty=goaly;
+               startx_real=goalx_real;starty_real=goaly_real;
        }
        
        //Close File
@@ -141,8 +201,30 @@ int main(int argc, char *argv[])
                        return 1;
                }
        }
-       // Free Memory
-       //ShmapFree();
+
+#ifdef DBG_PNG
+       // final png picture, founded path
+       bool valid;
+       ShmapPoint2Cell(startx_real, starty_real, &startx, &starty, &valid);
+       ShmapSetCellFlag(startx, starty, MAP_FLAG_START);
+       
+       ShmapPoint2Cell(goalx_real, goaly_real, &goalx, &goaly, &valid);
+       ShmapSetCellFlag(goalx, goaly, MAP_FLAG_GOAL);
+       
+       char file_name[50];
+       sprintf(file_name,"testastar_%s.png",__TIME__);
+                        
+       if(!map_2_png(map, file_name)) {
+               printf("PATHPLAN: aAlgorithm : PNG file sucessfull created");
+       }
+       else {
+               printf("PATHPLAN: aAlgorithm : PNG file not created!");
+       }
+#endif
+       // Free Memory  
+       freemem_aalgorithm();   
+       ShmapFree();
+       
        return 0;
 }