Skip to content

Commit 6dfe1b0

Browse files
Enable reloading BT xml file with same name (#4209) (#4422)
* Let BtActionServer overwrite xml * Make a ROS parameter for it * Rename flag to always reload BT xml file --------- Signed-off-by: Johannes Huemer <[email protected]> Signed-off-by: Christoph Froehlich <[email protected]> Co-authored-by: Johannes Huemer <[email protected]>
1 parent 8033471 commit 6dfe1b0

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,9 @@ class BtActionServer
235235
// The timeout value for waiting for a service to response
236236
std::chrono::milliseconds wait_for_service_timeout_;
237237

238+
// should the BT be reloaded even if the same xml filename is requested?
239+
bool always_reload_bt_xml_ = false;
240+
238241
// User-provided callbacks
239242
OnGoalReceivedCallback on_goal_received_callback_;
240243
OnLoopCallback on_loop_callback_;

nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ BtActionServer<ActionT>::BtActionServer(
6060
if (!node->has_parameter("default_server_timeout")) {
6161
node->declare_parameter("default_server_timeout", 20);
6262
}
63+
if (!node->has_parameter("always_reload_bt_xml")) {
64+
node->declare_parameter("always_reload_bt_xml", false);
65+
}
6366
if (!node->has_parameter("wait_for_service_timeout")) {
6467
node->declare_parameter("wait_for_service_timeout", 1000);
6568
}
@@ -118,6 +121,7 @@ bool BtActionServer<ActionT>::on_configure()
118121
int wait_for_service_timeout;
119122
node->get_parameter("wait_for_service_timeout", wait_for_service_timeout);
120123
wait_for_service_timeout_ = std::chrono::milliseconds(wait_for_service_timeout);
124+
node->get_parameter("always_reload_bt_xml", always_reload_bt_xml_);
121125

122126
// Create the class that registers our custom nodes and executes the BT
123127
bt_ = std::make_unique<nav2_behavior_tree::BehaviorTreeEngine>(plugin_lib_names_);
@@ -174,8 +178,8 @@ bool BtActionServer<ActionT>::loadBehaviorTree(const std::string & bt_xml_filena
174178
// Empty filename is default for backward compatibility
175179
auto filename = bt_xml_filename.empty() ? default_bt_xml_filename_ : bt_xml_filename;
176180

177-
// Use previous BT if it is the existing one
178-
if (current_bt_xml_filename_ == filename) {
181+
// Use previous BT if it is the existing one and always reload flag is not set to true
182+
if (!always_reload_bt_xml_ && current_bt_xml_filename_ == filename) {
179183
RCLCPP_DEBUG(logger_, "BT will not be reloaded as the given xml is already loaded");
180184
return true;
181185
}

0 commit comments

Comments
 (0)