00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __PARKING_HH__
00015 #define __PARKING_HH__
00016
00017
00018 class Safety;
00019 class Stop;
00020 class Halt;
00021
00022 class PARK_control: public Controller
00023 {
00024 public:
00025
00026 PARK_control(Navigator *navptr, int _verbose);
00027 ~PARK_control();
00028 void configure(ConfigFile* cf, int section);
00029 result_t control(pilot_command_t &pcmd, mapxy_list_t, bool voronoi_stuck=true);
00030 void reset(void);
00031
00032 private:
00033
00034
00035 typedef enum
00036 {
00037 hit_waypoint,
00038 approach_spot,
00039 pull_in,
00040 pull_out
00041 } state_t;
00042
00043
00044 state_t state;
00045
00046
00047 Controller::result_t initialize(pilot_command_t& pcmd,
00048 const mapxy_list_t&);
00049
00050
00051 float parking_speed_limit;
00052
00053 bool find_a_better_spot;
00054 float find_spot_max_x_offset;
00055 float find_spot_max_y_offset;
00056 float find_spot_step_size;
00057
00058
00059
00060 Safety *safety;
00061 Stop *stop;
00062 Halt *halt;
00063
00064 int adjust_spot(std::vector<WayPointNode> &new_waypts,
00065 ObstacleList obstacles,
00066 float max_x_offset,
00067 float max_y_offset,
00068 float step_size);
00069
00070
00071 float speed_limit;
00072
00073 float park_distance, park_turn;
00074
00075 void reset_me();
00076 bool hit_way_point(float park_distance, float park_turn,
00077 float dheading);
00078 player_pose2d_t new_end_pose;
00079
00080 float min_distance,min_theta;
00081
00082 bool small_segment(float distance, float turn);
00083
00084 float park_turn_ratio;
00085 float park_max_speed;
00086 bool halting;
00087
00088 pilot_command_t last_pcmd;
00089
00090 float last_park_dist;
00091 float last_park_turn;
00092 float min_adj_dist;
00093 float lastYaw;
00094 std::vector<MapXY> spot_points;
00095 int min_obst;
00096 };
00097
00098 #endif // __REED_SHEPP_HH__