16 #ifndef NAV2_SMAC_PLANNER__A_STAR_HPP_
17 #define NAV2_SMAC_PLANNER__A_STAR_HPP_
21 #include <unordered_map>
28 #include "nav2_costmap_2d/costmap_2d.hpp"
29 #include "nav2_core/planner_exceptions.hpp"
31 #include "nav2_smac_planner/thirdparty/robin_hood.h"
32 #include "nav2_smac_planner/analytic_expansion.hpp"
33 #include "nav2_smac_planner/node_2d.hpp"
34 #include "nav2_smac_planner/node_hybrid.hpp"
35 #include "nav2_smac_planner/node_lattice.hpp"
36 #include "nav2_smac_planner/node_basic.hpp"
37 #include "nav2_smac_planner/types.hpp"
38 #include "nav2_smac_planner/constants.hpp"
40 namespace nav2_smac_planner
47 template<
typename NodeT>
51 typedef NodeT * NodePtr;
53 typedef std::vector<NodePtr> NodeVector;
54 typedef std::pair<float, NodeBasic<NodeT>> NodeElement;
55 typedef typename NodeT::Coordinates Coordinates;
56 typedef typename NodeT::CoordinateVector CoordinateVector;
57 typedef typename NodeVector::iterator NeighborIterator;
58 typedef std::function<bool (
const uint64_t &, NodeT * &)> NodeGetter;
66 bool operator()(
const NodeElement & a,
const NodeElement & b)
const
68 return a.first > b.first;
72 typedef std::priority_queue<NodeElement, std::vector<NodeElement>,
NodeComparator> NodeQueue;
97 const bool & allow_unknown,
99 const int & max_on_approach_iterations,
100 const int & terminal_checking_interval,
101 const double & max_planning_time,
102 const float & lookup_table_size,
103 const unsigned int & dim_3_size);
115 CoordinateVector & path,
int & num_iterations,
const float & tolerance,
116 std::function<
bool()> cancel_checker,
117 std::vector<std::tuple<float, float, float>> * expansions_log =
nullptr);
134 const unsigned int & dim_3);
145 const unsigned int & dim_3);
207 inline void addNode(
const float & cost, NodePtr & node);
213 inline NodePtr
addToGraph(
const uint64_t & index);
220 inline bool isGoal(NodePtr & node);
245 inline bool onVisitationCheckNode(
const NodePtr & node);
253 const NodePtr & node, std::vector<std::tuple<float, float, float>> * expansions_log);
255 bool _traverse_unknown;
256 bool _is_initialized;
258 int _max_on_approach_iterations;
259 int _terminal_checking_interval;
260 double _max_planning_time;
262 unsigned int _x_size;
263 unsigned int _y_size;
264 unsigned int _dim3_size;
267 Coordinates _goal_coordinates;
274 MotionModel _motion_model;
275 NodeHeuristicPair _best_heuristic_node;
279 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)
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.
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 hueristic 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.
unsigned int & getSizeX()
Get size of graph in X.
NodePtr & getGoal()
Get pointer reference to goal node.
bool isGoal(NodePtr &node)
Check if this node is the goal node.
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)
Set the goal for planning, as a node index.
A costmap grid collision checker.
Search properties and penalties.