diff --git a/carla_environment.py b/carla_environment.py index 4bfa8c7d3055e82d6aacbeb870ab35be4debc613..915a157602f2ae131c0914beaf8129cc847590d8 100644 --- a/carla_environment.py +++ b/carla_environment.py @@ -1,17 +1,18 @@ """ Carla.org environment""" import glob import os -import sys import random +import sys + import numpy as np import pygame -import math -import atexit + from steering_wheel import Controller # find carla module try: - sys.path.append(glob.glob('/media/armin/Games/carla/PythonAPI/carla/dist/carla-*%d.%d-%s.egg' % ( + CARLA_PATH='/media/armin/Games/carla/PythonAPI/carla/dist/carla-*%d.%d-%s.egg' + sys.path.append(glob.glob(CARLA_PATH % ( sys.version_info.major, sys.version_info.minor, 'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0]) @@ -20,31 +21,37 @@ except IndexError: import carla + class Camera: """ Add camera sensor to the carla world """ sensor = None - display = None surface = None + display = None width = None height = None surface = None + camera_type = None - def __init__(self, world, width=640, height=480): + def __init__(self, world, camera_type='rgb', width=1280, height=720): self.width = width self.height = height + self.camera_type = camera_type self.display = pygame.display.set_mode( (width, height), pygame.HWSURFACE | pygame.DOUBLEBUF) self.display.fill((0,0,0)) - camera_blueprint = world.world.get_blueprint_library().find('sensor.camera.rgb') - camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) + camera_blueprint = world.world.get_blueprint_library().find('sensor.camera.' + camera_type) camera_blueprint.set_attribute('image_size_x', f'{self.width}') camera_blueprint.set_attribute('image_size_y', f'{self.height}') - camera_blueprint.set_attribute('fov', '110') + camera_blueprint.set_attribute('fov', '95') + camera_transform = carla.Transform(carla.Location(x=-3.0, z=2.2)) self.sensor = world.world.spawn_actor(camera_blueprint, camera_transform, attach_to=world.player) self.sensor.listen(lambda data: self.process_img(data)) def process_img(self, data): + """ Callback for rgb-camera sensor. """ + if self.camera_type == 'semantic_segmentation': + data.convert(carla.ColorConverter.CityScapesPalette) array = np.frombuffer(data.raw_data, dtype=np.dtype("uint8")) array = np.reshape(array, (self.height, self.width, 4)) array = array[:, :, :3] @@ -52,10 +59,12 @@ class Camera: self.surface = pygame.surfarray.make_surface(array.swapaxes(0, 1)) def on_update(self): + """ Update the pygame display. """ if self.surface is not None: self.display.blit(self.surface, (0, 0)) pygame.display.flip() + class World: """ Wrapper for the carla environment, incl. player/vehicle """ player = None @@ -70,47 +79,61 @@ class World: self.reset() def reset(self): + """ Remove and create new player/vehicle. """ self.destroy() self.spawn_player() def spawn_player(self): + """ Add a vehicle to the world. """ while self.player is None: - blueprint = random.choice(self.blueprint_library.filter('vehicle')) + blueprint = random.choice(self.blueprint_library.filter('model3')) position = random.choice(self.spawn_points) self.player = self.world.try_spawn_actor(blueprint, position) + start_location = self.player.get_location() + print(str(start_location)) + # start_location.x = 288.0 + # start_location.y = 55.0 + # self.player.set_location(start_location) def destroy(self): + """ Remove vehicle from the world. """ if self.player is not None: self.player.destroy() def step(self, action): + """ Apply controls to vehicle. """ self.player.apply_control(action) - + # print(str(self.player.get_location())) + # print(str(self.player.get_velocity())) class CarlaEnvironment: world = None client = None - def __init__(self, host="127.0.0.1", port=2000, width=1280, height=720): + def __init__(self, host="127.0.0.1", port=2000): self.client = carla.Client(host, port) self.client.set_timeout(2.0) + self.client.load_world('Town07') self.world = World(self.client.get_world()) def step(self, action): - control = carla.VehicleControl(throttle=action[0], steer=action[2], brake=action[1]) + control = carla.VehicleControl(throttle=action[0], steer=action[2], brake=action[1], reverse=action[3]) self.world.step(control) - if __name__ == "__main__": + LOCALHOST="127.0.0.1" + SERVER="192.168.188.20" + pygame.init() + clock = pygame.time.Clock() - env = CarlaEnvironment() - cam = Camera(env.world) + env = CarlaEnvironment(host=LOCALHOST) + cam = Camera(env.world, camera_type='semantic_segmentation') ctrl = Controller() - running = True while ctrl.is_running(): + clock.tick(60) ctrl.on_update() env.step(ctrl.get_action()) cam.on_update()