Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ class AnalyticExpansion
* @return The score of the refined path
*/
float refineAnalyticPath(
const NodePtr & current_node,
NodePtr & node,
const NodePtr & goal_node,
const NodeGetter & getter,
AnalyticExpansionNodes & analytic_nodes);
Expand Down
20 changes: 12 additions & 8 deletions nav2_smac_planner/src/analytic_expansion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic

AnalyticExpansionNodes current_best_analytic_nodes = {};
NodePtr current_best_goal = nullptr;
NodePtr current_best_node = nullptr;
float current_best_score = std::numeric_limits<float>::max();

closest_distance = std::min(
Expand Down Expand Up @@ -97,13 +98,15 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
current_node->motion_table.state_space);
if (!analytic_nodes.empty()) {
found_valid_expansion = true;
bool score = refineAnalyticPath(
current_node, current_goal_node, getter, analytic_nodes);
NodePtr node = current_node;
float score = refineAnalyticPath(
node, current_goal_node, getter, analytic_nodes);
// Update the best score if we found a better path
if (score < current_best_score) {
current_best_analytic_nodes = analytic_nodes;
current_best_goal = current_goal_node;
current_best_score = score;
current_best_node = node;
}
}
}
Expand All @@ -116,13 +119,15 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
current_node, current_goal_node, getter,
current_node->motion_table.state_space);
if (!analytic_nodes.empty()) {
bool score = refineAnalyticPath(
current_node, current_goal_node, getter, analytic_nodes);
NodePtr node = current_node;
float score = refineAnalyticPath(
node, current_goal_node, getter, analytic_nodes);
// Update the best score if we found a better path
if (score < current_best_score) {
current_best_analytic_nodes = analytic_nodes;
current_best_goal = current_goal_node;
current_best_score = score;
current_best_node = node;
}
}
}
Expand All @@ -131,7 +136,7 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic

if (!current_best_analytic_nodes.empty()) {
return setAnalyticPath(
current_node, current_best_goal,
current_best_node, current_best_goal,
current_best_analytic_nodes);
}
analytic_iterations--;
Expand Down Expand Up @@ -273,12 +278,11 @@ typename AnalyticExpansion<NodeT>::AnalyticExpansionNodes AnalyticExpansion<Node

template<typename NodeT>
float AnalyticExpansion<NodeT>::refineAnalyticPath(
const NodePtr & current_node,
NodePtr & node,
const NodePtr & goal_node,
const NodeGetter & getter,
AnalyticExpansionNodes & analytic_nodes)
{
NodePtr node = current_node;
NodePtr test_node = node;
AnalyticExpansionNodes refined_analytic_nodes;
for (int i = 0; i < 8; i++) {
Expand Down Expand Up @@ -407,7 +411,7 @@ getAnalyticPath(

template<>
float AnalyticExpansion<Node2D>::refineAnalyticPath(
const NodePtr &,
NodePtr &,
const NodePtr &,
const NodeGetter &,
AnalyticExpansionNodes &)
Expand Down
4 changes: 3 additions & 1 deletion nav2_smac_planner/test/test_a_star.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,9 @@ TEST(AStarTest, test_a_star_2d)
int dummy_int2 = 0;
EXPECT_EQ(expander.tryAnalyticExpansion(nullptr, {}, {}, {},
nullptr, dummy_int1, dummy_int2), nullptr);
EXPECT_EQ(expander.refineAnalyticPath(nullptr, nullptr, nullptr,

nav2_smac_planner::Node2D* start = nullptr;
EXPECT_EQ(expander.refineAnalyticPath(start, nullptr, nullptr,
analytic_expansion_nodes), std::numeric_limits<float>::max());
nav2_smac_planner::AnalyticExpansion<nav2_smac_planner::Node2D>::AnalyticExpansionNodes
expected_nodes = expander.getAnalyticPath(nullptr, nullptr, nullptr, nullptr);
Expand Down
Loading