forked from zhuli90799/Fahrsimulator
70 lines
2.7 KiB
Python
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.")
|