Acercamiento a entrenamiento
Semana 5
Durante esta semana no he podido dedicarle mucho tiempo; aun así, he hecho modificaciones y añadido un nuevo fichero para crear un dataset.
PythonAPI - Sensores
En esta semana he usado otros dos sensores que no había utilizado anteriormente, siendo estos el GNSS y la IMU.
El siguiente código es de la IMU.
def imu_callback(data):
print(f"acc -> {data.accelerometer}")
print(f"gyro -> {data.gyroscope}")
imu_bp = world.get_blueprint_library().find('sensor.other.imu')
imu_bp.set_attribute('noise_accel_stddev_x', '0.0')
imu_bp.set_attribute('noise_accel_stddev_y', '0.0')
imu_bp.set_attribute('noise_accel_stddev_z', '0.0')
imu_bp.set_attribute('noise_gyro_stddev_x', '0.0')
imu_bp.set_attribute('noise_gyro_stddev_y', '0.0')
imu_bp.set_attribute('noise_gyro_stddev_z', '0.0')
imu_transform = carla.Transform(carla.Location(x=0, z=0))
imu = world.spawn_actor(imu_bp, imu_transform, attach_to=vehicle)
imu.listen(lambda data: imu_callback(data))
Y el codigo del GNSS:
def gnss_callback(position):
print(f"latitude -> {position.latitude} - longitude -> {position.longitude} - altitude -> {position.altitude}")
gnss_bp = world.get_blueprint_library().find('sensor.other.gnss')
gnss_bp.set_attribute('noise_alt_bias', '0.0')
gnss_bp.set_attribute('noise_alt_stddev', '0.0')
gnss_bp.set_attribute('noise_lat_bias', '0.0')
gnss_bp.set_attribute('noise_lat_stddev', '0.0')
gnss_bp.set_attribute('noise_lon_bias', '0.0')
gnss_bp.set_attribute('noise_lon_stddev', '0.0')
gnss_bp.set_attribute('noise_seed', '0.0')
gnss_bp.set_attribute('sensor_tick', '0.0')
gnss_transform = carla.Transform(carla.Location(x=0, z=0))
gnss = world.spawn_actor(gnss_bp, gnss_transform, attach_to=vehicle)
gnss.listen(lambda position: gnss_callback(position))
PythonAPI - Creando un dataset
Además de lo anterior, he creado un código que captura las imágenes de la cámara y también crea un archivo .csv con el steering aplicado en cada frame. El archivo .csv tiene la siguiente forma:
| Frame | Steer |
|---|---|
| 9822 | -0.2 |
| 9833 | -0.18 |
| 9834 | -0.02 |
Esto se hace desde el callback de la cámara:
def camera_callback(image, vehicle):
steering = vehicle.get_control().steer
frame = image.frame
image.save_to_disk(os.path.join(save_path, f"frame_{frame}.png"))
frames.append(frame)
steerings.append(steering)
Y para guardar los datos en un .csv uso la librería pandas:
def save_data():
df = pd.DataFrame({
"frame": frames,
"steering": steerings
})
df.to_csv(os.path.join(save_path, "labels.csv"), index=False)
El mayor problema con este script es el siguiente: para la recolección de datos el coche ha de moverse, por eso, en un principio pensé en utilizar el autopilot que nos proporciona CARLA, pero al parecer no es suficiente, ya que este pierde el control en curvas y se estrella. Durante esta semana lo cambiaré a control manual.