📄 论文信息
| 项目 | 内容 |
|---|---|
| 标题 | CARLA: An Open Urban Driving Simulator |
| 作者 | Alexey Dosovitskiy, German Ros, Felipe Codevilla, Antonio Lopez, Vladlen Koltun |
| 团队 | Intel Labs / 西班牙计算机视觉中心(CVC) |
| 发表 | CoRL 2017(Conference on Robot Learning, Mountain View) |
| arXiv | 1711.03938(2017 年 11 月) |
| 代码 | github.com/carla-simulator/carla |
| 官网 | carla.org |
| 许可证 | MIT 协议(非商业用途免费) |
🎯 一句话概括
CARLA 是一个从头构建的开源城市驾驶仿真器,提供高保真渲染、灵活传感器配置、开放数字资产和标准化基准评测,为自动驾驶研究提供了统一、可复现的实验平台,已成为该领域引用量最高的仿真基础设施之一(Google Scholar 7,000+ 次引用)。
🤔 要解决什么问题?—— 2017 年自动驾驶仿真的"真空地带"
在 CARLA 诞生之前,自动驾驶研究面临一个尴尬的困境:算法创新需要仿真环境,但可用仿真器要么太简陋、要么太昂贵、要么不开源。下表总结了 2017 年前后主流仿真方案的核心痛点:
| 方案类型 | 代表 | 保真度 | API 灵活性 | 许可证 | 场景多样性 | 可复现性 |
|---|---|---|---|---|---|---|
| 游戏修改版 | Torcs, GTA V mods | 中-高 | ❌ 极低 | ⚠️ 商业游戏 EULA | 固定赛道/城市 | ❌ 不可复现 |
| 商业仿真器 | Vires VTD, CarSim, PreScan | 高 | 有限(需付费 SDK) | ❌ 封闭/高昂 | 自定义 | ⚠️ 需授权 |
| 轻量学术仿真器 | Udacity Simulator, DeepDrive | 低 | ✅ 中等 | ✅ 开源 | ❌ 场景单一 | ✅ |
| 机器人仿真器 | Gazebo + ROS | 低 | ✅ 高 | ✅ 开源 | 社区贡献 | ✅ |
| CARLA(本文) | — | 高 (UE4) | ✅ 灵活 (Python API) | ✅ 开源 (MIT) | ✅ 多城镇 + 组合天气 | ✅ 完全可复现 |
核心空缺:没有一款仿真器能同时满足"高保真渲染 + 灵活编程接口 + 开源/可修改 + 场景多样性 + 标准化评测"。CARLA 正是为填补这一空白而设计。
🧠 核心贡献
| # | 贡献 | 说明 |
|---|---|---|
| 1 | 开源仿真平台 | 基于 Unreal Engine 4,MIT 协议,完整开放代码与数字资产 |
| 2 | 开放数字资产 | 包含两个城镇(Town 1 & Town 2)、多种建筑、车辆和行人模型 |
| 3 | 灵活的传感器套件 | 支持 RGB 相机、深度图、语义分割伪传感器、LIDAR、GPS 等,可通过 API 扩展 |
| 4 | 多样化环境条件 | 支持 12+ 种天气(晴朗/雨天/雨后/黄昏等)与光照条件组合 |
| 5 | 标准化基准评测 | 定义四个难度递增的驾驶任务 + 量化指标,使不同方法可在相同条件下公平对比 |
| 6 | 系统对比三种范式 | 在统一平台上对比模块化管线、模仿学习和强化学习,揭示端到端方法的泛化瓶颈 |
📚 研究背景与动机
为什么自动驾驶需要仿真?
自动驾驶测试的安全门槛极高——在真实道路上测试自动驾驶算法既危险又昂贵(Waymo 在 2023 年报告其单车测试成本超过 $100K/年)。仿真提供了一条安全的替代路径:
- 零风险迭代:任何碰撞都不会产生实际损失
- 环境可控:精确控制天气、光线、交通密度、行人行为
- 场景覆盖:可生成在真实数据中稀有的长尾场景(如行人突然冲出、车辆失控)
- 可复现性:同一随机种子可精确复现相同场景,便于调试与比较
CARLA 之前的状态
2017 年,自动驾驶研究者的典型工作流是这样的:
- 使用 Udacity Simulator 或 Torcs 进行快速原型——场景过于简单,无法验证泛化性
- 使用 GTA V mod 获取具有视觉逼真度的数据——但受限于游戏引擎的 API 限制,无法实现闭环控制
- 如果有商业资金,使用 Vires VTD 或 CarSim——但价格动辄数万美元,且无法修改内部实现
这种碎片化的局面意味着:即使两个团队研究同一种方法,也无法公平比较——因为仿真环境不同、传感器配置不同、场景设置不同。CARLA 的目标是成为自动驾驶领域的 “ImageNet 式基准”,为社区提供一个统一的实验平台。
🏗️ 方法详解:CARLA 仿真器架构
1. Server-Client 异步架构
CARLA 的核心设计采用 Server-Client 解耦架构,这是其灵活性的基础:
图1:CARLA 的 Server-Client 架构示意图
Server 端(C++/UE4):
Server 以 固定频率(默认 20 FPS) 运行物理仿真和渲染,维护一个完整的世界状态(车辆位置、速度、传感器数据、交通信号状态等)。Client 通过 TCP 连接 发送控制命令并接收传感数据。关键特性:
- 异步非阻塞:Server 和 Client 在不同线程/进程中运行,不会互相阻塞
- 同步模式可用:可通过
world.tick()实现精确的 step-by-step 同步 - 多客户端支持:一个 Server 可同时服务多个 Client(用于多智能体场景,如 V2V 通信仿真)
数据传输使用 Protocol Buffers(Google 的序列化协议),在保证传输效率的同时保留跨语言兼容性。
2. 传感器系统与数据生成
图2:CARLA 提供的三种传感模态:RGB 相机、深度图、语义分割
CARLA 的传感器系统设计极具前瞻性——采用 “伪传感器”(pseudo-sensor) 概念,将深度图和语义分割以与 RGB 相同的渲染管线输出,天然实现像素级对齐:
| 传感器 | 输出格式 | 用途 | 是否物理传感器 |
|---|---|---|---|
| RGB 相机 | H×W×3, uint8 | 标准视觉输入 | ✅ 物理可制造 |
| 深度相机 | H×W×1, float32 | 深度估计, 3D 重建 | ✅(如 Intel RealSense) |
| 语义分割 | H×W×1, uint8 (12类) | 场景理解、域泛化分析 | ❌ 伪传感器 |
| LIDAR | PointCloud N×3 | 3D 感知、SLAM | ✅ 物理 LIDAR |
| GPS | (lat, lon) | 全局定位 | ✅ |
| IMU | (accel, gyro) | 航迹推算 | ✅ |
语义分割的 12 个类别: 道路、车道线、交通标志、人行道、围栏、路灯、墙壁、建筑、植被、车辆、行人、其他
传感器可在运行时通过 Python API 灵活配置位置、朝向、视场角、分辨率等参数:
# 示例:在车前挡风玻璃位置挂载三个传感器
camera_rgb = world.spawn_actor(
blueprint_library.find('sensor.camera.rgb'),
transform.Transform(
location=Location(x=1.5, z=2.4),
rotation=Rotation(pitch=5.0)
)
)
camera_depth = world.spawn_actor(
blueprint_library.find('sensor.camera.depth'),
same_transform
)
lidar = world.spawn_actor(
blueprint_library.find('sensor.lidar.ray_cast'),
transform.Transform(Location(x=0.0, z=2.5))
)
传感器数据通过 回调函数(callback) 异步传递到 Client,支持批量处理和流式处理两种模式。
3. 环境系统:城镇、天气与交通
图3:CARLA 提供的两个城镇——Town 1 和 Town 2,包含不同布局复杂度
城镇设计: CARLA 最初版本包含两个手工设计的城镇,灵感来自欧洲城市布局:
| 特征 | Town 1 | Town 2 |
|---|---|---|
| 布局复杂度 | 中等(直线 + 简单弯道) | 较高(复杂路口 + 多车道 + 环形交叉口) |
| 路段数量 | ~30 | ~60 |
| 交叉口类型 | T 型路口为主 | 十字路口 + 环岛 |
| 典型用途 | 训练基础驾驶策略 | 测试泛化到新场景的能力 |
天气系统: CARLA 通过控制 UE4 引擎的多个可调节参数实现天气组合:
$$ \text{Weather} = (w_{\text{cloudiness}}, w_{\text{precipitation}}, w_{\text{wind}}, w_{\text{sun\_angle}}) $$论文中测试了 4 种标准天气条件:
图4:CARLA 中的车辆与行人资产多样性
| 天气 | 云量 | 降水 | 太阳角度 | 难度 |
|---|---|---|---|---|
| 晴朗白天(Clear Noon) | 0.0 | 0.0 | 90°(正午) | ★☆☆ |
| 雨天(Rainy Noon) | 0.8 | 0.8 | 90° | ★★☆ |
| 雨后(Wet Noon) | 0.3 | 0.0 | 90° | ★★☆ |
| 黄昏(Soft Sunset) | 0.3 | 0.0 | 15°(低角度) | ★★★ |
不同天气条件对视觉感知的影响极大——雨天降低路面纹理对比度,黄昏产生长阴影和过曝,这为测试视觉感知模型对**域偏移(domain shift)**的鲁棒性提供了天然实验场。
4. 基准评测协议(CoRL 2017 Benchmark)
这是 CARLA 最具影响力的贡献之一——定义了标准化的驾驶评测协议,使得不同方法可以在完全相同的条件下比较。
任务定义
论文定义了 4 个难度递增的驾驶任务:
- Straight(直线行驶)—— 没有转弯,最简单
- One Turn(单次转弯)—— 在单个路口转弯
- Navigation(导航)—— 通过多个路口到达指定目标
- Nav. Dynamic(动态导航)—— 在 Navigation 基础上加入动态交通车辆
每个任务在 4 种环境条件下分别测试:
- 训练条件(Town 1 + 晴天白天)
- 新城镇(Town 2 + 晴天白天)
- 新天气(Town 1 + 雨天/黄昏等)
- 新城镇 + 新天气(Town 2 + 雨天/黄昏等)—— 最难(最接近真实世界的不可预见性)
评价指标
论文使用成功率作为核心指标——定义为在限时内完成导航任务且无碰撞/违规。
成功条件:
$$\text{Success} = \mathbb{1}\left[ \text{reached\_goal} \land \text{no\_collision} \land \text{time} < T_{\max} \right]$$其中车道偏离、闯红灯、逆向行驶等违规行为也被记录。
🔬 实验与结果
三种驾驶范式对比
论文在 CARLA 上系统对比了 2017 年最具代表性的三种驾驶方法:
| 方法 | 缩写 | 范式 | 感知模块 | 控制器 |
|---|---|---|---|---|
| Modular Pipeline | MP | 经典模块化 | RefineNet 语义分割(ResNet-101 backbone) | PID 控制器 |
| Conditional Imitation Learning | IL | 端到端模仿学习 | CNN(8 层),输入 RGB + 高层命令 | 直接输出控制量 |
| Reinforcement Learning | RL | 端到端强化学习 | CNN(8 层),输入 RGB + 速度 | A3C 算法,10M 步训练 |
主实验结果
图5:三种方法在不同条件下的成功率对比
| 任务 | 条件 | MP (%) | IL (%) | RL (%) |
|---|---|---|---|---|
| Straight | 训练条件 | 98 | 95 | 89 |
| 新城镇 | 92 | 97 | 74 | |
| 新天气 | 100 | 98 | 86 | |
| 新城镇+天气 | 50 | 80 | 68 | |
| One Turn | 训练条件 | 82 | 89 | 34 |
| 新城镇 | 61 | 59 | 12 | |
| 新天气 | 95 | 90 | 16 | |
| 新城镇+天气 | 50 | 48 | 20 | |
| Navigation | 训练条件 | 80 | 86 | 14 |
| 新城镇 | 24 | 40 | 3 | |
| 新天气 | 94 | 84 | 2 | |
| 新城镇+天气 | 47 | 44 | 6 | |
| Nav. Dynamic | 训练条件 | 77 | 83 | 7 |
| 新城镇 | 24 | 38 | 2 | |
| 新天气 | 89 | 82 | 2 | |
| 新城镇+天气 | 44 | 42 | 4 |
图6:各方法在不同条件下的驾驶表现
关键发现:
| 发现 | 数据支撑 |
|---|---|
| 🏆 IL 在训练条件下最优 | Navigation 训练条件 IL=86% > MP=80% |
| 🔩 MP 跨域泛化最强 | 新天气下 MP 各个任务几乎不降;Navigation: 80→94(反而提升!) |
| 💀 RL 基本失败 | 除 Straight 外,复杂任务成功率 < 34%;Navigation 仅 14% |
| 📉 IL 的域偏移严重 | Navigation 训练 86% → 新城镇 40%(降 53%) |
| 🎯 新天气 vs 新城镇 | 所有方法"新天气"表现 > “新城镇”——说明视觉外观 vs 道路拓扑的泛化难度不同 |
有趣的反直觉发现:MP 在新天气下 Navigation 成功率反而从 80% 提升到 94%!这是因为训练条件下的晴天产生强阴影,语义分割反而更困难;雨天削弱了阴影对比,分割精度反而提升。
违规分析(Ablation on Safety)
图7:三种方法的平均行驶距离及违规间隔
| 违规类型 | MP | IL | RL |
|---|---|---|---|
| 逆向行驶 | 中 | 高(IL 最常逆行) | 极低 |
| 侵占人行道 | 中 | 训练下中,泛化下高 | 极低 |
| 碰撞(静态物体) | 中 | 训练下较低,泛化下高 | 极低 |
| 碰撞(车辆) | 中 | 训练下较低 | 低 |
| 碰撞(行人) | 高(MP 最危险) | 中 | 极高(但行驶距离最短) |
| 平均行驶距离 | 最长 | 中 | 极短(~10m) |
⚠️ RL 的低违规率是一个危险的假象——不是因为 RL 学会了安全驾驶,而是因为 RL 智能体绝大多数时间停在原地不动(平均行驶距离仅 ~10 米)。这提醒研究者:在评估安全指标时必须同时考虑任务完成率,否则"不动策略"会在安全指标上取得虚假高分。
Conditional Imitation Learning 的消融
图8:Conditional Imitation Learning 框架——输入高层的"导航命令"(直行/左转/右转/跟驰)作为条件
论文引入了一种重要的架构消融——条件式模仿学习:
$$ \pi(a_t | o_t, c_t) $$其中 $a_t$ 是控制动作,$o_t$ 是观测(RGB 图像),$c_t \in {\text{straight}, \text{left}, \text{right}, \text{follow}}$ 是高层的导航命令。
与无条件模仿学习 $\pi(a_t | o_t)$ 的对比:
| 方法 | Navigation 成功率 | 说明 |
|---|---|---|
| 无条件 IL | ~55% | 模型需要同时学习"去哪"和"怎么去" |
| 条件 IL | 86% | 导航命令独立于驾驶策略,降低了任务复杂度 |
这启发了后来几乎所有端到端驾驶模型的设计——将导航规划与驾驶控制分离,也是横纵向解耦思想的早期实践。
模块化管线组件消融
图9:MP 的组件消融——感知模块的分辨率和语义类别数对性能的影响
| 配置 | Straight | One Turn | Navigation |
|---|---|---|---|
| 全分辨率 + 12类语义 | 98% | 82% | 80% |
| 低分辨率 + 12类语义 | 57% | 21% | 16% |
| 全分辨率 + 3类语义(路/车/其他) | 98% | 77% | 63% |
| 全分辨率 + 1类语义(只有道路) | 90% | 41% | 26% |
结论:
- 分辨率的影响最大:低分辨率下所有任务成功率断崖式下降,Navigation 从 80% → 16%
- 类别粒度的影响随任务复杂度增加而增加:Straight 几乎不受影响(90% → 98%),而 Navigation 从 26% → 80%
- 这验证了:城市导航不仅需要"看到路",还需要语义理解来做出正确的转弯决策
📊 与同期/后续工作的对比分析
| 特征 | CARLA (2017) | MetaDrive (2021) | nuPlan (2023) | SUMO (2000s) | HighwayEnv (2019) |
|---|---|---|---|---|---|
| 渲染引擎 | UE4(高保真) | Panda3D(卡通) | N/A(log-based) | N/A(2D 抽象) | Pygame(2D) |
| 传感器仿真 | RGB/Depth/Seg/LIDAR | RGB | 真实日志回放 | ❌ | ❌ |
| 物理引擎 | PhysX | Bullet | ✅ | ✅ (微观交通流) | ✅ (简化) |
| 交通流仿真 | 规则代理 + Traffic Manager (v0.9+) | 规则代理 | 真实日志 | ✅ SUMO 原生 | 规则代理 |
| 场景可编辑性 | ✅ Python API | ✅ Python | ❌ 固定 | ✅ XML | ✅ 代码级 |
| 端到端驾驶评测 | ✅ CoRL 2017 Benchmark | ✅ 多任务 | ❌ 规划评测 | ❌ | ✅ |
| 开源协议 | MIT | Apache 2.0 | Apache 2.0 | GPL | MIT |
| 典型用途 | 端到端驾驶 / 感知 / 规划 | 泛化性研究 | 规划器评测 | 交通工程 | RL 驾驶 |
| 引用量 | ~7,000 | ~300 | ~300 | ~10,000+ | ~500 |
🕰️ CARLA 版本演进时间线
| 版本 | 发布时间 | 关键新增功能 |
|---|---|---|
| 0.8.x | 2017–2018 | 初始版本(即论文版本),2 个城镇,4 种天气,3 种传感器 |
| 0.9.0 | 2019.01 | 彻底重写:全新的 Python API(更 Pythonic),新的渲染管线 |
| 0.9.6 | 2019.06 | Traffic Manager(TM) 引入——管理 NPC 车辆行为 |
| 0.9.9 | 2020.02 | Scenario Runner 发布——场景编辑器/执行器,支持复杂场景生成 |
| 0.9.10 | 2020.06 | 支持 LIDAR 射线投射、新的 Town 3–5 |
| 0.9.11 | 2020.09 | CARLA Leaderboard 上线——在线提交自动驾驶 Agent 进行自动评测 |
| 0.9.12 | 2021.05 | 新版 Town 6(高速公路)、行人动画改进、HD Map 导出 |
| 0.9.13 | 2022.02 | 天气控制 API 增强、OpenDrive 地图导入、同步模式改进 |
| 0.9.14 | 2022.10 | 高性能 LIDAR 仿真(GPU-based)、新的 Town 7(乡村) |
| 0.9.15 | 2023.11 | ROS2 Bridge 官方支持、更真实的车辆动力学模型 |
| 0.9.16 | 2024.06 | 多 GPU 渲染、新的 RGB 相机模型(带光学畸变效果) |
💡 个人思考与关键洞察
1. 论文的影响力远不止"造了一个仿真器"
CARLA 之所以能成为经典,不在于它的技术实现有多么复杂,而在于它解决了一个社区级的痛点——缺乏统一的实验平台。在 CARLA 之前,每个实验室都在用自己的仿真器,论文中的"仿真实验"本质上不可复现。CARLA 定义了自动驾驶仿真领域的 “平台范式”:开源 + 标准化评测 + 社区驱动。这种模式后来被 MetaDrive(2021)和 nuPlan(2023)继承,但 CARLA 的先行者优势使其始终处于中心地位。
2. 2017 年的实验结论今天依然成立
论文中 IL 在新城镇/新天气下的泛化崩溃趋势,在后来的几乎所有端到端驾驶工作中都被反复观察到。即使用更强大的 backbone、更多的数据、更复杂的网络架构,域偏移仍然是端到端驾驶的核心瓶颈。模块化管线在新天气下不降反升的反直觉发现,说明手工设计的感知模块在某些方面确实比数据驱动的方法更鲁棒——这为"可解释中间表示"的回归(如 BEV 感知、语义鸟瞰图)埋下了伏笔。
3. RL 的失败暴露了"从零学习驾驶"的不现实
论文中 RL 在 Navigation 任务上仅 14% 的成功率(实际等效于~停车不动),使得仿真环境下的闭环 RL 训练在很长一段时间内被认为是不可行的。但这一"失败"反而推动了两个重要方向:
- 模仿学习作为 RL 的初始化(先 IL 学个大概,再用 RL 微调)
- 世界模型 + 规划(如 Dreamer 系列)——通过学习环境模型来降低 RL 的交互复杂度
最近(2025–2026)GRPO 和搜索型方法在 CARLA 上重新取得了突破,也正是得益于语言条件化的大规模行为先验——本质上避免了"从零学习"的样本效率陷阱。
4. “伪传感器"设计的深远影响
CARLA 把语义分割和深度图作为像素级对齐的"伪传感器"输出,这看起来是一个工程实现细节,但其影响极为深远:
- 它允许研究者在完全可控的条件下进行多模态融合实验
- 它为 “因果解耦” 研究提供了基础——模型是否真的学到了语义概念,还是仅仅利用了纹理统计线索?
- 它催生了一大批 “仿真训练 + 真实部署”(Sim-to-Real)的工作,因为有 pixel-perfect 对齐的 ground truth,迁移学习算法的性能上限可以被精确量化
5. CARLA 对 VLA 和 World Model 研究的特殊价值
进入 2025–2026 年,CARLA 的角色从"驾驶仿真器"演变为 “通用具身智能评测平台”:
- VLA 模型评测:DriveVLM、Qwen-VLA 等模型都使用 CARLA 作为闭环评测环境,提供统一的场景控制
- World Model 验证:GAIA-1、DriveDreamer 等世界模型在 CARLA 中评估其场景预测准确率,利用其对每帧 ground truth 的可控性
- 长尾场景生成:CARLA + Scenario Runner 的组合是目前生成"罕见但危险"驾驶场景(如鬼探头、加塞)最成熟的开源方案
- Sim-to-Real 的桥梁:从 CARLA 中训练的感知表示(如显式深度、语义特征)已被验证可有效迁移到真实世界
6. 开放 vs 封闭:平台生态的启示
CARLA 的开源策略(MIT 协议、完整资产开放、社区驱动开发)是其成功的关键因素。对比之下:
- AirSim(微软,2017)同样基于 UE4,但采用更严格的许可证和更复杂的架构,研究社区逐渐转向 CARLA
- MetaDrive(2021)虽然技术上设计精良,但缺乏了 CARLA 的先发优势和社区积累
- nuPlan(2023)虽然数据真实,但无法泛化到训练分布之外的场景(因为是日志回放)
这揭示了一个重要规律:在学术研究中,生态 > 技术。一个好的平台需要低准入门槛(pip install carla)、活跃的社区(GitHub 4.5k stars / 1.5k forks)、持续维护(6 年+)和灵活的接口(Python API)。CARLA 做到了所有这些。
📖 论文信息
| 项目 | 内容 |
|---|---|
| 标题 | CARLA: An Open Urban Driving Simulator |
| 作者 | Alexey Dosovitskiy, German Ros, Felipe Codevilla, Antonio Lopez, Vladlen Koltun |
| 团队 | Intel Labs / 西班牙计算机视觉中心(CVC) |
| 发表 | CoRL 2017(Conference on Robot Learning) |
| arXiv | 1711.03938 |
| 代码 | github.com/carla-simulator/carla |
| 官网 | carla.org |
| 引用格式 | Dosovitskiy et al., “CARLA: An Open Urban Driving Simulator”, CoRL 2017 |
@inproceedings{dosovitskiy2017carla,
title={CARLA: An Open Urban Driving Simulator},
author={Dosovitskiy, Alexey and Ros, German and Codevilla, Felipe and Lopez, Antonio and Koltun, Vladlen},
booktitle={Proceedings of the 1st Annual Conference on Robot Learning},
pages={1--16},
year={2017}
}