00001
00002
00003
00004 #ifndef CAJUN_ZONE_TASK_PLANNER_H
00005 #define CAJUN_ZONE_TASK_PLANNER_H
00006
00007
00008 #include "task_planner.H"
00009 #include "uc_planner_param.H"
00010 #include "rndf_point.H"
00011 #include "linear_interpolator.H"
00012
00013 #include "zone_planner.H"
00014
00015
00016 namespace cajun
00017 {
00018
00019
00020 class zone_task_planner_t : public task_planner_t
00021 {
00022 public:
00023 zone_task_planner_t (world_state_t *ws_, rndf_t const *rndf_);
00024 ~zone_task_planner_t ();
00025
00026 void set_plan (rndf_point_t *start_rp_, rndf_point_t *end_rp_);
00027 void get_plan (rndf_point_t* &start_rp_, rndf_point_t* &end_rp_);
00028 void modify_plan (rndf_point_t *start_rp_, rndf_point_t *end_rp_);
00029
00030 void set_active ();
00031
00032 path_status_t generate_path (
00033 world_state_t *ws_, path_t &path_, double &p_len_left_,
00034 const path_t &base_path_);
00035 bool get_path_lane_lids (unsigned &sid_,
00036 std::vector<unsigned> &lids_);
00037 bool is_task_complete (world_state_t *ws_, double x_, double y_,
00038 double heading_);
00039 void print_plan ();
00040
00041 protected:
00042 const uc_planner_param_t *m_uc_param;
00043
00044 world_state_t *m_ws;
00045 rndf_t const *m_rndf;
00046
00047
00048 rndf_point_t *m_start_rp;
00049 rndf_point_t *m_end_rp;
00050 unsigned m_zone_id;
00051
00052 bool m_first_iteration;
00053 double m_start_x;
00054 double m_start_y;
00055
00056
00057 bool m_give_straigth_path;
00058
00059
00060 bool m_generate_path;
00061
00062
00063 zone_planner_t *m_zone_planner;
00064
00065 base_interpolator_t *m_interp;
00066
00067 path_status_t straight_path (world_state_t *ws_,
00068 path_t &path_,
00069 double &p_len_left_,
00070 const path_t &base_path_,
00071 double min_speed_,
00072 double max_speed_);
00073
00074
00075
00076 unsigned find_point_on_path (base_interpolator_t::uniform_path_t &path_,
00077 double x_, double y_);
00078
00079 bool is_path_good (path_t const &path_, unsigned zone_id_,
00080 unsigned &path_index_);
00081
00082 void update_start_point (path_t const &path_);
00083
00084 void get_from_local_path (path_t const &base_path_, path_t &path_);
00085
00086 bool is_path_good ();
00087
00088 void generate_new_path (world_state_t *ws_,
00089 path_t &path_,
00090 double &p_len_left_,
00091 const path_t &base_path_);
00092
00093 void cut_down_path (path_t const &base_path_, path_t &path_);
00094 double start_orient (path_t const &path_);
00095 };
00096
00097
00098 };
00099
00100
00101 #endif