CARLA 入门指南
CARLA 仿真器是一套面向自动驾驶(AD)及其他机器人应用的综合性合成训练数据生成解决方案。CARLA 能够模拟高度逼真的环境,复现现实世界中的城镇、城市和高速公路,以及在这些道路空间中行驶的车辆和其他物体。
此外,CARLA 仿真器也是一个出色的评估与测试平台。你可以在仿真环境中部署已训练好的自动驾驶智能体(agents),安全地测试和评估其性能与安全性,而无需承担任何对硬件设备或其他道路使用者的风险。
启动 CARLA 并连接客户端
CARLA 可通过命令行启动:Windows 系统使用可执行文件,Linux 系统使用 Shell 脚本。请先按照 Linux 或 Windows 的安装说明完成安装,然后在命令行中启动 CARLA:
bash
cd /carla/root
./CarlaUE4.sh
若要通过 Python API 控制 CARLA,需将 Python 客户端连接到服务器的开放端口。客户端通过 client 和 world 对象控制仿真器。
python
import carla
import random
# Connect to the client and retrieve the world object
client = carla.Client('localhost', 2000)
world = client.get_world()
client 对象用于维持与服务器的连接,并提供多种功能,如执行命令、加载或导出数据。你可以使用它加载其他地图,或重载当前地图(恢复初始状态)。
默认端口为 2000,你也可以指定任意可用端口;同时可通过输入计算机 IP 地址替代 localhost,从而实现 服务器与客户端分离部署------例如在一台配备高性能 GPU 的服务器上运行 CARLA 仿真,而在本地笔记本上运行 Python 客户端进行神经网络训练。这对 GPU 资源紧张的场景尤其有用。
注意:以下内容假设 CARLA 运行在默认的异步模式下。若启用了同步模式,部分代码行为可能有所不同。
加载地图
在 CARLA API 中,world 对象提供了对仿真环境中所有元素的访问权限,包括地图、建筑物、交通灯、车辆和行人等。CARLA 服务器通常会加载一个默认地图(通常是 Town10)。若要在启动时指定其他地图,可使用 config.py 脚本:
bash
python ./util/config.py -m Town04
也可在客户端通过 world 对象动态加载地图:
python
client.load_world('Town04')
可看到仿真器中,地图已切换:

观察者(Spectator)导航
观察者(Spectator)是进入仿真的视觉窗口。默认情况下,当你在带显示器的电脑上运行 CARLA 服务器时,会自动弹出一个新窗口显示观察者视角(除非使用 -RenderOffScreen 命令行参数)。
观察者有助于可视化仿真过程:你可以熟悉所加载的地图,直观查看各项操作的效果(如添加车辆、改变天气、开关地图图层等),也便于调试。
你可以使用鼠标和键盘自由飞行观察者视角:
Q:向上移动(朝窗口顶部)
E:向下移动(朝窗口底部)
W:向前
S:向后
A:向左
D:向右
鼠标左键拖动:上下控制俯仰角(pitch),左右控制偏航角(yaw)
你也可以通过 Python API 访问和操控观察者:
python
# Retrieve the spectator object
spectator = world.get_spectator()
# Get the location and rotation of the spectator through its transform
transform = spectator.get_transform()
location = transform.location
rotation = transform.rotation
# Set the spectator with an empty transform
spectator.set_transform(carla.Transform())
# This will set the spectator at the origin of the map, with 0 degrees
# pitch, yaw and roll - a good way to orient yourself in the map
添加非玩家角色(NPCs)
地图加载完成后,我们需要在仿真中添加车辆,以模拟真实交通环境中的其他道路使用者(即非玩家角色,NPCs)。
首先从蓝图库中选择所需车辆:
python
# 获取蓝图库并筛选车辆蓝图
vehicle_blueprints = world.get_blueprint_library().filter('*vehicle*')
接着,利用地图预设的出生点(spawn points)放置车辆:
python
# 获取地图的出生点
spawn_points = world.get_map().get_spawn_points()
# 随机在地图各处生成 50 辆车
for i in range(50):
world.try_spawn_actor(random.choice(vehicle_blueprints), random.choice(spawn_points))
此外,还需创建一辆作为仿真核心的"主车"(Ego Vehicle)------即未来由你的自动驾驶算法控制的车辆:
python
ego_vehicle = world.spawn_actor(random.choice(vehicle_blueprints), random.choice(spawn_points))

