看着carla的官网流程有点懵逼,就去搜大家怎么写的,大概总结出了一个初步的框架,先上代码:
import carla
import random
import glob
import os
import sys
import time
import random
import cv2
import numpy as np
try:
sys.path.append(glob.glob('../dist/carla-*%d.%d-%s.egg' % (
sys.version_info.major,
sys.version_info.minor,
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
pass
actor_list = []
try:
synchronous_master = False
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)
world = client.get_world()
client.load_world('Town02')
blueprint = world.get_blueprint_library()
ego_vehicle_bp = blueprint.find('vehicle.audi.a2') # 找到奔驰的蓝图
ego_vehicle_bp.set_attribute('color', '52, 192, 235') # 给奔驰上颜色
ego_vehicle_bp_2 = blueprint.find('vehicle.audi.etron')
ego_vehicle_bp_2.set_attribute('color', '79, 235, 52')
# 找到所有可以作为初始点的位置并随机选择一个
transform = random.choice(world.get_map().get_spawn_points())
# 设置固定点
# transform = carla.Transform(carla.Location(x=-13, y=80, z=2), carla.Rotation(yaw=90))
# 在这个位置生成汽车
ego_vehicle_0 = world.spawn_actor(ego_vehicle_bp, transform)
ego_vehicle_2 = world.spawn_actor(ego_vehicle_bp,
carla.Transform(carla.Location(x=-40, y=1, z=2), carla.Rotation(yaw=90)))
# set walker as spawn_actor
walker_bp = random.choice(blueprint.filter('walker.pedestrian.*'))
spawn_point = carla.Transform(carla.Location(x=-15, y=124.1, z=2))
# spawn_point = carla.Transform(carla.Location(x=152, y=62.3, z=2),carla.Rotation(yaw=-90))
pedestrain = world.spawn_actor(walker_bp, spawn_point)
control = carla.WalkerControl()
revert_flag = False
while True:
world.wait_for_tick()
control = carla.WalkerControl()
control.direction.y = 0
control.direction.z = 0
control.speed = 3
if (pedestrain.get_location().x > 10):
revert_flag = True
if (pedestrain.get_location().x < -10):
revert_flag = False
if (revert_flag):
control.direction.x = -1
else:
control.direction.x = 1
pedestrain.apply_control(control)
time.sleep(1)
# Debug Tool
# logging.warning(pedestrain.get_location())
# print(,control.direction.x,revert_flag)
actor_list.append(ego_vehicle_0)
actor_list.append(ego_vehicle_2)
actor_list.append(pedestrain)
finally:
if synchronous_master:
settings = world.get_settings()
settings.synchronous_mode = False
settings.fixed_delta_seconds = None
world.apply_settings(settings)
for actor in actor_list:
actor.destroy()
time.sleep(0.5)
print(actor.id, "is destroyed.")
将上述代码分割成两段:模板+自己的内容
模板:
import carla
import random
import glob
import os
import sys
import time
import random
import cv2
import numpy as np
try:
sys.path.append(glob.glob('../dist/carla-*%d.%d-%s.egg' % (
sys.version_info.major,
sys.version_info.minor,
'win-amd64' if os.name == 'nt' else 'linux-x86_64'))[0])
except IndexError:
pass
actor_list = []
try:
自己填写内容
finally:
for actor in actor_list:
actor.destroy()
time.sleep(0.5)
print(actor.id, "is destroyed.")
自己的内容:选择地图+调出蓝图+从蓝图中选择演员+设置演员的属性+设置演员生成的位置+生成演员。这里说一下对上述概念自己的理解:蓝图就是一个很大的仓库,仓库里面有人车等演员,我们通过固定句式来调用这些演员,设置他们的属性。
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)
world = client.get_world()
client.load_world('Town02')
blueprint = world.get_blueprint_library()
ego_vehicle_bp = blueprint.find('vehicle.audi.a2') # 找到奔驰的蓝图
ego_vehicle_bp.set_attribute('color', '52, 192, 235') # 给奔驰上颜色
ego_vehicle_bp_2 = blueprint.find('vehicle.audi.etron')
ego_vehicle_bp_2.set_attribute('color', '79, 235, 52')
# 随机设置生成点
transform = random.choice(world.get_map().get_spawn_points())
# 或者设置固定点
# transform = carla.Transform(carla.Location(x=-13, y=80, z=2), carla.Rotation(yaw=90))
# 在这个位置生成汽车
ego_vehicle_0 = world.spawn_actor(ego_vehicle_bp, transform)
ego_vehicle_2 = world.spawn_actor(ego_vehicle_bp,
carla.Transform(carla.Location(x=-40, y=1, z=2), carla.Rotation(yaw=90)))
#添加演员到列表中,方便集体销毁
actor_list.append(ego_vehicle_0)
actor_list.append(ego_vehicle_2)
actor_list.append(pedestrain)
再进阶的代码,等我在看看,再更新,有问题大家可以指出来,也可以发表一下自己的学习心得。