00001
00002
00003
00004 #ifndef CAJUN_MISSION_HANDLER_H
00005 #define CAJUN_MISSION_HANDLER_H
00006
00007 #include "world_state.H"
00008 #include "rndf.H"
00009 #include "mdf.H"
00010 #include "uc_planner_param.H"
00011 #include "mission_planner.H"
00012
00013 #include <deque>
00014
00015 namespace cajun
00016 {
00017
00018 class mission_handler_t
00019 {
00020 mission_plan_t *m_mission_plan;
00021 world_state_t *m_ws;
00022 rndf_t const *m_rndf;
00023 mdf_t const *m_mdf;
00024 uc_planner_param_t const *m_uc_param;
00026 unsigned m_next_checkpoint;
00027 mission_planner_t *m_mission_planner;
00028 bool m_finished;
00029 public:
00030 mission_handler_t (mission_plan_t *mission_plan_,
00031 world_state_t *ws_, rndf_t const *rndf_,
00032 mdf_t const *mdf_) :
00033 m_mission_plan (mission_plan_), m_ws (ws_), m_rndf (rndf_),
00034 m_mdf (mdf_), m_next_checkpoint (0), m_finished (false)
00035 {
00036 m_uc_param = uc_planner_param_t::get_uc_planner_param ();
00037 m_mission_planner = new mission_planner_t (m_rndf, m_mdf,
00038 m_ws);
00039 }
00040
00041 void flush_blockages ()
00042 { m_mission_planner->create_graph ();}
00043
00044
00045
00046 bool update_plan (double x_, double y_, double heading_,
00047 bool could_be_at_start_shoot_ = false);
00048 bool update_plan (mission_plan_t &detail_mission_);
00049
00050 bool update_waypoints_reached (double x_, double y_);
00051
00052 bool is_finished () { return m_finished; }
00053
00054 mission_plan_t* get_mission_plan ()
00055 { return m_mission_plan;}
00056
00057 void print_plan ();
00058 void print_mission (mission_plan_t const *mission_plan_);
00059
00060 rndf_point_t *active_rndf_point_on_or_before (
00061 rndf_point_t *rp) const;
00062
00063 rndf_point_t *rndf_point_at_wp (unsigned sid_, unsigned lid_,
00064 unsigned wid_);
00065
00066 rndf_point_t* active_rndf_point_before (
00067 double x_, double y_,
00068 rndf_t::waypoint_id_t const &before_wp_id)
00069 {
00070 return m_mission_planner->active_rndf_point_before (
00071 x_, y_, before_wp_id);
00072 }
00073
00074
00075 void unset_all_blockages ();
00076
00077
00078
00079
00080 void set_blocked (
00081 unsigned sid_, unsigned blk_lid_, unsigned blk_wid_,
00082 double blk_x_, double blk_y_,
00083
00084 unsigned aft_blk_wid_, double aft_blk_x_, double aft_blk_y_,
00085
00086 unsigned neigh_lid_,
00087 unsigned neigh_wid_, double neigh_x_, double neigh_y_,
00088
00089
00090 unsigned aft_blk_neigh_wid_, double aft_blk_neigh_x_,
00091 double aft_blk_neigh_y_);
00092
00095 bool plan_to_next_checkpoint (
00096 rndf_point_t *rp_start_, mission_plan_t &path_);
00097
00098 unsigned get_next_checkpoint_id ();
00099 unsigned get_num_checkpoints_left ();
00100 private:
00101
00102 bool approaching_checkpt ();
00103
00104 void alert_incomplete_path (mission_plan_t const &detail_mission_);
00105 };
00106 };
00107
00108
00109 #endif