当前位置:首页>自动驾驶>CARLA 这个开源仿真器让自动驾驶研发不再烧钱

CARLA 这个开源仿真器让自动驾驶研发不再烧钱

  • 2026-09-10 19:10:08
CARLA 这个开源仿真器让自动驾驶研发不再烧钱
6,724 次提交、14K+ Stars,CoRL'17 论文背书,MIT 开源协议。从 2017 年发布至今,carla-simulator/carla 已经成为自动驾驶领域事实上的标准仿真平台,覆盖感知、规划、控制全栈研发,1.1k+ 下游项目依赖它做训练和验证。

📦 项目概览

CARLA(Car Learning to Act)是一个开源自动驾驶仿真器,由 Alexey Dosovitskiy、German Ros、Felipe Codevilla 等人于 2017 年提出,论文发表于 CoRL'17。项目目前由 Embodied AI Foundation 维护,社区活跃度极高——222 个分支、55 个标签、28 次正式发布。

CARLA 解决的核心问题很直接:实车测试成本太高,一次路测动辄几千美元,而且很多危险场景(行人突然横穿、前车急刹、暴雨夜行)在真实道路上没法安全复现。CARLA 让这些场景在仿真器里随便跑,传感器数据(摄像头、激光雷达、毫米波雷达、IMU、GNSS)和真实传感器输出几乎一致。

项目采用 MIT 协议(代码部分)和 CC-BY 协议(美术资产),商业使用门槛很低。语言栈以 C++(79.3%)为主体,Python(13.8%)提供 API 层,C(4.8%)处理底层通信。

目标用户

  • 自动驾驶感知算法工程师(训练目标检测、语义分割、3D 跟踪模型)
  • 规划与控制算法研究员(路径规划、行为决策、PID/MPC 控制器验证)
  • 高校自动驾驶实验室(低成本替代实车测试)
  • 自动驾驶公司仿真团队(回归测试、场景库建设)
  • ROS2 机器人开发者(0.9.16 起原生支持 ROS2,无需 bridge)

解决的问题

  • 实车路测成本高,危险场景无法安全复现
  • 传感器数据标注昂贵,仿真可自动生成真值标签
  • 各团队自研仿真器接口不统一,模型难以迁移
  • 缺少公开的自动驾驶评测基准
  • 从仿真到真实世界的策略迁移困难

📂 目录结构

carla/├── LibCarla/              # C++ 客户端库(传感器序列化、地图查询、RPC 通信)├── PythonAPI/             # Python API 封装(carla.Client、carla.World、carla.Actor)├── Ros2Native/            # 0.9.16 新增:原生 ROS2 集成(DDS 通信,无需 ros-bridge)├── Unreal/                # Unreal Engine 插件(CarlaUE4 项目、传感器蓝图、天气系统)├── Examples/              # Python 示例脚本(手动控制、传感器数据采集、交通场景)├── Import/                # 地图导入工具(OpenDRIVE 解析、FBX 资产导入)├── Util/                  # 构建工具链(Docker 配置、CI 脚本、内容下载)├── CMake/                 # CMake 模块(LibCarla 编译配置、依赖查找)├── Docs/                  # Sphinx 文档源码(部署在 carla.readthedocs.io)├── CMakeLists.txt         # 顶层 CMake 构建文件├── CarlaSetup.sh          # Linux 一键构建脚本├── CarlaSetup.bat         # Windows 一键构建脚本└── CHANGELOG.md           # 版本变更日志
  • LibCarla/:所有传感器数据的序列化/反序列化、地图路由查询、客户端-服务端 RPC 通信都在这里实现,是 Python API 的 C++ 底层
  • PythonAPI/:面向用户的 Python 接口,封装了 carla.Client(连接服务端)、carla.World(场景操作)、carla.Actor(车辆/传感器/行人)等核心类
  • Ros2Native/:0.9.16 版本新增,直接在 CARLA 服务端内嵌 ROS2 节点,省去 ros-bridge 中间层,延迟更低
  • Unreal/:UE5.5 插件化改造后的核心模块,含传感器蓝图、物理引擎配置、天气系统、NVIDIA Cosmos Transfer1 和 NuRec 集成
  • Examples/:从 manual_control.py(键盘控制车辆)到 sensor_synchronization.py(多传感器时间同步),覆盖了日常使用的大部分场景

