29 #ifndef HECTOR_EXPLORATION_PLANNER_H___ 30 #define HECTOR_EXPLORATION_PLANNER_H___ 35 #include <geometry_msgs/PoseStamped.h> 37 #include <dynamic_reconfigure/server.h> 41 #include <boost/shared_array.hpp> 45 class ExplorationPlannerConfig;
54 void dynRecParamCallback(hector_exploration_planner::ExplorationPlannerConfig &config, uint32_t level);
63 bool makePlan(
const geometry_msgs::PoseStamped &start,
const geometry_msgs::PoseStamped &original_goal, std::vector<geometry_msgs::PoseStamped> &plan);
70 bool doExploration(
const geometry_msgs::PoseStamped &start,std::vector<geometry_msgs::PoseStamped> &plan);
78 bool doInnerExploration(
const geometry_msgs::PoseStamped &start, std::vector<geometry_msgs::PoseStamped> &plan);
80 bool getObservationPose(
const geometry_msgs::PoseStamped& observation_pose,
const double desired_distance, geometry_msgs::PoseStamped& new_observation_pose);
82 bool doAlternativeExploration(
const geometry_msgs::PoseStamped &start,std::vector<geometry_msgs::PoseStamped> &plan, std::vector<geometry_msgs::PoseStamped> &oldplan);
83 bool findFrontiers(std::vector<geometry_msgs::PoseStamped> &frontiers, std::vector<geometry_msgs::PoseStamped> &noFrontiers);
85 bool findFrontiers(std::vector<geometry_msgs::PoseStamped> &frontiers);
88 float angleDifferenceWall(
const geometry_msgs::PoseStamped &start,
const geometry_msgs::PoseStamped &goal);
89 bool exploreWalls(
const geometry_msgs::PoseStamped &start, std::vector<geometry_msgs::PoseStamped> &goals);
104 bool buildexploration_trans_array_(
const geometry_msgs::PoseStamped &start, std::vector<geometry_msgs::PoseStamped> goals,
bool useAnglePenalty,
bool use_cell_danger =
true);
105 bool getTrajectory(
const geometry_msgs::PoseStamped &start, std::vector<geometry_msgs::PoseStamped> goals, std::vector<geometry_msgs::PoseStamped> &plan);
106 bool recoveryMakePlan(
const geometry_msgs::PoseStamped &start,
const geometry_msgs::PoseStamped &goal,std::vector<geometry_msgs::PoseStamped> &plan);
117 float angleDifference(
const geometry_msgs::PoseStamped &start,
const geometry_msgs::PoseStamped &goal);
118 float getDistanceWeight(
const geometry_msgs::PoseStamped &point1,
const geometry_msgs::PoseStamped &point2);
130 int right(
int point);
boost::shared_array< bool > is_goal_array_
boost::shared_ptr< ExplorationTransformVis > close_path_vis_
double p_same_frontier_dist_
bool isFrontier(int point)
bool isFrontierReached(int point)
void saveMaps(std::string path)
bool recoveryMakePlan(const geometry_msgs::PoseStamped &start, const geometry_msgs::PoseStamped &goal, std::vector< geometry_msgs::PoseStamped > &plan)
ros::Publisher goal_pose_pub_
boost::shared_ptr< ExplorationTransformVis > vis_
costmap_2d::Costmap2DROS * costmap_ros_
bool buildobstacle_trans_array_(bool use_inflated_obstacles)
bool isSameFrontier(int frontier_point1, int frontier_point2)
boost::shared_array< unsigned int > obstacle_trans_array_
double p_close_to_path_target_distance_
double getYawToUnknown(int point)
boost::shared_array< unsigned int > exploration_trans_array_
HectorExplorationPlanner()
double p_dist_for_goal_reached_
unsigned int angleDanger(float angle)
bool isFreeFrontiers(int point)
boost::shared_ptr< ExplorationTransformVis > inner_vis_
void getStraightPoints(int point, int points[])
unsigned int cellDanger(int point)
ros::Publisher visualization_pub_
~HectorExplorationPlanner()
ros::Publisher observation_pose_pub_
boost::shared_array< int > frontier_map_array_
float angleDifferenceWall(const geometry_msgs::PoseStamped &start, const geometry_msgs::PoseStamped &goal)
float getDistanceWeight(const geometry_msgs::PoseStamped &point1, const geometry_msgs::PoseStamped &point2)
unsigned int num_map_cells_
void initialize(std::string name, costmap_2d::Costmap2DROS *costmap_ros)
bool getObservationPose(const geometry_msgs::PoseStamped &observation_pose, const double desired_distance, geometry_msgs::PoseStamped &new_observation_pose)
costmap_2d::Costmap2D * costmap_
double p_cos_of_allowed_observation_pose_angle_
bool makePlan(const geometry_msgs::PoseStamped &start, const geometry_msgs::PoseStamped &original_goal, std::vector< geometry_msgs::PoseStamped > &plan)
enum hector_exploration_planner::HectorExplorationPlanner::LastMode last_mode_
bool findInnerFrontier(std::vector< geometry_msgs::PoseStamped > &innerFrontier)
ros::ServiceClient path_service_client_
bool doAlternativeExploration(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > &plan, std::vector< geometry_msgs::PoseStamped > &oldplan)
boost::shared_ptr< ExplorationTransformVis > obstacle_vis_
bool getTrajectory(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > goals, std::vector< geometry_msgs::PoseStamped > &plan)
void getAdjacentPoints(int point, int points[])
boost::shared_ptr< dynamic_reconfigure::Server< hector_exploration_planner::ExplorationPlannerConfig > > dyn_rec_server_
double p_observation_pose_desired_dist_
bool p_use_observation_pose_calculation_
bool doExploration(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > &plan)
bool exploreWalls(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > &goals)
bool buildexploration_trans_array_(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > goals, bool useAnglePenalty, bool use_cell_danger=true)
void getDiagonalPoints(int point, int points[])
const unsigned char * occupancy_grid_array_
void dynRecParamCallback(hector_exploration_planner::ExplorationPlannerConfig &config, uint32_t level)
float angleDifference(const geometry_msgs::PoseStamped &start, const geometry_msgs::PoseStamped &goal)
bool findFrontiersCloseToPath(std::vector< geometry_msgs::PoseStamped > &frontiers)
bool doInnerExploration(const geometry_msgs::PoseStamped &start, std::vector< geometry_msgs::PoseStamped > &plan)
bool p_explore_close_to_path_
double p_obstacle_cutoff_dist_
int p_goal_angle_penalty_
bool findFrontiers(std::vector< geometry_msgs::PoseStamped > &frontiers, std::vector< geometry_msgs::PoseStamped > &noFrontiers)