commit 49be50a376d847b7484a547a1d6438467d3258b3 Author: Liyuan Zhu Date: Tue Feb 25 08:42:27 2025 +0000 上传文件至 / diff --git a/spawn_walkers_carla.py b/spawn_walkers_carla.py new file mode 100644 index 0000000..6eb2dba --- /dev/null +++ b/spawn_walkers_carla.py @@ -0,0 +1,69 @@ +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.")