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 大世界 |
| | 行业标准,与 RoadRunner、VTD、dSPACE 等工具互通 |
| | Python 方便算法原型,C++ 用于性能敏感场景 |
| | 0.9.16 起支持原生 ROS2,延迟比 ros-bridge 方案低 |
| | |
| | |
| | 跨平台(Linux/Windows),支持 Ninja 加速 |
| 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 格式
6. 内置场景资源
CARLA 自带 Town01-Town15 共 15 张城市地图,覆盖高速公路、城市主干道、乡村小路、环岛、多层立交等路况。OpenDRIVE 格式保证了地图可以导入 RoadRunner、VTD、dSPACE 等商业工具。
🎯 适用场景
主要场景
- 感知算法训练:用 CARLA 生成带像素级真值标签的 RGB/深度/语义分割图像,训练 YOLO、Mask R-CNN、PointPillars 等模型。仿真数据自动标注,省去人工标注成本。
- 规划控制算法验证:在 CARLA 中测试 A*、RRT、Lattice Planner 等路径规划算法,以及 PID、MPC 等车辆控制器。Leaderboard 提供标准化的评测基准。
- 端到端自动驾驶:训练从传感器输入直接到控制指令的端到端模型(如模仿学习、强化学习策略),CARLA 提供完整的观察-动作-奖励闭环。
- 危险场景测试:复现真实路测中无法安全执行的危险场景——行人突然横穿、前车急刹、暴雨夜行、传感器故障等。
- 多车协同仿真:同时运行多辆自动驾驶车辆,测试 V2V 通信、编队行驶、协同变道等场景。
部署要求
| | |
|---|
| Ubuntu 22.04 / Windows 11 | |
| Intel i7 9th gen / AMD Ryzen 7 | Intel i9 11th gen / AMD Ryzen 9 |
| NVIDIA RTX 3070(8GB VRAM) | RTX 4090/5090(16GB+ VRAM) |
| | |
| | |
| | |
| | 需 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 安装预编译包。