From 1d65af770669bdddb2669c89e8961986dc0d5aef Mon Sep 17 00:00:00 2001 From: Christoph Froehlich Date: Wed, 20 Mar 2024 10:05:12 +0000 Subject: [PATCH] Make a ROS parameter for it Signed-off-by: Johannes Huemer --- .../include/nav2_behavior_tree/bt_action_server.hpp | 6 ++++-- .../include/nav2_behavior_tree/bt_action_server_impl.hpp | 8 ++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server.hpp b/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server.hpp index 2fe6c064916..4508500a28d 100644 --- a/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server.hpp +++ b/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server.hpp @@ -90,11 +90,10 @@ class BtActionServer /** * @brief Replace current BT with another one * @param bt_xml_filename The file containing the new BT, uses default filename if empty - * @param overwrite If true, the new BT will be reloaded even if the filename is the same * @return bool true if the resulting BT correspond to the one in bt_xml_filename. false * if something went wrong, and previous BT is maintained */ - bool loadBehaviorTree(const std::string & bt_xml_filename = "", bool overwrite = false); + bool loadBehaviorTree(const std::string & bt_xml_filename = ""); /** * @brief Getter function for BT Blackboard @@ -252,6 +251,9 @@ class BtActionServer // The timeout value for waiting for a service to response std::chrono::milliseconds wait_for_service_timeout_; + // should the BT be reloaded even if the same xml filename is requested? + bool overwrite_xml_ = false; + // User-provided callbacks OnGoalReceivedCallback on_goal_received_callback_; OnLoopCallback on_loop_callback_; diff --git a/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp b/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp index 2a77de04997..a4e17fe4ebe 100644 --- a/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp +++ b/nav2_behavior_tree/include/nav2_behavior_tree/bt_action_server_impl.hpp @@ -64,6 +64,9 @@ BtActionServer::BtActionServer( if (!node->has_parameter("action_server_result_timeout")) { node->declare_parameter("action_server_result_timeout", 900.0); } + if (!node->has_parameter("overwrite_xml")) { + node->declare_parameter("overwrite_xml", false); + } std::vector error_code_names = { "follow_path_error_code", @@ -161,6 +164,7 @@ bool BtActionServer::on_configure() int wait_for_service_timeout; node->get_parameter("wait_for_service_timeout", wait_for_service_timeout); wait_for_service_timeout_ = std::chrono::milliseconds(wait_for_service_timeout); + node->get_parameter("overwrite_xml", overwrite_xml_); // Get error code id names to grab off of the blackboard error_code_names_ = node->get_parameter("error_code_names").as_string_array(); @@ -215,13 +219,13 @@ bool BtActionServer::on_cleanup() } template -bool BtActionServer::loadBehaviorTree(const std::string & bt_xml_filename, bool overwrite) +bool BtActionServer::loadBehaviorTree(const std::string & bt_xml_filename) { // Empty filename is default for backward compatibility auto filename = bt_xml_filename.empty() ? default_bt_xml_filename_ : bt_xml_filename; // Use previous BT if it is the existing one and overwrite flag is not set to true - if (!overwrite && current_bt_xml_filename_ == filename) { + if (!overwrite_xml_ && current_bt_xml_filename_ == filename) { RCLCPP_DEBUG(logger_, "BT will not be reloaded as the given xml is already loaded"); return true; }