cuikcctrrt.c
Go to the documentation of this file.
1 
2 #include "world.h"
3 #include "parameters.h"
4 
5 #include "defines.h"
6 #include "error.h"
7 #include "filename.h"
8 #include "rrt.h"
9 #include "random.h"
10 #include "geom.h"
11 #include "samples.h"
12 #include "averages.h"
13 
14 #include <stdlib.h>
15 #include <string.h>
16 #include <time.h>
17 
85 int main(int argc, char **arg)
86 {
87  TAtlasBase world; /* The set of mechanism and obstacles. */
88  Tparameters parameters; /* Parameters used in the Cuik process. */
89 
90  Tfilename fparam;
91 
92  double *s1,*s2; /* Origin/goal of the RRT. */
93 
94  unsigned int nvs;
95 
96  Trrt rrt;
97 
98  boolean connected;
99  double pl, pc;
100  unsigned int ns;
101  double **path;
102 
103  double planningTime;
104 
105  unsigned int it,nRepetitions;
106  Taverages averages;
107 
108  unsigned int ri;
109  time_t t;
110 
111  TRRTStatistics *rst;
112 
113  if (argc>1)
114  {
115  if (argc>2)
116  {
117  nRepetitions=atoi(arg[2]);
118  if (nRepetitions==0)
119  Error("Second parameter for cuikcctrrt is wrong");
120  }
121  else
122  nRepetitions=1;
123 
124  if ((nRepetitions>1)&&((RRT_VERBOSE)||(GET_RRT_STATISTICS)))
125  Warning("To get accurate execution time statistics, set RRT_VERBOSE and GET_RRT_STATISTICS to 0");
126 
127  if ((GET_RRT_STATISTICS)&&(nRepetitions>1))
128  {
129  NEW(rst,1,TRRTStatistics);
130  InitRRTStatistics(rst);
131  }
132  else
133  rst=NULL;
134 
135  /*Init parameters*/
136  CreateFileName(NULL,arg[1],NULL,PARAM_EXT,&fparam);
137  fprintf(stderr,"Reading parameters from : %s\n",GetFileFullName(&fparam));
138  InitParametersFromFile(GetFileFullName(&fparam),&parameters);
139 
140  /*Read the world from file*/
141  CS_WD_INIT(&parameters,arg[1],&world);
142 
143  /* Read samples */
144  #if (EXPLORATION_RRT)
145  nvs=ReadOneSample(&parameters,arg[1],CS_WD_GET_NUM_SYSTEM_VARS(&world),&s1);
146  NEW(s2,nvs,double);
147  memcpy(s2,s1,sizeof(double)*nvs);
148  #else
149  nvs=ReadTwoSamples(&parameters,arg[1],CS_WD_GET_NUM_SYSTEM_VARS(&world),&s1,&s2);
150  #endif
151 
152  /* Random seed initialization */
153  t=time(NULL); /* Get the time at which input files have been read */
154  ri=(unsigned int)t;
155  randomSet(ri);
156  fprintf(stderr,"Random seed : %u\n",ri);
157 
158  /* Start the process to connect the two samples */
159  InitAverages(nRepetitions,FALSE,TRUE,NO_UINT,&averages);
160 
161  for(it=0;it<nRepetitions;it++)
162  {
163  /* Init a one-directional RRT */
164  InitRRT(&parameters,FALSE,FALSE,s1,ONE_TREE,FALSE,s2,nvs,&world,&rrt);
165  fprintf(stderr,"************************************************\n");
166 
167  /* Try to connect the goal with a tree from the start */
168  connected=ccTRRT(&parameters,s2,
169  &planningTime,
170  &pl,&pc,&ns,&path,CS_WD_COST_FN(&world),
171  CS_WD_COST_PTR(&world),rst,&rrt);
172 
173  /* Save the results (only if one shot execution) */
174  if (nRepetitions==1)
175  {
176  Tfilename frrt;
177 
178  #if (!EXPLORATION_RRT)
179  if (connected)
180  SaveSamples(arg[1],FALSE,nvs,ns,path);
181  #endif
182 
183  CreateFileName(NULL,arg[1],NULL,RRT_EXT,&frrt);
184  fprintf(stderr,"Writing RRT to : %s\n",GetFileFullName(&frrt));
185  SaveRRT(&frrt,&rrt);
186  DeleteFileName(&frrt);
187  }
188 
189  /* Summarize and release allocated objects for this repetition*/
190  if ((EXPLORATION_RRT)||(connected))
191  {
192  NewSuccesfulExperiment(planningTime,RRTMemSize(&rrt),pl,pc,
193  NO_UINT,
194  (double)GetRRTNumNodes(&rrt),
195  NULL,NULL,
196  &averages);
197  DeleteSamples(ns,path);
198  }
199  else
200  fprintf(stderr," Execution failed (%f sec)\n",planningTime);
201 
202  DeleteRRT(&rrt);
203 
204  fprintf(stderr,"Execution compleated %u/%u\n",it+1,nRepetitions);
205  }
206 
207  /* Print statistics about the execution (only if many iterations) */
208  if (nRepetitions>1)
209  {
210  PrintAveragesHeader(stderr,argc,arg,&averages);
211 
212  fprintf(stderr,"%% **************************************************\n");
213  fprintf(stderr,"Random seed : %u\n",ri);
214  PrintParameters(stderr,&parameters);
215 
216  #if (GET_RRT_STATISTICS)
217  PrintRRTStatistics(NULL,rst);
218  DeleteRRTStatistics(rst);
219  free(rst);
220  #endif
221 
222  PrintAverages(stderr,&averages);
223 
224  fprintf(stderr,"%% **************************************************\n");
225  }
226 
227  /* Release memory */
228  DeleteAverages(&averages);
229 
230  free(s1);
231  free(s2);
232 
233  DeleteParameters(&parameters);
234 
235  CS_WD_DELETE(&world);
236 
237  DeleteFileName(&fparam);
238  }
239  else
240  {
241  fprintf(stderr," Wrong number of parameters.\n");
242  fprintf(stderr," Use:\n");
243  fprintf(stderr," cuikcctrrt <problem filename>.%s [num Repetitions]\n",CS_WD_EXT);
244  fprintf(stderr," where <problem filename> the equations/world description\n");
245  fprintf(stderr," <num Repetitions> experiment repetitions to gather statistics\n");
246  fprintf(stderr," This is optional.\n");
247  fprintf(stderr," (the '.%s' extension is not required)\n",CS_WD_EXT);
248  }
249  return(EXIT_SUCCESS);
250 }
251 
Statistics on the RRT construction.
Definition: rrt.h:201
Definition of basic functions.
#define FALSE
FALSE.
Definition: boolean.h:30
void PrintParameters(FILE *f, Tparameters *p)
Prints a parameter set.
Definition: parameters.c:181
void DeleteRRT(Trrt *rrt)
Destructor.
Definition: rrt.c:4201
#define NEW(_var, _n, _type)
Allocates memory space.
Definition: defines.h:385
Data structure to hold the information about the name of a file.
Definition: filename.h:271
#define RRT_EXT
File extension for files storing rrt's.
Definition: filename.h:213
boolean ccTRRT(Tparameters *pr, double *pg, double *time, double *pl, double *pc, unsigned int *ns, double ***path, double(*costF)(Tparameters *, boolean, double *, void *), void *costData, TRRTStatistics *grst, Trrt *rrt)
Extends a T-RRT until we reach a targed point.
Definition: rrt.c:2822
void NewSuccesfulExperiment(double t, unsigned int mem, double pl, double pc, unsigned int nc, unsigned int ns, double *time, double *cost, Taverages *av)
Adds data of a new experiment.
Definition: averages.c:75
#define RRT_VERBOSE
Vebosity of the RRT operations.
Definition: rrt.h:32
#define CS_WD_COST_FN(wcs)
Cost function for a given configution.
Definition: wcs.h:418
void DeleteRRTStatistics(TRRTStatistics *rst)
Destructor.
Definition: rrt.c:499
void InitRRT(Tparameters *pr, boolean parallel, boolean simp, double *ps, unsigned int mode, boolean graph, double *pg, unsigned int m, TAtlasBase *w, Trrt *rrt)
Defines a RRT from a given point.
Definition: rrt.c:1203
Definition of the Tfilename type and the associated functions.
#define ONE_TREE
One of the modes for the RRT.
Definition: rrt.h:132
#define TRUE
TRUE.
Definition: boolean.h:21
void Error(const char *s)
General error function.
Definition: error.c:80
#define PARAM_EXT
File extension for parameter files.
Definition: filename.h:132
A RRT on a manifold.
Definition: rrt.h:322
#define CS_WD_DELETE(wcs)
Destructor of the equation structure.
Definition: wcs.h:592
unsigned int RRTMemSize(Trrt *rrt)
Memory used by a given RRT.
Definition: rrt.c:3973
void SaveSamples(char *fname, char *suffix, unsigned int nvs, unsigned int ns, double **path)
Saves a set of samples to a file.
Definition: samples.c:2879
#define CS_WD_COST_PTR(wcs)
Pointer to the base type.
Definition: wcs.h:408
Definition of the Tworld type and the associated functions.
Definition of a rrt on a manifold.
Error and warning functions.
void DeleteFileName(Tfilename *fn)
Destructor.
Definition: filename.c:205
int main(int argc, char **arg)
Main body of the cuikcctrrt application.
Definition: cuikcctrrt.c:85
void PrintAverages(FILE *f, Taverages *av)
Prints the averages of a set of experiments.
Definition: averages.c:170
void PrintAveragesHeader(FILE *f, int argc, char **arg, Taverages *av)
Prints a header to the averages results.
Definition: averages.c:149
void InitRRTStatistics(TRRTStatistics *rst)
Init the RRT statistics.
Definition: rrt.c:195
unsigned int ReadTwoSamples(Tparameters *p, char *fname, unsigned int nvs, double **s1, double **s2)
Reads two samples from a file.
Definition: samples.c:2803
Definitions of constants and macros used in several parts of the cuik library.
Auxiliary functions to deal averages of path planner executions.
void Warning(const char *s)
General warning function.
Definition: error.c:116
A table of parameters.
void CreateFileName(char *path, char *name, char *suffix, char *ext, Tfilename *fn)
Constructor.
Definition: filename.c:22
void InitParametersFromFile(char *file, Tparameters *p)
Constructor from a file.
Definition: parameters.c:51
Type defining the equations on which the atlas is defined.
Definition: wcs.h:30
char * GetFileFullName(Tfilename *fn)
Gets the file full name (paht+name+extension).
Definition: filename.c:151
#define EXPLORATION_RRT
Select between exploration and goal driven RRT.
Definition: rrt.h:98
#define NO_UINT
Used to denote an identifier that has not been initialized.
Definition: defines.h:435
void SaveRRT(Tfilename *fname, Trrt *rrt)
Stores the RRT information on a file.
Definition: rrt.c:3990
#define CS_WD_EXT
Possible extensions for the equation files.
Definition: wcs.h:48
void DeleteParameters(Tparameters *p)
Destructor.
Definition: parameters.c:294
#define CS_WD_INIT(pr, name, wcs)
Initializes the equations from a file.
Definition: wcs.h:89
Structure to store expeeriment results.
Definition: averages.h:32
unsigned int GetRRTNumNodes(Trrt *rrt)
Number of nodes in the RRT.
Definition: rrt.c:3526
#define GET_RRT_STATISTICS
Set this to one to gather statistics of RRT construction.
Definition: rrt.h:41
#define CS_WD_GET_NUM_SYSTEM_VARS(wcs)
Gets the number of system variables.
Definition: wcs.h:264
Auxiliary functions to deal with sets of samples.
Definition of basic randomization functions.
void DeleteAverages(Taverages *av)
Deletes the space used by a set of averages.
Definition: averages.c:263
void DeleteSamples(unsigned int ns, double **path)
Deletes the space used by a set of samples.
Definition: samples.c:3159
void PrintRRTStatistics(Trrt *rrt, TRRTStatistics *rst)
Prints the summary of RRT statistics.
Definition: rrt.c:352
Definition of the Tparameters type and the associated functions.
void InitAverages(unsigned int m, boolean useCharts, boolean useSamples, unsigned int maxIt, Taverages *av)
Initializes a set of averages.
Definition: averages.c:21
unsigned int ReadOneSample(Tparameters *p, char *fname, unsigned int nvs, double **s)
Reads one sample from a file.
Definition: samples.c:2772
void randomSet(unsigned int seed)
Sets the random seed.
Definition: random.c:25