1 minute read

Semana 4

Durante esta semana me he centrado en aprender a usar la PythonAPI, sobre todo en el uso de sensores y actores, y en comprender cómo funciona la capacidad de grabación de CARLA.

PythonAPI - Actores

Durante esta semana he hecho un pequeño script que me permite crear un coche, añadirle una velocidad y un steering.


bp = world.get_blueprint_library().filter('charger_2020')[0]
vehicle = world.spawn_actor(bp, random.choice(world.get_map().get_spawn_points()))
actor_list.append(vehicle)

Añadido a esto, he creado tanto una cámara como un LIDAR; estos dos deben estar unidos al coche.

camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')
camera_bp.set_attribute('image_size_x', '800')
camera_bp.set_attribute('image_size_y', '600')
camera_bp.set_attribute('fov', '90')

camera_transform = carla.Transform(
    carla.Location(x=1.5, y=0.0, z=1.4),
    carla.Rotation(pitch=0)
)

camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)

lidar_bp = world.get_blueprint_library().find('sensor.lidar.ray_cast')

lidar_bp.set_attribute('channels', '32')
lidar_bp.set_attribute('range', '50')
lidar_bp.set_attribute('rotation_frequency', '10')
lidar_bp.set_attribute('points_per_second', '50000')

lidar_transform = carla.Transform(carla.Location(x=0, z=2.5))

lidar = world.spawn_actor(lidar_bp, lidar_transform, attach_to=vehicle)

Por último, tanto el LIDAR como la cámara pueden tener un callback para realizar acciones con sus datos. En este caso, al solo querer probar su funcionamiento, lo que he hecho es guardar los datos en mi ordenador.


def camera_callback(image, display_name="RGB CAMERA"):
    image.save_to_disk(os.path.join(save_path, f"frame_{image.frame:06d}.png"))

def lidar_callback(point_cloud):

    data = np.frombuffer(point_cloud.raw_data, dtype=np.float32)
    data = data.reshape((-1, 4))

    filename = os.path.join(save_path, f"lidar_{point_cloud.frame:06d}.txt")

    np.savetxt(filename, data, fmt="%.4f")

PythonAPI - Recording

Para probar la función de record y replay he utilizado el ejemplo de grabación proporcionado por CARLA; además, he utilizado su código para simular un coche dirigido por mí.

También he estado analizando el código de ejemplo para entender qué partes son necesarias en caso de querer aplicarlo yo. Las partes clave son:

#Start
client.start_recorder(args.recorder_filename)

#End
client.stop_recorder()

Updated: