使用系统 :ubuntu 22.04
Carla版本:0.9.13
安装过程:参考了预编译CARLA安装过程记录博客,虽然版本不太相同,但安装很顺利。预编译 CARLA 安装过程记录 Ubuntu 22.04 Carla 0.9.14_growing_dbs的博客-CSDN博客
参考资料:官方Quick start
Quick start package installation - CARLA Simulator
Carla.client
创建客户端
import carla
# 创建客户端
client = carla.Client('localhost', 2000)
# 设置timeout
client.set_timeout(10.0)
# 获取可用的maps列表
list_map = client.get_available_maps()
print('maps:')
print(list_map)
# 获取客户端version
client_version = client.get_client_version()
print('client_version:'+ client_version)
# 获取服务器version
server_version = client.get_server_version()
print('server_version:'+ server_version)
# 获取当前world
world = client.get_world()
# load world
world = client.load_world('Town02')
# reload world
# world = client.reload_world('Town01')
# maps:['/Game/Carla/Maps/Town04_Opt', '/Game/Carla/Maps/Town02_Opt', '/Game/Carla/Maps/Town07_Opt', '/Game/Carla/Maps/Town07', '/Game/Carla/Maps/Town10HD_Opt', '/Game/Carla/Maps/Town03_Opt', '/Game/Carla/Maps/Town02', '/Game/Carla/Maps/Town01', '/Game/Carla/Maps/Town04', '/Game/Carla/Maps/Town06', '/Game/Carla/Maps/Town06_Opt', '/Game/Carla/Maps/Town03', '/Game/Carla/Maps/Town01_Opt', '/Game/Carla/Maps/Town05', '/Game/Carla/Maps/Town05_Opt', '/Game/Carla/Maps/Town10HD', '/Game/Carla/Maps/Town11/Town11']
每个世界对象都有一个ID或episode。 客户端调用 load_world()
或 reload_world()
时,前一个都会被销毁。 新episode是从头开始创建的。 在此过程不重启Unreal Engine。
Carla.world:
模拟测试的主要部分。 world对象由client创建,是Map的一部分。
World包含我们可以看到的地图,是asset,而不是navigation map。Navigation map是Carla.map的一部分。它还管理天气和actors。包含模拟中的参与者和旁观者,蓝图库,地图,模拟设置,快照,天气和灯光管理器。
设置天气的两种方法:
import carla
import re
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)
world = client.get_world()
# 使用参数控制天气
# weather = carla.WeatherParameters(
# cloudiness=80.0,
# precipitation=100.0,
# precipitation_deposits = 80.0,
# wind_intensity = 80.0,
# sun_altitude_angle=300.0)
# world.set_weather(weather)
# 使用预设的天气
world.set_weather(carla.WeatherParameters.HardRainSunset)
print(world.get_weather())
# 查看预设的天气
rgx = re.compile('.+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)')
name = lambda x: ' '.join(m.group(0) for m in rgx.finditer(x))
presets = [x for x in dir(carla.WeatherParameters) if re.match('[A-Z].+', x)]
print(presets)
# 输出结果:
# ['ClearNight', 'ClearNoon', 'ClearSunset', 'CloudyNight', 'CloudyNoon', 'CloudySunset', 'Default', 'HardRainNight', 'HardRainNoon', 'HardRainSunset', 'MidRainSunset', 'MidRainyNight', 'MidRainyNoon', 'SoftRainNight', 'SoftRainNoon', 'SoftRainSunset', 'WetCloudyNight', 'WetCloudyNoon', 'WetCloudySunset', 'WetNight', 'WetNoon', 'WetSunset']
设置灯光:路灯和车灯是分别控制的,当 sun_altitude_angle < 0 时,夜间模式开始,路灯会打开。车灯可以使用carla.Vehicle.get_light_state 和 carla.Vehicle.set_light_state方法随时检索和更新车辆的灯光。 这些使用二进制操作来自定义灯光设置。
Blueprint:
carla.BlueprintLibrary 类包含 carla.ActorBlueprint 元素的列表
这些布局允许用户将新Actor顺利融入模拟器中。它们是带有动画和一系列属性的已经制作好的模型。一些是可修改的,另一些则不是。这些属性包括车辆颜色、激光雷达传感器的通道数量、行人的速度等等。
blueprint 有一个 ID 来识别它们和生成的actor。 可以找到某个 ID,或者使用通配符过滤结果。
每个 carla.ActorBlueprint 都有一系列 carla.ActorAttribute 可以 get 和 set。某些属性无法修改,属性有一个 carla.ActorAttributeType 变量。它从枚举列表中声明其类型。此外,可修改的属性带有一个推荐值列表。
import carla
import re
import random
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)
world = client.get_world()
# 获得蓝图
blueprint_library = world.get_blueprint_library()
# 找到TESLA Model3 蓝图
ego_vehicle_bp = blueprint_library.find('vehicle.tesla.model3')
# 随机选取一个vehicle blueprint
# vehicle_bp = random.choice(blueprint_library.filter('vehicle.*.*'))
# 获取并打印其number_of_wheels属性
print(ego_vehicle_bp.get_attribute('number_of_wheels'))
# 设定color属性
ego_vehicle_bp.set_attribute('color', '255,0,0')
# 获取推荐值,并设定
for attr in ego_vehicle_bp:
if attr.is_modifiable:
ego_vehicle_bp.set_attribute(attr.id, random.choice(attr.recommended_values))
Anctor:
生成:需要一个 blueprint 和 carla.Transform (用于说明位置和旋转)
可使用spawn_actor或try_spawn_actor生成actor
# map.get_spawn_points() 对于车辆. 返回推荐的生成点列表.
# 找到所有可以作为初始点的位置并随机选择一个
transform = random.choice(world.get_map().get_spawn_points())
# 生成汽车
ego_vehicle = world.spawn_actor(ego_vehicle_bp, transform)