src/smp/planners/base.h

Go to the documentation of this file.
00001 
00015 // TODO: add a flag to indicate whether the planner is initialized properly
00016 
00017 
00018 #ifndef _SMP_PLANNER_BASE_H_
00019 #define _SMP_PLANNER_BASE_H_
00020 
00021 #include <smp/planner_utils/vertex_edge.h>
00022 #include <smp/planner_utils/trajectory.h>
00023 
00024 #include <smp/components/extenders/base.h>
00025 #include <smp/components/samplers/base.h>
00026 #include <smp/components/collision_checkers/base.h>
00027 #include <smp/components/distance_evaluators/base.h>
00028 #include <smp/components/model_checkers/base.h>
00029 
00030 #include <iostream>
00031 #include <list>
00032 
00033 using namespace std;
00034 
00036 namespace smp {
00037 
00039 
00050     template< class typeparams >
00051     class planner {
00052 
00053         typedef typename typeparams::state state_t;
00054         typedef typename typeparams::input input_t;
00055         typedef typename typeparams::vertex_data vertex_data_t;
00056         typedef typename typeparams::edge_data edge_data_t;
00057     
00058         typedef vertex<typeparams> vertex_t;
00059         typedef edge<typeparams> edge_t;
00060 
00061         typedef trajectory<typeparams> trajectory_t;
00062 
00063         typedef sampler_base<typeparams> sampler_t;
00064         typedef distance_evaluator_base<typeparams> distance_evaluator_t;
00065         typedef extender_base<typeparams> extender_t;
00066         typedef collision_checker_base<typeparams> collision_checker_t;
00067         typedef model_checker_base<typeparams> model_checker_t;
00068     
00069         typedef int (*vertex_update_func_t)(vertex_t *);
00070         typedef int (*edge_update_func_t)(edge_t *);
00071     
00072         list<vertex_update_func_t> list_update_insert_vertex_functions;
00073         list<vertex_update_func_t> list_update_delete_vertex_functions;
00074         list<edge_update_func_t> list_update_insert_edge_functions;
00075         list<edge_update_func_t> list_update_delete_edge_functions;
00076 
00077 
00079 
00084         int num_vertices;
00085 
00086 
00087     protected:
00088 
00089     
00094     
00096 
00100         sampler_t &sampler;
00101 
00102 
00104 
00112         distance_evaluator_t &distance_evaluator;
00113 
00114 
00116 
00120         extender_t &extender;
00121 
00122 
00124 
00128         collision_checker_t &collision_checker;
00129 
00130 
00132 
00139         model_checker_t &model_checker;
00140 
00142 
00143     
00144 
00153         int initialize ();
00154 
00155     
00156 
00157     public:
00158 
00159     
00161 
00166         list< vertex_t* > list_vertices;
00167 
00168        
00169         planner ();
00170         ~planner ();
00171 
00172     
00182         planner (sampler_t &sampler_in, distance_evaluator_t &distance_evaluator_in, extender_t &extender_in, 
00183                  collision_checker_t &collision_checker_in, model_checker_t &model_checker_in);
00184 
00185 
00186 
00187 
00192 
00204         int insert_vertex (vertex_t *vertex_in);
00205 
00206 
00220         int insert_edge (vertex_t *vertex_src_in, edge_t *edge_in, vertex_t *vertex_dst_in);
00221 
00222 
00233         int delete_vertex (vertex_t *vertex_in);
00234 
00235 
00246         int delete_edge (edge_t *edge_in);
00247     
00249 
00250 
00251 
00252 
00257     
00278         int insert_trajectory (vertex_t *vertex_src_in, trajectory_t *trajectory_in, 
00279                                list< state_t *> *intermediate_vertices_in, vertex_t *vertex_dst_in = 0);
00280 
00281 
00300         int insert_trajectories (vertex_t *vertex_src_in, list< trajectory_t *> *list_trajectories_in, vertex_t *vertex_dst_in = 0);
00301 
00303 
00304 
00305 
00306 
00319         int get_num_vertices () {return num_vertices;}
00320 
00321 
00322 
00323 
00324 
00329 
00330 
00338         int init_sampler (sampler_t &sampler_in);
00339 
00340 
00348         int init_distance_evaluator (distance_evaluator_t &distance_evaluator_in);
00349 
00350 
00358         int init_extender (extender_t &extender_in);
00359 
00360 
00368         int init_collision_checker (collision_checker_t &collision_checker_in);
00369 
00370 
00378         int init_model_checker (model_checker_t &model_checker_in);
00379 
00381 
00382 
00383 
00384 
00389     
00398         int clear_update_function_list_vertex_insert ();
00399     
00400     
00411         int register_new_update_function_vertex_insert (vertex_update_func_t *vertex_update_func_in);
00412     
00413 
00422         int clear_update_function_list_vertex_delete ();
00423     
00424     
00435         int register_new_update_function_vertex_delete (vertex_update_func_t *vertex_update_func_in);
00436     
00437 
00446         int clear_update_function_list_edge_insert ();
00447 
00448     
00459         int register_new_update_function_edge_insert (edge_update_func_t *edge_update_func_in);
00460     
00461     
00470         int clear_update_function_list_edge_delete ();
00471     
00472     
00483         int register_new_update_function_edge_delete (edge_update_func_t *edge_update_func_in);
00484 
00486     
00487     };
00488 
00489 }
00490 
00491 #endif