🏗️ 架构设计

CARLA 的架构是经典的客户端-服务端分离模式,核心思想是:仿真渲染全部在服务端(GPU 密集型),算法逻辑全部在客户端(CPU/GPU 均可),两者通过 TCP 通信。

技术栈选型

层面
技术选型
原因
渲染引擎
Unreal Engine 5.5(ue5-dev)/ UE 4.26(ue4-dev)
原生支持 Lumen 全局光照、Nanite 虚拟几何体、World Partition 大世界
地图格式
ASAM OpenDRIVE 1.4
行业标准,与 RoadRunner、VTD、dSPACE 等工具互通
客户端 API
Python 3.8+ / C++17
Python 方便算法原型,C++ 用于性能敏感场景
通信协议
TCP(RPC)+ DDS(ROS2 原生)
0.9.16 起支持原生 ROS2,延迟比 ros-bridge 方案低
物理引擎
UE Chaos Physics
车辆悬挂、轮胎摩擦、碰撞检测
传感器
光栅化渲染 + 深度缓冲区
支持 RGB、深度、语义分割、实例分割同步输出
构建系统
CMake + Makefile
跨平台(Linux/Windows),支持 Ninja 加速
AI 集成
NVIDIA Cosmos Transfer1 + NuRec 25.07
风格迁移生成多样化训练数据,神经渲染重建真实场景

📊 核心流程

仿真主循环

传感器数据流

交通管理器决策流程

💡 技术特点

CARLA 的核心竞争力在于生态完整性,而不是某个单项技术。

1. 传感器仿真精度

CARLA 的传感器不是简单的贴图,而是基于光栅化渲染管线真实计算。RGB 相机输出带镜头畸变、曝光、色差参数;LiDAR 点云包含强度、反射率、时间戳;Radar 传感器输出多普勒速度;语义分割相机在渲染主画面的同时输出像素级类别标签。所有传感器之间时间戳对齐,误差在毫秒级。

2. 原生 ROS2 集成

0.9.16 版本直接在 CARLA 服务端内嵌 ROS2 节点,通过 DDS 协议与外部 ROS2 系统通信。不再需要 ros-bridge 中间层,延迟从之前的几十毫秒降到个位数毫秒。传感器数据直接发布为 sensor_msgs/Image、sensor_msgs/PointCloud2等标准 ROS2 消息类型,控制指令通过 ackermann_msgs订阅。

3. NVIDIA AI 工具链集成

ue5-dev 分支集成了 NVIDIA Cosmos Transfer1(风格迁移模型)和 NuRec 25.07(神经渲染引擎)。Cosmos Transfer1 用文本提示词生成仿真画面的多种风格变体,一组仿真数据能产出海量视觉多样性样本。NuRec 从真实传感器数据重建 3D 场景,支持不同视角、不同相机配置的重新渲染。

4. 交通管理器

内置的 Traffic Manager 可以同时控制上百辆 NPC 车辆,支持跟车、变道、路口通行、避让行人等行为。0.9.16 新增了左行交通规则(英国、日本等)和轮椅弱势道路使用者模型。

5. 生态系统

围绕 CARLA 核心仓库,社区维护了一套完整工具链:

  • Leaderboard:自动驾驶评测基准,按路线完成度、违规次数、驾驶质量打分
  • Scenario_Runner:场景运行器,定义和运行特定交通场景(如无保护左转、行人横穿)
  • ROS-bridge:ROS1/ROS2 桥接(0.9.16 起的原生 ROS2 集成正在逐步替代它)
  • AutoWare bridge:与 AutoWare 自动驾驶软件栈的对接模块
  • RoadRunner 插件:从 RoadRunner 导出地图到 CARLA 的 OpenDRIVE 格式
  • Map Editor:可视化的地图编辑工具

