2727import threading
2828import time
2929
30- from roslibpy import Message , Ros , Topic
30+ from roslibpy import Message , Ros , Service , ServiceRequest , Topic
31+
32+
33+ def service_ping (ros ):
34+ """Distro-agnostic rosapi round-trip used to measure service latency.
35+
36+ Calls ``/rosapi/get_time`` but, unlike ``Ros.get_time()``, does not parse
37+ the response (whose shape differs between ROS 1 ``secs``/``nsecs`` and ROS 2
38+ ``sec``/``nanosec``), so the benchmark runs unchanged against either."""
39+ service = Service (ros , "/rosapi/get_time" , "rosapi/GetTime" )
40+ return service .call (ServiceRequest (), timeout = 5 )
3141
3242
3343CASES = {
@@ -115,7 +125,7 @@ def wait_rosbridge_ready(transport, args):
115125 ros = Ros (args .host , args .port , transport = transport )
116126 ros .run ()
117127 wait_connected (ros , args .connect_timeout )
118- ros . get_time ( )
128+ service_ping ( ros )
119129 return
120130 except Exception as error :
121131 last_error = error
@@ -133,11 +143,11 @@ def wait_rosbridge_ready(transport, args):
133143
134144def service_latency (ros , count , warmup ):
135145 for _ in range (warmup ):
136- ros . get_time ( )
146+ service_ping ( ros )
137147 timings = []
138148 for _ in range (count ):
139149 start = time .perf_counter ()
140- ros . get_time ( )
150+ service_ping ( ros )
141151 timings .append (time .perf_counter () - start )
142152 return timings
143153
0 commit comments