15 #include "nav2_util/lifecycle_service_client.hpp"
21 #include "lifecycle_msgs/srv/change_state.hpp"
22 #include "lifecycle_msgs/srv/get_state.hpp"
24 using nav2::generate_internal_node;
25 using std::chrono::milliseconds;
26 using std::make_shared;
28 using namespace std::chrono_literals;
33 bool LifecycleServiceClient::change_state(
34 const uint8_t transition,
35 const milliseconds transition_timeout,
36 const milliseconds wait_for_service_timeout)
38 if (!change_state_.wait_for_service(wait_for_service_timeout)) {
39 throw std::runtime_error(
"change_state service is not available!");
42 auto request = std::make_shared<lifecycle_msgs::srv::ChangeState::Request>();
43 request->transition.id = transition;
44 if (transition_timeout > 0ms) {
45 auto response = change_state_.invoke(request, transition_timeout);
46 return response.get();
48 auto response = std::make_shared<lifecycle_msgs::srv::ChangeState::Response>();
49 return change_state_.invoke(request, response);
53 uint8_t LifecycleServiceClient::get_state(
54 const milliseconds timeout)
56 if (!get_state_.wait_for_service(timeout)) {
57 throw std::runtime_error(
"get_state service is not available!");
60 auto request = std::make_shared<lifecycle_msgs::srv::GetState::Request>();
61 auto result = get_state_.invoke(request, timeout);
62 return result->current_state.id;