00001
00002
00003
00004 #ifndef CAJUN_TASK_HANDLER_H
00005 #define CAJUN_TASK_HANDLER_H
00006
00007 #include "rndf.H"
00008 #include "world_state.H"
00009 #include "task_planner.H"
00010 #include "rndf_point.H"
00011
00012 #include "uc_planner_param.H"
00013 #include "mission_handler.H"
00014
00015 namespace cajun
00016 {
00017 class task_plan_handler_t
00018 {
00019 tp_plan_t *m_tp_plan;
00020 world_state_t *m_ws;
00021
00022 mission_handler_t *m_mh;
00023
00024 rndf_t const *m_rndf;
00025 mdf_t const *m_mdf;
00026
00027 uc_planner_param_t const *m_uc_param;
00028 public:
00029 task_plan_handler_t (tp_plan_t *tp_plan_, world_state_t *ws_,
00030 mission_handler_t *mh,
00031 rndf_t const *rndf_, mdf_t const *mdf_) :
00032 m_tp_plan (tp_plan_), m_ws (ws_), m_mh (mh), m_rndf (rndf_),
00033 m_mdf (mdf_)
00034 {
00035 m_uc_param =
00036 uc_planner_param_t::get_uc_planner_param ();
00037 }
00038
00039 void pass_lane (blocked_lane_data_t &blk_data,
00040 unsigned path_blk_ind_);
00041 void insert_UT_TP (unsigned tp_index_, unsigned sid_,
00042 unsigned lid_1_, unsigned lid_2_);
00043 void plan_task_planner (mission_plan_t &mission_plan_);
00045 void flush_tps ()
00046 { m_tp_plan->clear ();}
00047 void print ();
00048 private:
00049 bool insert_PL_TP (unsigned tp_index_,
00050 blocked_lane_data_t &blk_data,
00051 unsigned sid, unsigned org_lid,
00052 unsigned passing_lid,
00053 double blk_x, double blk_y, double orig_end_x,
00054 double orig_end_y);
00055 void insert_LF_TP (unsigned tp_index_, rndf_point_t *lane_end_wp_id,
00056 double l_end_x, double l_end_y);
00057 void insert_to_task_plan (task_planner_t *tp_, unsigned pos_);
00058
00059 double dis_before_LC (rndf_point_t* wp_id_1_,
00060 rndf_point_t* wp_id_2_);
00061
00062 void add_lane_tp (rndf_point_t* wp_id_2_, tp_plan_t *tp_plan_);
00063
00064 void add_intersection_tp (rndf_point_t* wp_id_1_,
00065 rndf_point_t* wp_id_2_,
00066 tp_plan_t *tp_plan_);
00067
00068 void add_initial_lf (
00069 rndf_point_t* wp_id_1_, rndf_point_t* wp_id_2_,
00070 tp_plan_t *tp_plan_);
00071
00072 void add_change_lane_tp (rndf_point_t* wp_id_1_,
00073 rndf_point_t* wp_id_2_,
00074 tp_plan_t *tp_plan_);
00075
00076 void add_uturn_tp (rndf_point_t* wp_id_1_, rndf_point_t* wp_id_2_,
00077 tp_plan_t *tp_plan_);
00078
00079
00080 void add_zone_tp (rndf_point_t* wp_id_1_,
00081 rndf_point_t* wp_id_2_,
00082 tp_plan_t *tp_plan_);
00083
00084 void add_parking_tp (rndf_point_t* wp_id_1_,
00085 rndf_point_t* wp_id_2_,
00086 tp_plan_t *tp_plan_);
00087
00088 void add_unparking_tp (rndf_point_t* wp_id_1_,
00089 rndf_point_t* wp_id_2_,
00090 tp_plan_t *tp_plan_);
00091 };
00092 };
00093
00094 #endif