16 #ifndef NAV2_LIFECYCLE_MANAGER__LIFECYCLE_MANAGER_HPP_
17 #define NAV2_LIFECYCLE_MANAGER__LIFECYCLE_MANAGER_HPP_
23 #include <unordered_map>
26 #include "nav2_util/lifecycle_service_client.hpp"
27 #include "nav2_ros_common/node_thread.hpp"
28 #include "nav2_ros_common/publisher.hpp"
29 #include "nav2_ros_common/service_server.hpp"
30 #include "rclcpp/callback_group.hpp"
31 #include "rclcpp/duration.hpp"
32 #include "rclcpp/node.hpp"
33 #include "rclcpp/node_options.hpp"
34 #include "rclcpp/time.hpp"
35 #include "rclcpp/timer.hpp"
36 #include "std_msgs/msg/bool.hpp"
37 #include "std_srvs/srv/empty.hpp"
38 #include "nav2_msgs/srv/manage_lifecycle_nodes.hpp"
39 #include "std_srvs/srv/trigger.hpp"
40 #include "bondcpp/bond.hpp"
41 #include "diagnostic_updater/diagnostic_updater.hpp"
42 #include "nav2_ros_common/lifecycle_node.hpp"
45 namespace nav2_lifecycle_manager
47 using namespace std::chrono_literals;
49 using nav2_msgs::srv::ManageLifecycleNodes;
74 explicit LifecycleManager(
const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
82 rclcpp::CallbackGroup::SharedPtr callback_group_;
83 std::unique_ptr<nav2::NodeThread> service_thread_;
86 nav2::ServiceServer<ManageLifecycleNodes>::SharedPtr manager_srv_;
87 nav2::ServiceServer<std_srvs::srv::Trigger>::SharedPtr is_active_srv_;
90 nav2::Publisher<std_msgs::msg::Bool>::SharedPtr is_active_pub_;
99 const std::shared_ptr<rmw_request_id_t> request_header,
100 const std::shared_ptr<ManageLifecycleNodes::Request> request,
101 std::shared_ptr<ManageLifecycleNodes::Response> response);
109 void isActiveCallback(
110 const std::shared_ptr<rmw_request_id_t> request_header,
111 const std::shared_ptr<std_srvs::srv::Trigger::Request> request,
112 std::shared_ptr<std_srvs::srv::Trigger::Response> response);
139 bool reset(
bool hard_reset =
false);
156 void onRclPreshutdown();
162 void createLifecycleServiceClients();
168 void createLifecycleServiceServers();
174 void createLifecyclePublishers();
180 void shutdownAllNodes();
184 void destroyLifecycleServiceClients();
188 void destroyLifecyclePublishers();
194 void createBondTimer();
200 bool createBondConnection(
const std::string & node_name);
206 void destroyBondTimer();
213 void checkBondConnections();
220 void checkBondRespawnConnection();
225 bool changeStateForNode(
226 const std::string & node_name,
227 std::uint8_t transition);
232 bool changeStateForAllNodes(std::uint8_t transition,
bool hard_change =
false);
238 void message(
const std::string & msg);
244 void CreateDiagnostic(diagnostic_updater::DiagnosticStatusWrapper & stat);
252 void registerRclPreshutdownCallback();
257 void setState(
const NodeState & state);
267 void publishIsActiveState();
270 rclcpp::TimerBase::SharedPtr init_timer_;
271 rclcpp::TimerBase::SharedPtr bond_timer_;
272 rclcpp::TimerBase::SharedPtr bond_respawn_timer_;
273 std::chrono::milliseconds bond_timeout_;
274 std::chrono::milliseconds service_timeout_;
275 double bond_heartbeat_period_;
278 std::map<std::string, std::shared_ptr<bond::Bond>> bond_map_;
281 std::map<std::string, std::shared_ptr<nav2_util::LifecycleServiceClient>> node_map_;
283 std::map<std::uint8_t, std::string> transition_label_map_;
286 std::unordered_map<std::uint8_t, std::uint8_t> transition_state_map_;
289 std::vector<std::string> node_names_;
293 bool attempt_respawn_reconnection_;
295 NodeState managed_nodes_state_{NodeState::UNCONFIGURED};
296 diagnostic_updater::Updater diagnostics_updater_;
298 rclcpp::Time bond_respawn_start_time_{0};
299 rclcpp::Duration bond_respawn_max_duration_{10s};
Implements service interface to transition the lifecycle nodes of Nav2 stack. It receives transition ...