1 #ifndef JSK_FOOTSTEP_PLANNER_GRID_ASTAR_SOLVER_H_ 2 #define JSK_FOOTSTEP_PLANNER_GRID_ASTAR_SOLVER_H_ 5 #include <boost/unordered_map.hpp> 10 template <
class GraphT>
15 typedef typename GraphT::StateT
State;
19 typedef std::vector<typename SolverNode<State, GraphT>::Ptr>
Path;
20 typedef boost::unordered_map< StatePtr, SolverNodePtr >
SolveList;
25 std::vector<typename SolverNode<State, GraphT>::Ptr>
33 if (
verbose_) { std::cerr <<
"start" << std::endl; }
37 StatePtr
p = target_node->getState();
38 if (
verbose_) { std::cerr <<
"t " << p->indexX() <<
" - " << p->indexY(); }
39 if (
graph_->isGoal(target_node->getState())) {
40 if (
verbose_) { std::cerr <<
" -> g" << std::endl; }
41 std::vector<SolverNodePtr> result_path = target_node->getPathWithoutThis();
42 result_path.push_back(target_node);
45 std::vector<SolverNodePtr> nnodes = target_node->expand(target_node,
verbose_);
46 if (
verbose_) { std::cerr <<
" -> c "; }
48 for(
int i = 0;
i < nnodes.size();
i++) {
49 SolverNodePtr anode = nnodes[
i];
52 std::cerr <<
"a-" <<
i <<
" " << anode->getState()->indexX();
53 std::cerr <<
" - " << anode->getState()->indexY();
57 if(anode->getCost() < prev_cost) {
64 if(anode->getCost() < prev_cost) {
74 if (
i != nnodes.size() -1) {
80 if (
verbose_) { std::cerr << std::endl; }
83 return std::vector<SolverNodePtr>();
94 double min_cost = DBL_MAX;
96 for (
typename SolveList::const_iterator it =
open_list_map_.begin();
98 if (it->second->getSortValue() < min_cost) {
100 min_cost = it->second->getSortValue();
104 typename SolveList::const_iterator it
113 typename SolveList::const_iterator it
116 std::cerr <<
";;;; warn (duplicate adding to openlist) ;;;;" << std::endl;
120 .insert(
typename SolveList::value_type(node->getState(), node));
125 typename SolveList::const_iterator it
128 cost = it->second->getCost();
135 typename SolveList::const_iterator it
142 std::cerr <<
";;;; warn (fail remove) ;;;;" << std::endl;
150 std::cerr <<
";;;; warn (duplicate adding to closelist) ;;;;" << std::endl;
164 virtual bool getOpenList(std::vector<StatePtr> &lst, std::vector<float> &cost)
168 virtual bool getCloseList(std::vector<StatePtr> &lst, std::vector<float> &cost)