Go to the documentation of this file.00001
00015
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