00001 00008 #ifndef _SMP_PLANNER_RRG_H_ 00009 #define _SMP_PLANNER_RRG_H_ 00010 00011 #include <smp/planners/base_incremental.h> 00012 #include <smp/planners/planner_parameters.h> 00013 00014 00015 namespace smp { 00016 00018 00024 template< class typeparams > 00025 class rrg : public planner_incremental< typeparams > { 00026 00027 00028 typedef typename typeparams::state state_t; 00029 typedef typename typeparams::input input_t; 00030 00031 typedef trajectory<typeparams> trajectory_t; 00032 00033 typedef vertex<typeparams> vertex_t; 00034 typedef edge<typeparams> edge_t; 00035 00036 typedef planner_incremental<typeparams> planner_t; 00037 00038 typedef planner_parameters parameters_t; 00039 00040 typedef sampler_base<typeparams> sampler_t; 00041 typedef distance_evaluator_base<typeparams> distance_evaluator_t; 00042 typedef extender_base<typeparams> extender_t; 00043 typedef collision_checker_base<typeparams> collision_checker_t; 00044 typedef model_checker_base<typeparams> model_checker_t; 00045 00046 private: 00047 00048 00049 // This function adds the given state to the beginning of the tracjetory and calls the collision checker. 00050 int check_extended_trajectory_for_collision (state_t *state, trajectory_t *trajectory) { 00051 00052 trajectory->list_states.push_front (state); 00053 int collision_check = this->collision_checker.check_collision_trajectory (trajectory); 00054 trajectory->list_states.pop_front (); 00055 00056 return collision_check; 00057 } 00058 00059 00060 00061 public: 00062 00063 00065 00070 parameters_t parameters; 00071 00072 00073 rrg (); 00074 ~rrg (); 00075 00089 rrg (sampler_t &sampler_in, distance_evaluator_t &distance_evaluator_in, extender_t &extender_in, 00090 collision_checker_t &collision_checker_in, model_checker_t &model_checker_in); 00091 00092 00132 int iteration (); 00133 00134 }; 00135 00136 00137 } 00138 00139 #endif