CARLA 还支持添加行人,以构建更真实的驾驶场景。在 CARLA 术语中,车辆和行人均称为"Actor"(参与者),具体详见
添加传感器
现代自动驾驶车辆通过多种车载传感器感知环境,如光学摄像头、光流相机、激光雷达(LiDAR)、毫米波雷达(RADAR)和加速度计等。CARLA 内置了多种传感器模型,可用于生成机器学习训练数据。传感器可安装在车辆上,也可固定在某一点(如模拟监控摄像头)。
以下示例将一个标准 RGB 摄像头安装到主车上以录制视频:
python
# 定义摄像头相对于车辆的位置(车顶上方 1.5 米)
camera_init_trans = carla.Transform(carla.Location(z=1.5))
# 从蓝图库创建摄像头
camera_bp = world.get_blueprint_library().find('sensor.camera.rgb')
# 将摄像头挂载到主车
camera = world.spawn_actor(camera_bp, camera_init_trans, attach_to=ego_vehicle)
随后,通过 listen() 方法启动数据记录。该方法接受一个回调函数,用于处理传感器数据(如保存到磁盘或传输至其他程序):
python
# 使用 lambda 函数将图像保存为 PNG 文件
camera.listen(lambda image: image.save_to_disk('out/%06d.png' % image.frame))
CARLA 支持多种传感器类型,点击此处深入了解。
使用交通管理器驱动车辆
添加完车辆和传感器后,需通过 交通管理器(Traffic Manager) 让车辆动起来。该组件可控制车辆在地图道路上自主行驶,遵守交通规则,模拟真实道路行为。
python
# 将所有车辆交由交通管理器控制
for vehicle in world.get_actors().filter('*vehicle*'):
vehicle.set_autopilot(True)
现在,你的仿真已运行起来:多辆车在地图中行驶,其中一辆主车上的摄像头正在录制数据。这些数据可用于训练自动驾驶智能体。交通管理器还提供丰富的行为定制功能,详见文档。
这是最基础的仿真设置。接下来,你可以深入探索 CARLA 提供的更多传感器和高级功能,以构建更精细、更真实的仿真场景。
设置主车(Ego Vehicle)
"主车"是 CARLA 仿真中的核心概念,通常指:
- 安装传感器的车辆
- 由你的自动驾驶算法控制的车辆
主车对提升仿真效率至关重要,例如:
-
大地图分块加载 :
大型地图(如 Town12)采用分块设计,仅加载主车附近的区块以优化性能。
-
混合物理模式(Hybrid Physics Mode) :
当仿真包含大量交通车辆时,仅对主车附近的车辆计算物理,大幅节省计算资源。
如何定义主车?
在生成主车时,为其蓝图设置 role_name 属性为 'hero':
python
ego_bp = world.get_blueprint_library().find('vehicle.lincoln.mkz_2020')
ego_bp.set_attribute('role_name', 'hero')
ego_vehicle = world.spawn_actor(ego_bp, random.choice(spawn_points))
选择地图
CARLA 内置多张精心设计的地图,涵盖城市、乡村、住宅区等多样环境,包含不同建筑风格和道路布局(从无标线乡道到多车道高速公路)。
| 地图 | 描述 |
|---|---|
| Town01 | 小型简易城镇,含河流与多座桥梁 |
| Town02 | 混合住宅与商业建筑的小城镇 |
| Town03 | 较大的城区地图,含环岛与大型路口 |
| Town04 | 山区小镇,含"8字形"无限高速公路 |
| Town05 | 方格网状城镇,含十字路口与桥梁,支持多车道变道 |
| Town06 | 多车道高速公路,含多个出入口及"密歇根左转" |
| Town07 | 乡村环境,窄路、玉米地、谷仓,极少红绿灯 |
| Town08/09 | Leaderboard 挑战赛专用"隐藏"地图 |
| Town10 | 市中心城区,含摩天大楼、住宅区与海滨大道 |
| Town11 | 未装饰的大地图 |
| Town12 | 超大地图,含高层、住宅、乡村等多种区域 |
查看可用地图列表:
python
client.get_available_maps()
加载指定地图:
python
client.load_world('Town03_Opt')
选择车辆
CARLA 提供丰富的车辆模型库以构建多样化交通流。浏览车辆目录了解详情。
列出所有可用车辆蓝图:
python
for bp in world.get_blueprint_library().filter('vehicle'):
print(bp.id)