MCPcopy Create free account
hub / github.com/OpenDriveLab/DriveAdapter / CarlaSyncMode

Class CarlaSyncMode

camera_calibration/collect_data_for_calibration.py:336–384  ·  view source on GitHub ↗

Context manager to synchronize output from different sensors. Synchronous mode is enabled as long as we are inside this context with CarlaSyncMode(world, sensors) as sync_mode: while True: data = sync_mode.tick(timeout=1.0)

Source from the content-addressed store, hash-verified

334# ==============================================================================
335
336class CarlaSyncMode(object):
337 """
338 Context manager to synchronize output from different sensors. Synchronous
339 mode is enabled as long as we are inside this context
340
341 with CarlaSyncMode(world, sensors) as sync_mode:
342 while True:
343 data = sync_mode.tick(timeout=1.0)
344
345 """
346 def __init__(self, world, *sensors, **kwargs):
347 self.world = world
348 self.sensors = sensors
349 self.frame = None
350 self.delta_seconds = 1.0 / kwargs.get('fps', 20)
351 self._queues = []
352 self._settings = None
353
354 def __enter__(self):
355 self._settings = self.world.get_settings()
356 self.frame = self.world.apply_settings(carla.WorldSettings(
357 no_rendering_mode=False,
358 synchronous_mode=True,
359 fixed_delta_seconds=self.delta_seconds))
360
361 def make_queue(register_event):
362 q = queue.Queue()
363 register_event(q.put)
364 self._queues.append(q)
365
366 make_queue(self.world.on_tick)
367 for sensor in self.sensors:
368 make_queue(sensor.listen)
369 return self
370
371 def tick(self, timeout):
372 self.frame = self.world.tick()
373 data = [self._retrieve_data(q, timeout) for q in self._queues]
374 assert all(x.frame == self.frame for x in data)
375 return data
376
377 def __exit__(self, *args, **kwargs):
378 self.world.apply_settings(self._settings)
379
380 def _retrieve_data(self, sensor_queue, timeout):
381 while True:
382 data = sensor_queue.get(timeout=timeout)
383 if data.frame == self.frame:
384 return data
385
386# ==============================================================================
387# -- Main Function--------------------------------------------------------------

Callers 1

mainFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected