def run_carla_client(args): with make_connection(CarlaClient, args.host, args.port, timeout=15) as client: logging.info('CarlaClient connected') filename = '_images/episode_{:0>3d}/image_{:0>5d}.png' frames_per_episode = 300 episode = 0 while True: episode += 1 settings = CarlaSettings() settings.set(SendNonPlayerAgentsInfo=True,SynchronousMode=args.synchronous) settings.randomize_seeds() camera = Camera('DefaultCamera') camera.set_image_size(300, 200) # Do not change this, hard-coded in test. settings.add_camera(camera) logging.debug('sending CarlaSettings:\n%s', settings) logging.info('new episode requested') scene = client.request_new_episode(settings) number_of_player_starts = len(scene.player_start_spots) player_start = random.randint(0, max(0, number_of_player_starts - 1)) logging.info( 'start episode at %d/%d player start (%d frames)', player_start, number_of_player_starts, frames_per_episode) client.start_episode(player_start) use_ai_control = (random.random() < 0.5) reverse = (random.random() < 0.2) for frame in range(0, frames_per_episode): logging.debug('reading measurements...') measurements, images = client.read_measurements() logging.debug('received data of %d agents', len(measurements.non_player_agents)) assert len(images) == 1 assert (images[0].width, images[0].height) == (camera.ImageSizeX, camera.ImageSizeY) if args.images_to_disk: images[0].save_to_disk(filename.format(episode, frame)) logging.debug('sending control...') control = measurements.player_measurements.ai_control if not use_ai_control: control.steer = random.uniform(-1.0, 1.0) control.throttle = 0.3 control.hand_brake = False control.reverse = reverse client.send_control( steer=control.steer, throttle=control.throttle, brake=control.brake, hand_brake=control.hand_brake, reverse=control.reverse)
def run_carla_client(self, carla_settings, number_of_episodes, number_of_frames, use_autopilot_control=None): with make_connection(CarlaClient, self.args.host, self.args.port, timeout=15) as client: logging.info('CarlaClient connected, running %d episodes', number_of_episodes) for _ in range(0, number_of_episodes): carla_settings.randomize_seeds() carla_settings.randomize_weather() logging.debug('sending CarlaSettings:\n%s', carla_settings) logging.info('new episode requested') scene = client.load_settings(carla_settings) number_of_player_starts = len(scene.player_start_spots) player_start = random.randint( 0, max(0, number_of_player_starts - 1)) logging.info('start episode at %d/%d player start (%d frames)', player_start, number_of_player_starts, number_of_frames) client.start_episode(player_start) if use_autopilot_control is None: use_autopilot_control = (random.random() < 0.5) reverse = (random.random() < 0.2) for _ in range(0, number_of_frames): logging.debug('reading measurements...') measurements, sensor_data = client.read_data() images = [ x for x in sensor_data.values() if isinstance(x, Image) ] number_of_agents = len(measurements.non_player_agents) logging.debug('received data of %d agents', number_of_agents) logging.debug('received %d images', len(images)) if len(sensor_data) != len(carla_settings._sensors): raise RuntimeError( 'received %d, expected %d' % (len(sensor_data), len(carla_settings._sensors))) logging.debug('sending control...') control = measurements.player_measurements.autopilot_control if not use_autopilot_control: control.steer = random.uniform(-1.0, 1.0) control.throttle = 0.3 control.hand_brake = False control.reverse = reverse client.send_control(steer=control.steer, throttle=control.throttle, brake=control.brake, hand_brake=control.hand_brake, reverse=control.reverse)
def run_carla_client(self, carla_settings, number_of_episodes, number_of_frames, use_ai_control=None): with make_connection(CarlaClient, self.args.host, self.args.port, timeout=15) as client: logging.info('CarlaClient connected, running %d episodes', number_of_episodes) for _ in range(0, number_of_episodes): carla_settings.randomize_seeds() carla_settings.randomize_weather() logging.debug('sending CarlaSettings:\n%s', carla_settings) logging.info('new episode requested') scene = client.request_new_episode(carla_settings) number_of_player_starts = len(scene.player_start_spots) player_start = random.randint(0, max(0, number_of_player_starts - 1)) logging.info( 'start episode at %d/%d player start (%d frames)', player_start, number_of_player_starts, number_of_frames) client.start_episode(player_start) if use_ai_control is None: use_ai_control = (random.random() < 0.5) reverse = (random.random() < 0.2) for _ in range(0, number_of_frames): logging.debug('reading measurements...') measurements, images = client.read_measurements() number_of_agents = len(measurements.non_player_agents) logging.debug('received data of %d agents', number_of_agents) logging.debug('received %d images', len(images)) if len(images) != len(carla_settings._cameras): raise RuntimeError('received %d images, expected %d' % (len(images), len(carla_settings._cameras))) logging.debug('sending control...') control = measurements.player_measurements.ai_control if not use_ai_control: control.steer = random.uniform(-1.0, 1.0) control.throttle = 0.3 control.hand_brake = False control.reverse = reverse client.send_control( steer=control.steer, throttle=control.throttle, brake=control.brake, hand_brake=control.hand_brake, reverse=control.reverse)
def main(): argparser = argparse.ArgumentParser(description=__doc__) argparser.add_argument( '-v', '--verbose', action='store_true', dest='debug', help='print debug information') argparser.add_argument( '--log', metavar='LOG_FILE', default=None, help='print output to file') argparser.add_argument( '--host', metavar='H', default='127.0.0.1', help='IP of the host server (default: 127.0.0.1)') argparser.add_argument( '-p', '--port', metavar='P', default=2000, type=int, help='TCP port to listen to (default: 2000)') argparser.add_argument( '-s', '--synchronous', action='store_true', help='enable synchronous mode') argparser.add_argument( '-i', '--images-to-disk', action='store_true', help='save images to disk') argparser.add_argument( '--echo', action='store_true', help='start a client that just echoes what the server sends') argparser.add_argument( '-c', '--console', action='store_true', help='start the client console') args = argparser.parse_args() name = 'echo_client: ' if args.echo else 'carla_client: ' logging_config = { 'format': name + '%(levelname)s: %(message)s', 'level': logging.DEBUG if args.debug else logging.INFO } if args.log: logging_config['filename'] = args.log logging_config['filemode'] = 'w+' logging.basicConfig(**logging_config) logging.info('listening to server %s:%s', args.host, args.port) if args.console: cmd = console.CarlaClientConsole(args) try: cmd.cmdloop() finally: cmd.cleanup() return while True: try: if args.echo: with make_connection(TCPClient, args.host, args.port, timeout=15) as client: while True: logging.info('reading...') data = client.read() if not data: raise RuntimeError('failed to read data from server') logging.info('writing...') client.write(data) else: run_carla_client(args) except AssertionError as assertion: raise assertion except Exception as exception: logging.error('exception: %s', exception) time.sleep(1)
def run_carla_client(args): with make_connection(CarlaClient, args.host, args.port, timeout=15) as client: logging.info('CarlaClient connected') filename = '_out/test_episode_{:0>4d}/{:s}/{:0>6d}' frames_per_episode = 300 episode = 0 while True: episode += 1 settings = CarlaSettings() settings.set(SendNonPlayerAgentsInfo=True, SynchronousMode=args.synchronous) settings.randomize_seeds() camera = sensor.Camera('DefaultCamera') camera.set_image_size(300, 200) # Do not change this, hard-coded in test. settings.add_sensor(camera) lidar = sensor.Lidar('DefaultLidar') settings.add_sensor(lidar) logging.debug('sending CarlaSettings:\n%s', settings) logging.info('new episode requested') scene = client.load_settings(settings) number_of_player_starts = len(scene.player_start_spots) player_start = random.randint(0, max(0, number_of_player_starts - 1)) logging.info( 'start episode at %d/%d player start (%d frames)', player_start, number_of_player_starts, frames_per_episode) client.start_episode(player_start) use_autopilot_control = (random.random() < 0.5) reverse = (random.random() < 0.2) for frame in range(0, frames_per_episode): logging.debug('reading measurements...') measurements, sensor_data = client.read_data() images = [x for x in sensor_data.values() if isinstance(x, sensor.Image)] logging.debug('received data of %d agents', len(measurements.non_player_agents)) if len(images) > 0: assert (images[0].width, images[0].height) == (camera.ImageSizeX, camera.ImageSizeY) if args.images_to_disk: for name, data in sensor_data.items(): data.save_to_disk(filename.format(episode, name, frame)) logging.debug('sending control...') control = measurements.player_measurements.autopilot_control if not use_autopilot_control: control.steer = random.uniform(-1.0, 1.0) control.throttle = 0.3 control.hand_brake = False control.reverse = reverse client.send_control( steer=control.steer, throttle=control.throttle, brake=control.brake, hand_brake=control.hand_brake, reverse=control.reverse)