20 #include "lifecycle_msgs/srv/change_state.hpp"
21 #include "lifecycle_msgs/srv/get_state.hpp"
22 #include "nav2_util/lifecycle_service_client.hpp"
25 using lifecycle_msgs::msg::Transition;
30 #define RETRY(fn, retries) \
37 } catch (std::runtime_error & e) { \
39 if (count > (retries)) { \
45 static void startupLifecycleNode(
46 const std::string & node_name,
47 const std::chrono::seconds service_call_timeout,
50 LifecycleServiceClient sc(node_name);
56 sc.change_state(Transition::TRANSITION_CONFIGURE, service_call_timeout),
59 sc.change_state(Transition::TRANSITION_ACTIVATE, service_call_timeout),
63 void startup_lifecycle_nodes(
64 const std::vector<std::string> & node_names,
65 const std::chrono::seconds service_call_timeout,
68 for (
const auto & node_name : node_names) {
69 startupLifecycleNode(node_name, service_call_timeout, retries);
73 static void resetLifecycleNode(
74 const std::string & node_name,
75 const std::chrono::seconds service_call_timeout,
78 LifecycleServiceClient sc(node_name);
84 sc.change_state(Transition::TRANSITION_DEACTIVATE, service_call_timeout),
87 sc.change_state(Transition::TRANSITION_CLEANUP, service_call_timeout),
91 void reset_lifecycle_nodes(
92 const std::vector<std::string> & node_names,
93 const std::chrono::seconds service_call_timeout,
96 for (
const auto & node_name : node_names) {
97 resetLifecycleNode(node_name, service_call_timeout, retries);