16 #ifndef NAV2_SMAC_PLANNER__A_STAR_HPP_
17 #define NAV2_SMAC_PLANNER__A_STAR_HPP_
26 #include "nav2_costmap_2d/costmap_2d.hpp"
27 #include "nav2_core/planner_exceptions.hpp"
29 #include "nav2_smac_planner/thirdparty/robin_hood.h"
30 #include "nav2_smac_planner/analytic_expansion.hpp"
31 #include "nav2_smac_planner/node_2d.hpp"
32 #include "nav2_smac_planner/node_hybrid.hpp"
33 #include "nav2_smac_planner/node_lattice.hpp"
34 #include "nav2_smac_planner/node_basic.hpp"
35 #include "nav2_smac_planner/goal_manager.hpp"
36 #include "nav2_smac_planner/types.hpp"
37 #include "nav2_smac_planner/constants.hpp"
39 namespace nav2_smac_planner
46 template<
typename NodeT>
50 typedef NodeT * NodePtr;
52 typedef std::vector<NodePtr> NodeVector;
53 typedef std::pair<float, NodeBasic<NodeT>> NodeElement;
54 typedef typename NodeT::Coordinates Coordinates;
55 typedef typename NodeT::CoordinateVector CoordinateVector;
56 typedef typename NodeVector::iterator NeighborIterator;
57 typedef std::function<bool (
const uint64_t &, NodeT * &)> NodeGetter;
67 bool operator()(
const NodeElement & a,
const NodeElement & b)
const
69 return a.first > b.first;
73 typedef std::priority_queue<NodeElement, std::vector<NodeElement>,
NodeComparator> NodeQueue;
100 const bool & allow_unknown,
101 int & max_iterations,
102 const int & max_on_approach_iterations,
103 const int & terminal_checking_interval,
104 const double & max_planning_time,
105 const float & lookup_table_size,
106 const unsigned int & dim_3_size);
118 CoordinateVector & path,
int & num_iterations,
const float & tolerance,
119 std::function<
bool()> cancel_checker,
120 std::vector<std::tuple<float, float, float>> * expansions_log =
nullptr);
139 const unsigned int & dim_3,
140 const GoalHeadingMode & goal_heading_mode = GoalHeadingMode::DEFAULT,
141 const int & coarse_search_resolution = 1);
152 const unsigned int & dim_3);
220 inline void addNode(
const float & cost, NodePtr & node);
226 inline NodePtr
addToGraph(
const uint64_t & index);
264 const NodePtr & node, std::vector<std::tuple<float, float, float>> * expansions_log);
266 bool _traverse_unknown;
267 bool _is_initialized;
269 int _max_on_approach_iterations;
270 int _terminal_checking_interval;
271 double _max_planning_time;
273 unsigned int _x_size;
274 unsigned int _y_size;
275 unsigned int _dim3_size;
276 unsigned int _coarse_search_resolution;
284 MotionModel _motion_model;
285 NodeHeuristicPair _best_heuristic_node;
289 std::unique_ptr<AnalyticExpansion<NodeT>> _expander;
A 2D costmap provides a mapping between points in the world and their associated "costs".
An A* implementation for planning in a costmap. Templated based on the Node type.
~AStarAlgorithm()
A destructor for nav2_smac_planner::AStarAlgorithm.
unsigned int & getSizeDim3()
Get number of angle quantization bins (SE2) or Z coordinate (XYZ)
unsigned int getCoarseSearchResolution()
Get the resolution of the coarse search.
bool createPath(CoordinateVector &path, int &num_iterations, const float &tolerance, std::function< bool()> cancel_checker, std::vector< std::tuple< float, float, float >> *expansions_log=nullptr)
Creating path from given costmap, start, and goal.
int & getOnApproachMaxIterations()
Get maximum number of on-approach iterations after within threshold.
bool onVisitationCheckNode(const NodePtr &node)
Check if node has been visited.
void setCollisionChecker(GridCollisionChecker *collision_checker)
Sets the collision checker to use.
void initialize(const bool &allow_unknown, int &max_iterations, const int &max_on_approach_iterations, const int &terminal_checking_interval, const double &max_planning_time, const float &lookup_table_size, const unsigned int &dim_3_size)
Initialization of the planner with defaults.
NodePtr getNextNode()
Get pointer to next goal in open set.
bool areInputsValid()
Check if inputs to planner are valid.
void clearQueue()
Clear heuristic queue of nodes to search.
AStarAlgorithm(const MotionModel &motion_model, const SearchInfo &search_info)
A constructor for nav2_smac_planner::AStarAlgorithm.
void populateExpansionsLog(const NodePtr &node, std::vector< std::tuple< float, float, float >> *expansions_log)
Populate a debug log of expansions for Hybrid-A* for visualization.
int & getMaxIterations()
Get maximum number of iterations to plan.
void clearGraph()
Clear graph of nodes searched.
unsigned int & getSizeY()
Get size of graph in Y.
void setStart(const float &mx, const float &my, const unsigned int &dim_3)
Set the starting pose for planning, as a node index.
void addNode(const float &cost, NodePtr &node)
Add a node to the open set.
GoalManagerT getGoalManager()
Get the goals manager class.
unsigned int & getSizeX()
Get size of graph in X.
float getHeuristicCost(const NodePtr &node)
Get cost of heuristic of node.
float & getToleranceHeuristic()
Get tolerance, in node nodes.
NodePtr & getStart()
Get pointer reference to starting node.
NodePtr addToGraph(const uint64_t &index)
Adds node to graph.
void setGoal(const float &mx, const float &my, const unsigned int &dim_3, const GoalHeadingMode &goal_heading_mode=GoalHeadingMode::DEFAULT, const int &coarse_search_resolution=1)
Set the goal for planning, as a node index.
Responsible for managing multiple variables storing information on the goal.
A costmap grid collision checker.
Search properties and penalties.