CARLA
扫码查看

用于自动驾驶研究的开源模拟器

CARLA

综合介绍

CARLA (Car Learning to Act) 是一个专为自动驾驶系统研发、训练和验证而设计的开源模拟器。 它从零开始构建,旨在为自动驾驶研发的普及化提供帮助,让广大用户可以轻松访问和定制。 CARLA 基于虚幻引擎(Unreal Engine)开发,支持高质量的图形渲染和物理模拟,能够创建逼真的城市布局、建筑和车辆等数字资产。 该平台提供了一个灵活的 Python 和 C++ API,允许用户对模拟环境中的所有元素进行精确控制,包括交通流、行人行为、天气条件和传感器套件等。 CARLA 采用服务器-客户端架构,允许多个客户端连接并控制不同的模拟对象,具有良好的可扩展性。 其生态系统还包括了与机器人操作系统(ROS)、SUMO、Chrono 等第三方工具的集成,为研究人员提供了强大的支持。

功能列表

  • 灵活的API:提供强大的 Python 和 C++ API,用户可以控制模拟的各个方面,如交通生成、行人行为、天气和传感器等。
  • 自动驾驶传感器套件:用户可以配置多样的传感器,包括激光雷达(LIDAR)、多个摄像头、深度传感器和GPS等。
  • 快速仿真:支持禁用渲染的模式,以实现交通和道路行为的快速仿真,适用于不需要图形的规划和控制任务。
  • 地图生成:用户可以使用 RoadRunner 等工具,根据 ASAM OpenDRIVE 标准轻松创建自定义地图。
  • 交通场景模拟:通过其 ScenarioRunner 引擎,用户可以定义和执行基于模块化行为的不同交通情景。
  • 服务器-客户端架构:支持多个客户端在相同或不同节点上连接,并控制不同的模拟对象。
  • 机器人操作系统(ROS)集成:通过 ROS-bridge,CARLA 可以与机器人操作系统无缝连接。
  • 开源数字资产:提供免费的城市布局、建筑、车辆等开放数字资产,可用于模拟。
  • 行人与车辆控制:内置的交通管理器(Traffic Manager)可以控制非玩家角色(NPC),为自动驾驶代理提供挑战。

使用帮助

CARLA 提供了一个从零开始构建的自动驾驶仿真平台,下面将详细介绍如何安装和使用其核心功能,帮助您快速上手。

安装与启动

CARLA 支持 Linux 和 Windows 系统。 您可以从其 GitHub 仓库下载最新的二进制版本包,或者从源代码构建。

1. 源代码构建 (以Linux为例)

首先,需要克隆 CARLA 的 GitHub 仓库,并指定 ue5-dev 分支:

git clone -b ue5-dev https://github.com/carla-simulator/carla.git CarlaUE5

然后,运行安装脚本来安装所有依赖项并下载虚幻引擎。

cd CarlaUE5
./CarlaSetup.sh

这个过程需要一些时间,并且会占用大量的磁盘空间。

2. 启动CARLA服务器

安装完成后,在 CARLA 的根目录下运行以下命令来启动模拟器:

./CarlaUE4.sh

默认情况下,服务器会在 localhost:2000 端口上监听来自客户端的连接。

连接客户端

CARLA 通过 Python API 与模拟器进行交互。您需要创建一个 Python 脚本来作为客户端连接到服务器。

import carla
# 连接到CARLA服务器
client = carla.Client('localhost', 2000)
client.set_timeout(2.0)
# 获取当前的世界对象
world = client.get_world()

world 对象是您与模拟环境交互的主要入口点。

核心功能操作

1. 生成车辆和行人

在 CARLA 中,所有的实体都被称为“Actor”。 要生成一个 Actor,您首先需要从蓝图库(Blueprint Library)中获取一个蓝图。

# 获取蓝图库
blueprint_library = world.get_blueprint_library()
# 筛选出一个车辆蓝图
vehicle_bp = blueprint_library.filter('model3')[0]
# 在一个随机的生成点生成车辆
transform = random.choice(world.get_map().get_spawn_points())
vehicle = world.spawn_actor(vehicle_bp, transform)

