Skip to content

Commit 6a74ba6

Browse files
include bug fix for nav2_smac_planner (#5198)
Signed-off-by: Stevedan Omodolor <stevedan.o.omodolor@gmail.com>
1 parent f2649ea commit 6a74ba6

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

nav2_smac_planner/include/nav2_smac_planner/analytic_expansion.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,15 @@ class AnalyticExpansion
112112

113113
/**
114114
* @brief Refined analytic path from the current node to the goal
115-
* @param current_node The node to start the analytic path from
115+
* @param node The node to start the analytic path from. Node head may
116+
* change as a result of refinement
116117
* @param goal_node The goal node to plan to
117118
* @param getter The function object that gets valid nodes from the graph
118119
* @param analytic_nodes The set of analytic nodes to refine
119120
* @return The score of the refined path
120121
*/
121122
float refineAnalyticPath(
122-
const NodePtr & current_node,
123+
NodePtr & node,
123124
const NodePtr & goal_node,
124125
const NodeGetter & getter,
125126
AnalyticExpansionNodes & analytic_nodes);

nav2_smac_planner/src/analytic_expansion.cpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
6666

6767
AnalyticExpansionNodes current_best_analytic_nodes = {};
6868
NodePtr current_best_goal = nullptr;
69+
NodePtr current_best_node = nullptr;
6970
float current_best_score = std::numeric_limits<float>::max();
7071

7172
closest_distance = std::min(
@@ -97,13 +98,15 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
9798
current_node->motion_table.state_space);
9899
if (!analytic_nodes.empty()) {
99100
found_valid_expansion = true;
100-
bool score = refineAnalyticPath(
101-
current_node, current_goal_node, getter, analytic_nodes);
101+
NodePtr node = current_node;
102+
float score = refineAnalyticPath(
103+
node, current_goal_node, getter, analytic_nodes);
102104
// Update the best score if we found a better path
103105
if (score < current_best_score) {
104106
current_best_analytic_nodes = analytic_nodes;
105107
current_best_goal = current_goal_node;
106108
current_best_score = score;
109+
current_best_node = node;
107110
}
108111
}
109112
}
@@ -116,13 +119,15 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
116119
current_node, current_goal_node, getter,
117120
current_node->motion_table.state_space);
118121
if (!analytic_nodes.empty()) {
119-
bool score = refineAnalyticPath(
120-
current_node, current_goal_node, getter, analytic_nodes);
122+
NodePtr node = current_node;
123+
float score = refineAnalyticPath(
124+
node, current_goal_node, getter, analytic_nodes);
121125
// Update the best score if we found a better path
122126
if (score < current_best_score) {
123127
current_best_analytic_nodes = analytic_nodes;
124128
current_best_goal = current_goal_node;
125129
current_best_score = score;
130+
current_best_node = node;
126131
}
127132
}
128133
}
@@ -131,7 +136,7 @@ typename AnalyticExpansion<NodeT>::NodePtr AnalyticExpansion<NodeT>::tryAnalytic
131136

132137
if (!current_best_analytic_nodes.empty()) {
133138
return setAnalyticPath(
134-
current_node, current_best_goal,
139+
current_best_node, current_best_goal,
135140
current_best_analytic_nodes);
136141
}
137142
analytic_iterations--;
@@ -273,12 +278,11 @@ typename AnalyticExpansion<NodeT>::AnalyticExpansionNodes AnalyticExpansion<Node
273278

274279
template<typename NodeT>
275280
float AnalyticExpansion<NodeT>::refineAnalyticPath(
276-
const NodePtr & current_node,
281+
NodePtr & node,
277282
const NodePtr & goal_node,
278283
const NodeGetter & getter,
279284
AnalyticExpansionNodes & analytic_nodes)
280285
{
281-
NodePtr node = current_node;
282286
NodePtr test_node = node;
283287
AnalyticExpansionNodes refined_analytic_nodes;
284288
for (int i = 0; i < 8; i++) {
@@ -407,7 +411,7 @@ getAnalyticPath(
407411

408412
template<>
409413
float AnalyticExpansion<Node2D>::refineAnalyticPath(
410-
const NodePtr &,
414+
NodePtr &,
411415
const NodePtr &,
412416
const NodeGetter &,
413417
AnalyticExpansionNodes &)

nav2_smac_planner/test/test_a_star.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,9 @@ TEST(AStarTest, test_a_star_2d)
141141
int dummy_int2 = 0;
142142
EXPECT_EQ(expander.tryAnalyticExpansion(nullptr, {}, {}, {},
143143
nullptr, dummy_int1, dummy_int2), nullptr);
144-
EXPECT_EQ(expander.refineAnalyticPath(nullptr, nullptr, nullptr,
144+
145+
nav2_smac_planner::Node2D * start = nullptr;
146+
EXPECT_EQ(expander.refineAnalyticPath(start, nullptr, nullptr,
145147
analytic_expansion_nodes), std::numeric_limits<float>::max());
146148
nav2_smac_planner::AnalyticExpansion<nav2_smac_planner::Node2D>::AnalyticExpansionNodes
147149
expected_nodes = expander.getAnalyticPath(nullptr, nullptr, nullptr, nullptr);

0 commit comments

Comments
 (0)