Skip to content

Commit e5eaafa

Browse files
author
Erwin Lejeune
authored
Fix: bt_navigator crashes on lc transitions (#2848)
* fix empty address access on halt all actions * fix unsafe declaration of parameters * restore odom smoother * fix styling issues * add missing semicolumn
1 parent 38ccddc commit e5eaafa

File tree

3 files changed

+38
-14
lines changed

3 files changed

+38
-14
lines changed

nav2_behavior_tree/src/behavior_tree_engine.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ BehaviorTreeEngine::createTreeFromFile(
8787
void
8888
BehaviorTreeEngine::haltAllActions(BT::TreeNode * root_node)
8989
{
90+
if (!root_node) {
91+
return;
92+
}
93+
9094
// this halt signal should propagate through the entire tree.
9195
root_node->halt();
9296

nav2_bt_navigator/src/navigators/navigate_through_poses.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,17 @@ NavigateThroughPosesNavigator::configure(
2929
{
3030
start_time_ = rclcpp::Time(0);
3131
auto node = parent_node.lock();
32-
node->declare_parameter("goals_blackboard_id", std::string("goals"));
32+
33+
if (!node->has_parameter("goals_blackboard_id")) {
34+
node->declare_parameter("goals_blackboard_id", std::string("goals"));
35+
}
36+
3337
goals_blackboard_id_ = node->get_parameter("goals_blackboard_id").as_string();
38+
3439
if (!node->has_parameter("path_blackboard_id")) {
3540
node->declare_parameter("path_blackboard_id", std::string("path"));
3641
}
42+
3743
path_blackboard_id_ = node->get_parameter("path_blackboard_id").as_string();
3844

3945
// Odometry smoother object for getting current speed
@@ -48,12 +54,16 @@ NavigateThroughPosesNavigator::getDefaultBTFilepath(
4854
{
4955
std::string default_bt_xml_filename;
5056
auto node = parent_node.lock();
51-
std::string pkg_share_dir =
52-
ament_index_cpp::get_package_share_directory("nav2_bt_navigator");
53-
node->declare_parameter<std::string>(
54-
"default_nav_through_poses_bt_xml",
55-
pkg_share_dir +
56-
"/behavior_trees/navigate_through_poses_w_replanning_and_recovery.xml");
57+
58+
if (!node->has_parameter("default_nav_through_poses_bt_xml")) {
59+
std::string pkg_share_dir =
60+
ament_index_cpp::get_package_share_directory("nav2_bt_navigator");
61+
node->declare_parameter<std::string>(
62+
"default_nav_through_poses_bt_xml",
63+
pkg_share_dir +
64+
"/behavior_trees/navigate_through_poses_w_replanning_and_recovery.xml");
65+
}
66+
5767
node->get_parameter("default_nav_through_poses_bt_xml", default_bt_xml_filename);
5868

5969
return default_bt_xml_filename;

nav2_bt_navigator/src/navigators/navigate_to_pose.cpp

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,17 @@ NavigateToPoseNavigator::configure(
2929
{
3030
start_time_ = rclcpp::Time(0);
3131
auto node = parent_node.lock();
32-
node->declare_parameter("goal_blackboard_id", std::string("goal"));
32+
33+
if (!node->has_parameter("goal_blackboard_id")) {
34+
node->declare_parameter("goal_blackboard_id", std::string("goal"));
35+
}
36+
3337
goal_blackboard_id_ = node->get_parameter("goal_blackboard_id").as_string();
38+
3439
if (!node->has_parameter("path_blackboard_id")) {
3540
node->declare_parameter("path_blackboard_id", std::string("path"));
3641
}
42+
3743
path_blackboard_id_ = node->get_parameter("path_blackboard_id").as_string();
3844

3945
// Odometry smoother object for getting current speed
@@ -54,12 +60,16 @@ NavigateToPoseNavigator::getDefaultBTFilepath(
5460
{
5561
std::string default_bt_xml_filename;
5662
auto node = parent_node.lock();
57-
std::string pkg_share_dir =
58-
ament_index_cpp::get_package_share_directory("nav2_bt_navigator");
59-
node->declare_parameter<std::string>(
60-
"default_nav_to_pose_bt_xml",
61-
pkg_share_dir +
62-
"/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml");
63+
64+
if (!node->has_parameter("default_nav_to_pose_bt_xml")) {
65+
std::string pkg_share_dir =
66+
ament_index_cpp::get_package_share_directory("nav2_bt_navigator");
67+
node->declare_parameter<std::string>(
68+
"default_nav_to_pose_bt_xml",
69+
pkg_share_dir +
70+
"/behavior_trees/navigate_to_pose_w_replanning_and_recovery.xml");
71+
}
72+
6373
node->get_parameter("default_nav_to_pose_bt_xml", default_bt_xml_filename);
6474

6575
return default_bt_xml_filename;

0 commit comments

Comments
 (0)