make_rsn.c
Go to the documentation of this file.
00001 
00002 
00003 #include <math.h>
00004 #include <stdio.h>
00005 #include <stdlib.h>
00006 #include <unistd.h>
00007 
00008 #define USAGE \
00009 "USAG: make_motes [-n <number> -p <base port> -f <pnm file>"\
00010 "                  -r <resolution> -s <scale> -i <base index>"\
00011 "                  -o <world_file> -g <swarm geometry>]"
00012 
00013 /************************************************************************/
00014 
00015 typedef struct{
00016   double x;
00017   double y;
00018   double th;
00019 } pos_t;
00020 
00021 pos_t *pos_list;
00022 
00023 int num_nodes = 25;
00024 int base_index = 0;
00025 int base_port = 6660;
00026 float scale = 0.09;
00027 float res   = 0.15;
00028 char shape_name[32] = "random";
00029 char world_filename[32] = "gts.world";
00030 char pnm_filename[32] = "simple.pnm";
00031 
00032 FILE *world_file;
00033 
00034 /************************************************************************/
00035 
00036 void parse_args(int argc, char** argv)
00037 {
00038   int i;
00039 
00040   i=1;
00041   while(i<argc){
00042 
00043     if(!strcmp(argv[i],"-g")){
00044       if(++i<argc){
00045         strcpy(shape_name,argv[i]);
00046       }
00047       else{
00048         puts(USAGE);
00049         exit(1);
00050       }
00051     }
00052     
00053     else if(!strcmp(argv[i],"-o")){
00054       if(++i<argc)
00055         strcpy(world_filename,argv[i]);
00056       else{
00057         puts(USAGE);
00058         exit(1);
00059       }
00060     }
00061 
00062     else if(!strcmp(argv[i],"-n")){
00063       if(++i<argc){
00064         num_nodes = atoi(argv[i]);
00065       }
00066       else{
00067         puts(USAGE);
00068         exit(1);
00069       }
00070     }
00071 
00072     else if(!strcmp(argv[i],"-i")){
00073       if(++i<argc){
00074         base_index = atoi(argv[i]);
00075       }
00076       else{
00077         puts(USAGE);
00078         exit(1);
00079       }
00080     }
00081     
00082     else if(!strcmp(argv[i],"-s")){
00083       if(++i<argc){     
00084         scale = atof(argv[i]);
00085       }
00086       else{
00087         puts(USAGE);
00088         exit(1);
00089       }
00090     }
00091 
00092     else if(!strcmp(argv[i],"-r")){
00093       if(++i<argc){
00094         res = atof(argv[i]);
00095       }
00096       else{
00097         puts(USAGE);
00098         exit(1);
00099       }
00100     }    
00101 
00102     else if(!strcmp(argv[i],"-p")){
00103       if(++i<argc)
00104         base_port = atoi(argv[i]);
00105       else{
00106         puts(USAGE);
00107         exit(1);
00108       }
00109     }
00110     else{
00111       puts(USAGE);
00112       exit(1);
00113     }
00114     i++;
00115   }
00116 }
00117 
00118 /************************************************************************/
00119 
00120 #define X_BASE_OFFSET 15.0
00121 #define Y_BASE_OFFSET 15.0
00122 #define POS_SCALER    3.0
00123 #define DEG_SCALER    3.0
00124 
00125 pos_t *make_wave(void)
00126 {
00127   int i, j, sq_side;
00128   sq_side =(int)sqrt((double)num_nodes); 
00129   
00130   for(j = 0 ; j < sq_side; j++){
00131     for(i = 0 ; i < sq_side; i++){
00132       pos_list[j*sq_side+i].x  = i*POS_SCALER + X_BASE_OFFSET;
00133       pos_list[j*sq_side+i].y  = j*POS_SCALER + Y_BASE_OFFSET; 
00134       pos_list[j*sq_side+i].th = (j*sq_side + i) * DEG_SCALER; 
00135     }
00136   }
00137 
00138   return NULL;
00139 }
00140 
00141 /************************************************************************/
00142 
00143 pos_t *make_random(void)
00144 {
00145   int i, j, sq_side;
00146   sq_side =(int)sqrt((double)num_nodes); 
00147   
00148   srand(time(NULL));
00149   
00150   for(j = 0 ; j < sq_side; j++){
00151     for(i = 0 ; i < sq_side; i++){
00152       pos_list[j*sq_side+i].x  = i*POS_SCALER + X_BASE_OFFSET;
00153       pos_list[j*sq_side+i].y  = j*POS_SCALER + Y_BASE_OFFSET; 
00154       pos_list[j*sq_side+i].th = rand()%360; 
00155     }
00156   }
00157   
00158   return NULL;
00159 }
00160 
00161 /************************************************************************/
00162 
00163 pos_t *make_grid(void)
00164 {
00165   int i, j, sq_side;
00166   sq_side =(int)sqrt((double)num_nodes); 
00167   
00168   for(j = 0 ; j < sq_side; j++){
00169     for(i = 0 ; i < sq_side; i++){
00170       pos_list[j*sq_side+i].x  = i*POS_SCALER + X_BASE_OFFSET;
00171       pos_list[j*sq_side+i].y  = j*POS_SCALER + Y_BASE_OFFSET; 
00172       pos_list[j*sq_side+i].th = 15; 
00173     }
00174   }
00175   
00176   return NULL;
00177 }
00178 
00179 /************************************************************************/
00180 
00181 pos_t *build_pos_list(void)
00182 {
00183   pos_list = (pos_t*)malloc(sizeof(pos_t) * num_nodes);
00184   
00185   if(!strcmp(shape_name, "random")) return make_random();
00186   if(!strcmp(shape_name, "wave")) return make_wave();
00187   if(!strcmp(shape_name, "grid")) return make_grid();
00188   printf("Unknown shape: %s!\n", shape_name);
00189   exit(3);
00190 }
00191 
00192 /************************************************************************/
00193 
00194 int main(int argc, char** argv)
00195 {
00196   int i; 
00197 
00198   parse_args(argc, argv);
00199 
00200   if((world_file = fopen(world_filename, "w")) == NULL){
00201     perror("opening world file");
00202     exit(1);
00203   }
00204   
00205   build_pos_list();
00206 
00207   fprintf(world_file, "begin environment\n"
00208                       "  file %s\n"
00209                       "  resolution %.3f\n"
00210                       "  scale %.3f\n"
00211                       "end\n\n",
00212           pnm_filename, res, scale);
00213   
00214   for(i = 0 ; i < num_nodes; i++){
00215     fprintf(world_file, "begin position_device\n"
00216             "  port %d\n"
00217             "  pose (%.1f %.1f %.1f)\n"
00218             "  begin sonar_device\n"    
00219             "  end\n"   
00220             "  begin mote_device\n"
00221             "    index %d\n"
00222             "  end\n"   
00223             "  begin player_device\n"
00224             "  end\n"
00225             "end\n\n",
00226             i+base_port, pos_list[i].x, pos_list[i].y, 
00227             pos_list[i].th, i+base_index);
00228   }
00229 
00230   printf("wrote world file: %s\n"
00231          "           nodes: %d\n"
00232          "           shape: %s\n"
00233          "       base port: %d\n"
00234          "      base index: %d\n"
00235          "       .pnm file: %s\n"
00236          "      resolution: %.3f\n"
00237          "           scale: %.3f\n",
00238          world_filename, num_nodes, shape_name, 
00239          base_port, base_index, pnm_filename, res, scale);
00240 }


stage
Author(s): Richard Vaughan , Brian Gerkey , Reed Hedges , Andrew Howard , Toby Collett , Pooya Karimian , Jeremy Asher , Alex Couture-Beil , Geoff Biggs , Rich Mattes , Abbas Sadat
autogenerated on Thu Aug 27 2015 15:20:57