自动驾驶—CARLA仿真(2)入门指南

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 地图的信息

在 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 仿真中的核心概念,通常指:

  • 安装传感器的车辆
  • 由你的自动驾驶算法控制的车辆

主车对提升仿真效率至关重要,例如:

  1. 大地图分块加载

    大型地图(如 Town12)采用分块设计,仅加载主车附近的区块以优化性能。

  2. 混合物理模式(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)
相关推荐
duyinbi75171 小时前
【深度学习】使用YOLOv8-MFMMAFPN进行泡沫检测的完整实现
人工智能·深度学习·yolo
AI科技星1 小时前
引力与电磁的动力学耦合:变化磁场产生引力场与电场方程的第一性原理推导、验证与统一性意义
服务器·人工智能·科技·线性代数·算法·机器学习·生活
hkNaruto1 小时前
【AI】AI学习笔记:OpenAI Tools完全指南:从原理到实战入门
人工智能·笔记·学习
狮子座明仔1 小时前
MiMo-V2-Flash 深度解读:小米 309B 开源 MoE 模型如何用 15B 激活参数吊打 671B 巨头?
人工智能·语言模型·自然语言处理
紧固件研究社1 小时前
从标准件到复杂异形件,紧固件设备如何赋能制造升级
人工智能·制造·紧固件
木头左1 小时前
贝叶斯深度学习在指数期权风险价值VaR估计中的实现与应用
人工智能·深度学习
反向跟单策略1 小时前
期货反向跟单—高频换人能够提高跟单效率?
大数据·人工智能·学习·数据分析·区块链
哎吆我呸1 小时前
Android studio 安装Claude Code GUI 插件报错无法找到Node.js解决方案
人工智能
咕噜企业分发小米1 小时前
独立IP服务器有哪些常见的应用场景?
人工智能·阿里云·云计算
测试者家园1 小时前
AI 智能体如何构建模拟真实用户行为的复杂负载场景?
人工智能·压力测试·性能测试·智能体·用户行为·智能化测试·软件开发和测试