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_util/node_thread.hpp"
28 #include "rclcpp/rclcpp.hpp"
29 #include "std_srvs/srv/empty.hpp"
30 #include "nav2_msgs/srv/manage_lifecycle_nodes.hpp"
31 #include "std_srvs/srv/trigger.hpp"
32 #include "bondcpp/bond.hpp"
33 #include "diagnostic_updater/diagnostic_updater.hpp"
36 namespace nav2_lifecycle_manager
38 using namespace std::chrono_literals;
40 using nav2_msgs::srv::ManageLifecycleNodes;
54 explicit LifecycleManager(
const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
62 rclcpp::CallbackGroup::SharedPtr callback_group_;
63 std::unique_ptr<nav2_util::NodeThread> service_thread_;
66 rclcpp::Service<ManageLifecycleNodes>::SharedPtr manager_srv_;
67 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr is_active_srv_;
75 const std::shared_ptr<rmw_request_id_t> request_header,
76 const std::shared_ptr<ManageLifecycleNodes::Request> request,
77 std::shared_ptr<ManageLifecycleNodes::Response> response);
85 void isActiveCallback(
86 const std::shared_ptr<rmw_request_id_t> request_header,
87 const std::shared_ptr<std_srvs::srv::Trigger::Request> request,
88 std::shared_ptr<std_srvs::srv::Trigger::Response> response);
105 bool reset(
bool hard_reset =
false);
122 void onRclPreshutdown();
128 void createLifecycleServiceClients();
134 void shutdownAllNodes();
138 void destroyLifecycleServiceClients();
144 void createBondTimer();
150 bool createBondConnection(
const std::string & node_name);
156 void destroyBondTimer();
163 void checkBondConnections();
170 void checkBondRespawnConnection();
175 bool changeStateForNode(
176 const std::string & node_name,
177 std::uint8_t transition);
182 bool changeStateForAllNodes(std::uint8_t transition,
bool hard_change =
false);
188 void message(
const std::string & msg);
194 void CreateActiveDiagnostic(diagnostic_updater::DiagnosticStatusWrapper & stat);
202 void registerRclPreshutdownCallback();
205 rclcpp::TimerBase::SharedPtr init_timer_;
206 rclcpp::TimerBase::SharedPtr bond_timer_;
207 rclcpp::TimerBase::SharedPtr bond_respawn_timer_;
208 std::chrono::milliseconds bond_timeout_;
211 std::map<std::string, std::shared_ptr<bond::Bond>> bond_map_;
214 std::map<std::string, std::shared_ptr<nav2_util::LifecycleServiceClient>> node_map_;
216 std::map<std::uint8_t, std::string> transition_label_map_;
219 std::unordered_map<std::uint8_t, std::uint8_t> transition_state_map_;
222 std::vector<std::string> node_names_;
226 bool attempt_respawn_reconnection_;
228 bool system_active_{
false};
229 diagnostic_updater::Updater diagnostics_updater_;
231 rclcpp::Time bond_respawn_start_time_{0};
232 rclcpp::Duration bond_respawn_max_duration_{10s};
Implements service interface to transition the lifecycle nodes of Nav2 stack. It receives transition ...