15 #include "nav2_bt_navigator/bt_navigator.hpp"
22 #include "nav2_util/geometry_utils.hpp"
23 #include "nav2_ros_common/node_utils.hpp"
24 #include "nav2_util/string_utils.hpp"
25 #include "nav2_util/robot_utils.hpp"
26 #include "nav2_behavior_tree/bt_utils.hpp"
28 #include "nav2_behavior_tree/plugins_list.hpp"
30 using nav2::declare_parameter_if_not_declared;
32 namespace nav2_bt_navigator
36 : nav2::LifecycleNode(
"bt_navigator",
"",
37 options.automatically_declare_parameters_from_overrides(true)),
38 class_loader_(
"nav2_core",
"nav2_core::NavigatorBase")
40 RCLCPP_INFO(get_logger(),
"Creating");
50 RCLCPP_INFO(get_logger(),
"Configuring");
52 tf_ = nav2::create_transform_buffer(
this);
53 tf_->setUsingDedicatedThread(
true);
54 tf_listener_ = nav2::create_transform_listener(*tf_,
this,
true);
63 std::vector<std::string> plugin_lib_names;
64 plugin_lib_names = nav2_util::split(nav2::details::BT_BUILTIN_PLUGINS,
';');
66 auto user_defined_plugins =
69 plugin_lib_names.insert(
70 plugin_lib_names.end(), user_defined_plugins.begin(),
71 user_defined_plugins.end());
74 feedback_utils.tf = tf_;
75 feedback_utils.global_frame = global_frame_;
76 feedback_utils.robot_frame = robot_frame_;
77 feedback_utils.transform_tolerance = transform_tolerance_;
81 odom_smoother_ = std::make_shared<nav2_util::OdomSmoother>(node, filter_duration_, odom_topic_);
84 const std::vector<std::string> default_navigator_ids = {
86 "navigate_through_poses"
88 const std::vector<std::string> default_navigator_types = {
89 "nav2_bt_navigator::NavigateToPoseNavigator",
90 "nav2_bt_navigator::NavigateThroughPosesNavigator"
93 std::vector<std::string> navigator_ids;
95 if (navigator_ids == default_navigator_ids) {
96 for (
size_t i = 0; i < default_navigator_ids.size(); ++i) {
97 declare_parameter_if_not_declared(
98 node, default_navigator_ids[i] +
".plugin",
99 rclcpp::ParameterValue(default_navigator_types[i]));
104 for (
size_t i = 0; i != navigator_ids.size(); i++) {
106 std::string navigator_type = nav2::get_plugin_type_param(node, navigator_ids[i]);
108 get_logger(),
"Creating navigator id %s of type %s",
109 navigator_ids[i].c_str(), navigator_type.c_str());
110 navigators_.push_back(class_loader_.createUniqueInstance(navigator_type));
111 if (!navigators_.back()->on_configure(
112 node, plugin_lib_names, feedback_utils,
113 &plugin_muxer_, odom_smoother_))
115 return nav2::CallbackReturn::FAILURE;
117 }
catch (
const std::exception & ex) {
119 get_logger(),
"Failed to create navigator id %s."
120 " Exception: %s", navigator_ids[i].c_str(), ex.what());
122 return nav2::CallbackReturn::FAILURE;
126 return nav2::CallbackReturn::SUCCESS;
132 RCLCPP_INFO(get_logger(),
"Activating");
133 for (
size_t i = 0; i != navigators_.size(); i++) {
136 return nav2::CallbackReturn::FAILURE;
143 return nav2::CallbackReturn::SUCCESS;
149 RCLCPP_INFO(get_logger(),
"Deactivating");
150 for (
size_t i = 0; i != navigators_.size(); i++) {
152 return nav2::CallbackReturn::FAILURE;
159 return nav2::CallbackReturn::SUCCESS;
165 RCLCPP_INFO(get_logger(),
"Cleaning up");
168 tf_listener_.reset();
171 for (
size_t i = 0; i != navigators_.size(); i++) {
173 return nav2::CallbackReturn::FAILURE;
178 RCLCPP_INFO(get_logger(),
"Completed Cleaning up");
179 return nav2::CallbackReturn::SUCCESS;
185 RCLCPP_INFO(get_logger(),
"Shutting down");
186 return nav2::CallbackReturn::SUCCESS;
191 #include "rclcpp_components/register_node_macro.hpp"
void destroyBond()
Destroy bond connection to lifecycle manager.
nav2::LifecycleNode::SharedPtr shared_from_this()
Get a shared pointer of this.
ParameterT declare_or_get_parameter(const std::string ¶meter_name, const ParameterDescriptor ¶meter_descriptor=ParameterDescriptor())
Declares or gets a parameter with specified type (not value). If the parameter is already declared,...
void createBond()
Create bond connection to lifecycle manager.
An action server that uses behavior tree for navigating a robot to its goal position.
nav2::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
Called when in shutdown state.
nav2::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
Deactivates action server.
nav2::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
Configures member variables.
BtNavigator(rclcpp::NodeOptions options=rclcpp::NodeOptions())
A constructor for nav2_bt_navigator::BtNavigator class.
nav2::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
Resets member variables.
~BtNavigator()
A destructor for nav2_bt_navigator::BtNavigator class.
nav2::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
Activates action server.
Navigator feedback utilities required to get transforms and reference frames.