carla/PythonAPI/example.py

115 lines
3.1 KiB
Python
Executable File

#!/usr/bin/env python
import sys
sys.path.append(
'PythonAPI/carla-0.9.0-py%d.%d-linux-x86_64.egg' % (sys.version_info.major,
sys.version_info.minor))
import carla
import os
import random
import time
# This function is here because this functionality haven't been ported to the
# new API yet.
def save_to_disk(image):
"""Save this image to disk (requires PIL installed)."""
filename = '_images/{:0>6d}_{:s}.png'.format(image.frame_number, image.type)
try:
from PIL import Image as PImage
except ImportError:
raise RuntimeError(
'cannot import PIL, make sure pillow package is installed')
image = PImage.frombytes(
mode='RGBA',
size=(image.width, image.height),
data=image.raw_data,
decoder_name='raw')
color = image.split()
image = PImage.merge("RGB", color[2::-1])
folder = os.path.dirname(filename)
if not os.path.isdir(folder):
os.makedirs(folder)
image.save(filename)
def main(add_a_camera, enable_autopilot):
client = carla.Client('localhost', 2000)
client.set_timeout(2000)
print('client version: %s' % client.get_client_version())
print('server version: %s' % client.get_server_version())
world = client.get_world()
blueprint_library = world.get_blueprint_library();
vehicle_blueprints = blueprint_library.filter('vehicle');
actor_list = []
try:
while True:
bp = random.choice(vehicle_blueprints)
if bp.contains_attribute('number_of_wheels'):
n = bp.get_attribute('number_of_wheels')
print('spawning vehicle %r with %d wheels' % (bp.id, n))
color = random.choice(bp.get_attribute('color').recommended_values)
bp.set_attribute('color', color)
transform = carla.Transform(
carla.Location(x=180.0, y=199.0, z=40.0),
carla.Rotation(yaw=0.0))
vehicle = world.try_spawn_actor(bp, transform)
if vehicle is None:
continue
actor_list.append(vehicle)
print(vehicle)
if add_a_camera:
add_a_camera = False
camera_bp = blueprint_library.find('sensor.camera')
# camera_bp.set_attribute('post_processing', 'Depth')
camera_transform = carla.Transform(carla.Location(x=0.4, y=0.0, z=1.4))
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)
camera.listen(save_to_disk)
if enable_autopilot:
vehicle.set_autopilot()
else:
vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=-1.0))
time.sleep(3)
print('vehicle at %s' % vehicle.get_location())
vehicle.set_location(carla.Location(x=220, y=199, z=38))
print('is now at %s' % vehicle.get_location())
time.sleep(2)
finally:
for actor in actor_list:
actor.destroy()
if __name__ == '__main__':
main(add_a_camera=False, enable_autopilot=True)