6. 内置场景资源

CARLA 自带 Town01-Town15 共 15 张城市地图,覆盖高速公路、城市主干道、乡村小路、环岛、多层立交等路况。OpenDRIVE 格式保证了地图可以导入 RoadRunner、VTD、dSPACE 等商业工具。

🎯 适用场景

主要场景

  1. 感知算法训练:用 CARLA 生成带像素级真值标签的 RGB/深度/语义分割图像,训练 YOLO、Mask R-CNN、PointPillars 等模型。仿真数据自动标注,省去人工标注成本。
  2. 规划控制算法验证:在 CARLA 中测试 A*、RRT、Lattice Planner 等路径规划算法,以及 PID、MPC 等车辆控制器。Leaderboard 提供标准化的评测基准。
  3. 端到端自动驾驶:训练从传感器输入直接到控制指令的端到端模型(如模仿学习、强化学习策略),CARLA 提供完整的观察-动作-奖励闭环。
  4. 危险场景测试:复现真实路测中无法安全执行的危险场景——行人突然横穿、前车急刹、暴雨夜行、传感器故障等。
  5. 多车协同仿真:同时运行多辆自动驾驶车辆,测试 V2V 通信、编队行驶、协同变道等场景。

部署要求

项目
最低配置
推荐配置
操作系统
Ubuntu 22.04 / Windows 11
Ubuntu 24.04
CPU
Intel i7 9th gen / AMD Ryzen 7
Intel i9 11th gen / AMD Ryzen 9
GPU
NVIDIA RTX 3070(8GB VRAM)
RTX 4090/5090(16GB+ VRAM)
内存
32GB RAM
64GB RAM
磁盘
130GB 以上
NVMe SSD 200GB
Python
3.8+
3.10+
UE5 版本
N/A
需 GitHub 账号绑定 Epic Games 组织
UE5.5 版本(ue5-dev 分支)的硬件要求更高,Lumen 和 Nanite 需要 RTX 4090 或更好的显卡才能流畅运行。

🚀 快速上手

环境准备(Ubuntu 22.04)

# 安装系统依赖sudo apt-get updatesudo apt-get install build-essential g++-12 cmake ninja-build \    libvulkan1 python3 python3-dev python3-pip python3-venv \    autoconf wget curl rsync unzip git git-lfs \    libpng-dev libtiff5-dev libjpeg-dev# 安装 Python 依赖pip install carla==0.9.15

最简单的示例:生成一辆车并控制它

import carlaimport time# 连接 CARLA 服务端client = carla.Client('localhost', 2000)client.set_timeout(10.0)# 获取世界和地图world = client.get_world()map = world.get_map()# 获取一个生成点spawn_points = map.get_spawn_points()spawn_point = spawn_points[0]# 生成一辆车blueprint_library = world.get_blueprint_library()vehicle_bp = blueprint_library.filter('vehicle.tesla.model3')[0]vehicle = world.spawn_actor(vehicle_bp, spawn_point)# 控制车辆前进vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))time.sleep(3)# 清理vehicle.destroy()

挂载 RGB 相机并保存图像

# 创建相机蓝图camera_bp = blueprint_library.find('sensor.camera.rgb')camera_bp.set_attribute('image_size_x', '1920')camera_bp.set_attribute('image_size_y', '1080')camera_bp.set_attribute('fov', '90')# 挂载到车辆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))

从源码构建(ue5-dev 分支)

git clone https://github.com/carla-simulator/carla.gitcd carlagit checkout ue5-dev./CarlaSetup.shmake launch
从源码构建需要先编译 Unreal Engine 5.5,整个过程需要 4 小时以上,磁盘空间至少 130GB。建议初学者先用 pip 安装预编译包。

最新文章

随机文章