Wait for multiple services to appear
I'm using ROS2 Bouncy.
I have a node which has to send multiple service requests. Before starting the execution loop I want the node to find all the services it needs. My problem is that the node waits only for 2 out of 3 services.
This is how I'm initializing it.
auto node = rclcpp::Node::make_shared("my_client_node") ;
auto client_1 = node->create_client<Service1>("get_service_1") ;
auto client_2 = node->create_client<Service2>("get_service_2") ;
auto client_3 = node->create_client<Service3>("get_service_3") ;
while (!client_1->wait_for_service(std::chrono::seconds(1)) &&
!client_2->wait_for_service(std::chrono::seconds(1)) &&
!client_3->wait_for_service(std::chrono::seconds(1))
) {
if (!rclcpp::ok()) {
RCLCPP_ERROR(node->get_logger(), "ros client interrupted while waiting for services to appear.") ;
return ;
}
RCLCPP_INFO(node->get_logger(), "waiting for service to appear...") ;
}
//Start loop... do stuff with the clients...
Besides this node there are other 2 nodes, one provides 2 services and the other the remaining service. I noticed that the while condition is not verified if the node with 2 services is on, even if the other is not running.
Is there something wrong in this code ?
Asked by alsora on 2018-09-06 17:28:47 UTC
Comments