occupancy_grid_map_heuristic.cpp
Go to the documentation of this file.
2 
3 
4 
6 {
8 : HeuristicPlugin("occupancy_grid_map_heuristic")
9 {
10 }
11 
12 bool OccupancyGridMapHeuristic::loadParams(const vigir_generic_params::ParameterSet& params)
13 {
14  if (!HeuristicPlugin::loadParams(params))
15  return false;
16 
17  getParam("grid_map_topic", grid_map_topic_, std::string());
18  return true;
19 }
20 
21 bool OccupancyGridMapHeuristic::initialize(const vigir_generic_params::ParameterSet& params)
22 {
23  if (!HeuristicPlugin::initialize(params))
24  return false;
25 
26  // subscribe topics
27  occupancy_grid_map_sub_ = nh_.subscribe<nav_msgs::OccupancyGrid>(grid_map_topic_, 1, &OccupancyGridMapHeuristic::mapCallback, this);
28 
29  return true;
30 }
31 
32 void OccupancyGridMapHeuristic::mapCallback(const nav_msgs::OccupancyGridConstPtr& occupancy_grid_map)
33 {
34  boost::unique_lock<boost::shared_mutex> lock(grid_map_shared_mutex_);
35  distance_map_.setMap(occupancy_grid_map);
36 }
37 
38 double OccupancyGridMapHeuristic::getHeuristicValue(const State& from, const State& to, const State& /*start*/, const State& /*goal*/) const
39 {
40  if (from == to)
41  return 0.0;
42 
43  boost::shared_lock<boost::shared_mutex> lock(grid_map_shared_mutex_);
44 
45  double d = distance_map_.distanceMapAt(from.getX(), from.getY());
46  if (d < 0.0)
47  return 0.0;
48 
49  if (d < 0.01)
50  return max_heuristic_value_;
51 
52  return 5.0*std::max(0.0, 0.5-d);
53 }
54 }
55 
56 #include <pluginlib/class_list_macros.h>
57 PLUGINLIB_EXPORT_CLASS(vigir_footstep_planning::OccupancyGridMapHeuristic, vigir_footstep_planning::HeuristicPlugin)
d
double getHeuristicValue(const State &from, const State &to, const State &start, const State &goal) const override
void setMap(const nav_msgs::OccupancyGridConstPtr &gridMap)
Initialize map from a ROS OccupancyGrid message.
Definition: grid_map_2d.cpp:56
void mapCallback(const nav_msgs::OccupancyGridConstPtr &occupancy_grid_map)
float distanceMapAt(double wx, double wy) const
Returns distance (in m) at world coordinates <wx,wy> in m; -1 if out of bounds!
bool initialize(const vigir_generic_params::ParameterSet &params=vigir_generic_params::ParameterSet()) override
bool loadParams(const vigir_generic_params::ParameterSet &params=vigir_generic_params::ParameterSet()) override


vigir_footstep_planning_default_plugins
Author(s): Alexander Stumpf
autogenerated on Sun Nov 17 2019 03:30:01