Drivingsimulator/spawn_walkers_carla.py
2025-02-25 08:42:27 +00:00

70 lines
2.7 KiB
Python

import carla
import random
# Angenommen, wir haben bereits "world" und "blueprint_library" erhalten
# world = client.get_world()
# blueprint_library = world.get_blueprint_library()
# Holen Sie sich die Blueprints für Fußgänger und deren Steuerungs-KI
walker_blueprints = blueprint_library.filter("walker.pedestrian.*")
controller_bp = blueprint_library.find('controller.ai.walker')
# Anzahl der zu spawnenden Fußgänger festlegen
num_of_walkers = 50
# Erstellen der Spawn-Punkte für die Fußgänger (hier zufällig mit world.get_random_location_from_navigation())
spawn_points = []
for i in range(num_of_walkers):
spawn_loc = world.get_random_location_from_navigation()
if spawn_loc is not None:
spawn_points.append(carla.Transform(spawn_loc, carla.Rotation(yaw=random.uniform(-180.0, 180.0))))
# Spawn der Fußgänger als Batch
walkers_id = []
batch = []
for spawn_point in spawn_points:
walker_bp = random.choice(walker_blueprints)
# Einige Fußgänger-Blueprints haben spezielle Attribute, z. B. Unverwundbarkeit
# Diese können nach Bedarf angepasst werden
if walker_bp.has_attribute('is_invincible'):
walker_bp.set_attribute('is_invincible', 'false') # Fußgänger können umgestoßen werden
batch.append(carla.command.SpawnActor(walker_bp, spawn_point))
results = client.apply_batch_sync(batch, True)
for r in results:
if r.error:
print("Fehler beim Spawnen des Fußgängers:", r.error)
else:
walkers_id.append(r.actor_id)
# Erstellen eines KI-Controllers für jeden Fußgänger
controllers_id = []
batch = []
for wid in walkers_id:
# Ein Controller wird mit dem jeweiligen Fußgänger verbunden (dritter Parameter ist die ID des Eltern-Actors)
batch.append(carla.command.SpawnActor(controller_bp, carla.Transform(), wid))
results = client.apply_batch_sync(batch, True)
for r in results:
if r.error:
print("Fehler beim Spawnen des Controllers:", r.error)
else:
controllers_id.append(r.actor_id)
# Holen Sie sich die neu erstellten Fußgänger und ihre Controller
all_actors = world.get_actors(walkers_id + controllers_id)
walkers_list = all_actors.filter("*walker.pedestrian*")
controllers_list = all_actors.filter("*controller.ai.walker*")
# Starten der Controller, damit sich die Fußgänger zufällig bewegen
for controller in controllers_list:
# Starten des KI-Controllers
controller.start()
# Zufälliges Ziel für den Fußgänger festlegen
controller.go_to_location(world.get_random_location_from_navigation())
# Geschwindigkeit des Fußgängers einstellen (in m/s)
controller.set_max_speed(1.4)
print(f"Erfolgreich {len(walkers_list)} Fußgänger mit Controllern gespawnt.")