00001
00002
00003
00004 #ifndef CAJUN_CHANGE_LANE_TASK_PLANNER_H
00005 #define CAJUN_CHANGE_LANE_TASK_PLANNER_H
00006
00007 #include "task_planner.H"
00008 #include "uc_planner_param.H"
00009
00010 namespace cajun
00011 {
00012
00013
00014 class change_lane_task_planner_t : public task_planner_t
00015 {
00016 public:
00017 change_lane_task_planner_t ();
00018
00019 void set_plan (unsigned seg_id_, unsigned start_lane_id_,
00020 unsigned end_lane_id_);
00021
00022 void get_plan (unsigned &seg_id_, unsigned &start_lane_id_,
00023 unsigned &end_lane_id_);
00024
00025 void set_active ();
00026
00027 path_status_t generate_path (world_state_t *ws_, path_t &path_,
00028 double &p_len_left_,
00029 const path_t &base_path_);
00030
00031 bool get_path_lane_lids (unsigned &sid_,
00032 std::vector<unsigned> &lids_);
00033
00034 bool get_start_lid (unsigned &sid_, unsigned &lid_);
00035
00036 bool is_task_complete (world_state_t *ws_, double x_, double y_,
00037 double heading_);
00038
00039 void print_plan ();
00040 private:
00041 const uc_planner_param_t *m_uc_param;
00042
00043 unsigned m_seg_id;
00044 unsigned m_start_lane_id;
00045 unsigned m_end_lane_id;
00046 bool m_left_turn;
00047 };
00048
00049 };
00050
00051
00052 #endif