make_rsn.c
Go to the documentation of this file.
1 
2 
3 #include <math.h>
4 #include <stdio.h>
5 #include <stdlib.h>
6 #include <unistd.h>
7 
8 #define USAGE \
9 "USAG: make_motes [-n <number> -p <base port> -f <pnm file>"\
10 " -r <resolution> -s <scale> -i <base index>"\
11 " -o <world_file> -g <swarm geometry>]"
12 
13 /************************************************************************/
14 
15 typedef struct{
16  double x;
17  double y;
18  double th;
19 } pos_t;
20 
22 
23 int num_nodes = 25;
24 int base_index = 0;
25 int base_port = 6660;
26 float scale = 0.09;
27 float res = 0.15;
28 char shape_name[32] = "random";
29 char world_filename[32] = "gts.world";
30 char pnm_filename[32] = "simple.pnm";
31 
32 FILE *world_file;
33 
34 /************************************************************************/
35 
36 void parse_args(int argc, char** argv)
37 {
38  int i;
39 
40  i=1;
41  while(i<argc){
42 
43  if(!strcmp(argv[i],"-g")){
44  if(++i<argc){
45  strcpy(shape_name,argv[i]);
46  }
47  else{
48  puts(USAGE);
49  exit(1);
50  }
51  }
52 
53  else if(!strcmp(argv[i],"-o")){
54  if(++i<argc)
55  strcpy(world_filename,argv[i]);
56  else{
57  puts(USAGE);
58  exit(1);
59  }
60  }
61 
62  else if(!strcmp(argv[i],"-n")){
63  if(++i<argc){
64  num_nodes = atoi(argv[i]);
65  }
66  else{
67  puts(USAGE);
68  exit(1);
69  }
70  }
71 
72  else if(!strcmp(argv[i],"-i")){
73  if(++i<argc){
74  base_index = atoi(argv[i]);
75  }
76  else{
77  puts(USAGE);
78  exit(1);
79  }
80  }
81 
82  else if(!strcmp(argv[i],"-s")){
83  if(++i<argc){
84  scale = atof(argv[i]);
85  }
86  else{
87  puts(USAGE);
88  exit(1);
89  }
90  }
91 
92  else if(!strcmp(argv[i],"-r")){
93  if(++i<argc){
94  res = atof(argv[i]);
95  }
96  else{
97  puts(USAGE);
98  exit(1);
99  }
100  }
101 
102  else if(!strcmp(argv[i],"-p")){
103  if(++i<argc)
104  base_port = atoi(argv[i]);
105  else{
106  puts(USAGE);
107  exit(1);
108  }
109  }
110  else{
111  puts(USAGE);
112  exit(1);
113  }
114  i++;
115  }
116 }
117 
118 /************************************************************************/
119 
120 #define X_BASE_OFFSET 15.0
121 #define Y_BASE_OFFSET 15.0
122 #define POS_SCALER 3.0
123 #define DEG_SCALER 3.0
124 
126 {
127  int i, j, sq_side;
128  sq_side =(int)sqrt((double)num_nodes);
129 
130  for(j = 0 ; j < sq_side; j++){
131  for(i = 0 ; i < sq_side; i++){
132  pos_list[j*sq_side+i].x = i*POS_SCALER + X_BASE_OFFSET;
133  pos_list[j*sq_side+i].y = j*POS_SCALER + Y_BASE_OFFSET;
134  pos_list[j*sq_side+i].th = (j*sq_side + i) * DEG_SCALER;
135  }
136  }
137 
138  return NULL;
139 }
140 
141 /************************************************************************/
142 
144 {
145  int i, j, sq_side;
146  sq_side =(int)sqrt((double)num_nodes);
147 
148  srand(time(NULL));
149 
150  for(j = 0 ; j < sq_side; j++){
151  for(i = 0 ; i < sq_side; i++){
152  pos_list[j*sq_side+i].x = i*POS_SCALER + X_BASE_OFFSET;
153  pos_list[j*sq_side+i].y = j*POS_SCALER + Y_BASE_OFFSET;
154  pos_list[j*sq_side+i].th = rand()%360;
155  }
156  }
157 
158  return NULL;
159 }
160 
161 /************************************************************************/
162 
164 {
165  int i, j, sq_side;
166  sq_side =(int)sqrt((double)num_nodes);
167 
168  for(j = 0 ; j < sq_side; j++){
169  for(i = 0 ; i < sq_side; i++){
170  pos_list[j*sq_side+i].x = i*POS_SCALER + X_BASE_OFFSET;
171  pos_list[j*sq_side+i].y = j*POS_SCALER + Y_BASE_OFFSET;
172  pos_list[j*sq_side+i].th = 15;
173  }
174  }
175 
176  return NULL;
177 }
178 
179 /************************************************************************/
180 
182 {
183  pos_list = (pos_t*)malloc(sizeof(pos_t) * num_nodes);
184 
185  if(!strcmp(shape_name, "random")) return make_random();
186  if(!strcmp(shape_name, "wave")) return make_wave();
187  if(!strcmp(shape_name, "grid")) return make_grid();
188  printf("Unknown shape: %s!\n", shape_name);
189  exit(3);
190 }
191 
192 /************************************************************************/
193 
194 int main(int argc, char** argv)
195 {
196  int i;
197 
198  parse_args(argc, argv);
199 
200  if((world_file = fopen(world_filename, "w")) == NULL){
201  perror("opening world file");
202  exit(1);
203  }
204 
205  build_pos_list();
206 
207  fprintf(world_file, "begin environment\n"
208  " file %s\n"
209  " resolution %.3f\n"
210  " scale %.3f\n"
211  "end\n\n",
213 
214  for(i = 0 ; i < num_nodes; i++){
215  fprintf(world_file, "begin position_device\n"
216  " port %d\n"
217  " pose (%.1f %.1f %.1f)\n"
218  " begin sonar_device\n"
219  " end\n"
220  " begin mote_device\n"
221  " index %d\n"
222  " end\n"
223  " begin player_device\n"
224  " end\n"
225  "end\n\n",
226  i+base_port, pos_list[i].x, pos_list[i].y,
227  pos_list[i].th, i+base_index);
228  }
229 
230  printf("wrote world file: %s\n"
231  " nodes: %d\n"
232  " shape: %s\n"
233  " base port: %d\n"
234  " base index: %d\n"
235  " .pnm file: %s\n"
236  " resolution: %.3f\n"
237  " scale: %.3f\n",
238  world_filename, num_nodes, shape_name,
240 }
#define X_BASE_OFFSET
Definition: make_rsn.c:120
pos_t * make_random(void)
Definition: make_rsn.c:143
float scale
Definition: make_rsn.c:26
int base_port
Definition: make_rsn.c:25
float res
Definition: make_rsn.c:27
char pnm_filename[32]
Definition: make_rsn.c:30
char world_filename[32]
Definition: make_rsn.c:29
double x
Definition: make_rsn.c:16
#define USAGE
Definition: make_rsn.c:8
int base_index
Definition: make_rsn.c:24
FILE * world_file
Definition: make_rsn.c:32
double th
Definition: make_rsn.c:18
pos_t * make_wave(void)
Definition: make_rsn.c:125
#define POS_SCALER
Definition: make_rsn.c:122
#define DEG_SCALER
Definition: make_rsn.c:123
pos_t * build_pos_list(void)
Definition: make_rsn.c:181
static int argc
int num_nodes
Definition: make_rsn.c:23
double y
Definition: make_rsn.c:17
char shape_name[32]
Definition: make_rsn.c:28
static char * argv
int main(int argc, char **argv)
Definition: make_rsn.c:194
pos_t * pos_list
Definition: make_rsn.c:21
pos_t * make_grid(void)
Definition: make_rsn.c:163
Definition: make_rsn.c:15
void parse_args(int argc, char **argv)
Definition: make_rsn.c:36
#define Y_BASE_OFFSET
Definition: make_rsn.c:121


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 Mon Jun 10 2019 15:06:09