Merged spawn pedestrians in spawn npc
This commit is contained in:
parent
0be4b79c10
commit
4e333b44bd
|
@ -47,6 +47,12 @@ def main():
|
|||
default=10,
|
||||
type=int,
|
||||
help='number of vehicles (default: 10)')
|
||||
argparser.add_argument(
|
||||
'-w', '--number-of-walkers',
|
||||
metavar='W',
|
||||
default=50,
|
||||
type=int,
|
||||
help='number of walkers (default: 50)')
|
||||
argparser.add_argument(
|
||||
'-d', '--delay',
|
||||
metavar='D',
|
||||
|
@ -117,14 +123,74 @@ def main():
|
|||
|
||||
print('spawned %d vehicles, press Ctrl+C to exit.' % len(actor_list))
|
||||
|
||||
# Spawn Walkers
|
||||
print (args.number_of_walkers)
|
||||
spawn_points = []
|
||||
for i in range(args.number_of_walkers):
|
||||
spawn_point = carla.Transform()
|
||||
spawn_point.location = world.get_random_location_from_navigation()
|
||||
spawn_points.append(spawn_point)
|
||||
batch = []
|
||||
info = []
|
||||
for spawn_point in spawn_points:
|
||||
walker_bp = random.choice(world.get_blueprint_library().filter('walker.pedestrian.*'))
|
||||
batch.append(SpawnActor(walker_bp, spawn_point))
|
||||
|
||||
# apply
|
||||
results = client.apply_batch_sync(batch, True)
|
||||
for i in range(len(results)):
|
||||
if results[i].error:
|
||||
logging.error(results[i].error)
|
||||
else:
|
||||
info.append({ "id":results[i].actor_id, "trans":spawn_points[i], "con":None })
|
||||
|
||||
# Spawn walker controller
|
||||
batch = []
|
||||
walker_controller_bp = world.get_blueprint_library().find('controller.ai.walker')
|
||||
for i in range(len(info)):
|
||||
batch.append(SpawnActor(walker_controller_bp, carla.Transform(), info[i]["id"]))
|
||||
# apply
|
||||
results = client.apply_batch_sync(batch, True)
|
||||
for i in range(len(results)):
|
||||
if results[i].error:
|
||||
logging.error(results[i].error)
|
||||
else:
|
||||
info[i]["con"] = results[i].actor_id
|
||||
|
||||
# get whole list of actors (child and parents)
|
||||
all_id = []
|
||||
for i in range(len(info)):
|
||||
all_id.append(info[i]["id"])
|
||||
all_id.append(info[i]["con"])
|
||||
all_actors = world.get_actors(all_id)
|
||||
|
||||
# initialize each controller and set target to walk to
|
||||
for i in range(len(all_id)):
|
||||
# check it if it is a controller or a walker
|
||||
index = -1
|
||||
for j in range(len(info)):
|
||||
if (info[j]["con"] == all_id[i]):
|
||||
index = j
|
||||
break
|
||||
if (index != -1):
|
||||
# init
|
||||
all_actors[i].start(info[index]["trans"].location)
|
||||
# walk to random point
|
||||
target = world.get_random_location_from_navigation()
|
||||
all_actors[i].go_to_location(target)
|
||||
|
||||
print('spawned %d walkers, press Ctrl+C to exit.' % len(info))
|
||||
|
||||
while True:
|
||||
world.wait_for_tick()
|
||||
|
||||
finally:
|
||||
|
||||
print('\ndestroying %d actors' % len(actor_list))
|
||||
print('\ndestroying %d vehicles' % len(actor_list))
|
||||
client.apply_batch([carla.command.DestroyActor(x) for x in actor_list])
|
||||
|
||||
print('\ndestroying %d walkers' % len(info))
|
||||
client.apply_batch([carla.command.DestroyActor(x) for x in all_id])
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
|
|
Loading…
Reference in New Issue