Performance: Creating a service client
This affects the responsiveness and latency of service calls in a ROS system, impacting how quickly nodes can communicate and respond.
ros::ServiceClient client = nh.serviceClient<package::ServiceType>("service_name"); for (int i = 0; i < 1000; i++) { package::ServiceType srv; // fill srv request client.call(srv); }
for (int i = 0; i < 1000; i++) { ros::ServiceClient client = nh.serviceClient<package::ServiceType>("service_name"); package::ServiceType srv; // fill srv request client.call(srv); }
| Pattern | Setup Overhead | Call Latency | CPU Usage | Verdict |
|---|---|---|---|---|
| Create client inside loop | High (repeated) | High (due to setup) | High | [X] Bad |
| Create client once outside loop | Low (single) | Low | Low | [OK] Good |
import rospy
from example.srv import ExampleService
def call_service():
rospy.wait_for_service('example_service')
client = rospy.ServiceProxy('example_service', ExampleService)
response = client(42)
print(response.success)
call_service()import rospy
from example.srv import ExampleService
client = rospy.ServiceProxy('example_service', ExampleService)
response = client(10)
print(response.result)Pass the test and this pattern moves unknown