2. 控制车辆

您可以直接通过 API 控制车辆的油门、刹车和转向。

# 将车辆设置为自动驾驶模式
vehicle.set_autopilot(True)
# 或者手动控制
control = carla.VehicleControl(throttle=1.0, steer=-0.5)
vehicle.apply_control(control)

3. 添加传感器

CARLA 强大的功能之一是其丰富的传感器套件。您可以将传感器附加到车辆上以收集数据。

# 创建一个RGB相机蓝图
camera_bp = blueprint_library.find('sensor.camera.rgb')
camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4))
camera = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle)
# 监听相机数据
camera.listen(lambda image: image.save_to_disk('output/%06d.png' % image.frame))

除了RGB相机,您还可以添加激光雷达(LIDAR)、深度相机、语义分割相机等。

4. 控制交通和环境

通过交通管理器(Traffic Manager),您可以轻松地在场景中生成大量逼真的交通流。

traffic_manager = client.get_trafficmanager(8000)
# 设置车辆为自动驾驶模式并由交通管理器控制
vehicle.set_autopilot(True, traffic_manager.get_port())

您还可以动态改变天气条件,以测试您的算法在不同环境下的鲁棒性。

weather = carla.WeatherParameters(
cloudiness=80.0,
precipitation=30.0,
sun_altitude_angle=70.0
)
world.set_weather(weather)

5. 记录和回放

CARLA 允许您记录模拟过程,并在之后进行回放,这对于结果比较和调试非常有用。

# 开始记录
client.start_recorder("recording01.log")
# ... 运行您的模拟 ...
# 停止记录
client.stop_recorder()
# 回放记录
client.replay_file("recording01.log", start_time, duration, camera_id)

通过以上步骤,您可以开始使用 CARLA 进行自动驾驶算法的开发和测试。更多高级功能,例如创建自定义地图和车辆,或者与 ROS 等第三方工具集成,请参阅官方文档。

应用场景

  1. 自动驾驶算法开发与测试CARLA 为研究人员提供了一个安全、可控的虚拟环境,用于开发和测试自动驾驶汽车的感知、决策和控制算法。 工程师可以在模拟器中模拟各种复杂的交通场景和危险情况,而无需在真实道路上进行昂贵且有风险的测试。
  2. 传感器模型验证该平台支持多种传感器模型,如摄像头、激光雷达和雷达,能够生成带有像素级精确标注的合成数据(例如语义分割和深度信息)。 这些数据可用于训练和验证计算机视觉算法。
  3. 强化学习训练CARLA 的灵活性和可扩展性使其成为训练强化学习代理的理想平台。研究人员可以设计自定义的奖励函数,并让代理在模拟环境中通过反复试验来学习驾驶策略。
  4. 交通流模拟与城市规划通过其交通管理器和场景运行器,CARLA 可用于模拟大规模的城市交通流,帮助城市规划者和交通工程师研究交通拥堵、信号灯配时优化等问题。

QA

  1. CARLA 与其他自动驾驶模拟器(如LGSVL, AirSim)相比有何不同?CARLA 的主要优势在于其强大的社区支持、丰富的开源资产库以及专为自动驾驶研究设计的灵活 API。 它与虚幻引擎的深度集成提供了高质量的渲染效果,并且其模块化的设计和对 OpenDRIVE 等标准的支持使其具有很高的可扩展性。
  2. 在 CARLA 中是否可以创建自己的地图和车辆?是的,CARLA 提供了详细的文档和工具链,支持用户导入使用专业软件(如 RoadRunner)创建的自定义地图,或者将自己设计的车辆模型导入到模拟器中使用。
  3. CARLA 是否支持硬件在环(HIL)仿真?虽然 CARLA 本身是一个纯软件模拟器,但通过其灵活的 API 和与 ROS 等工具的集成,可以实现与真实硬件(如ECU、传感器)的连接,从而搭建硬件在环仿真系统。
微信微博Email复制链接