📄 论文信息

项目内容
标题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)
arXiv1711.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 年,自动驾驶研究者的典型工作流是这样的:

  1. 使用 Udacity SimulatorTorcs 进行快速原型——场景过于简单,无法验证泛化性
  2. 使用 GTA V mod 获取具有视觉逼真度的数据——但受限于游戏引擎的 API 限制,无法实现闭环控制
  3. 如果有商业资金,使用 Vires VTDCarSim——但价格动辄数万美元,且无法修改内部实现

这种碎片化的局面意味着:即使两个团队研究同一种方法,也无法公平比较——因为仿真环境不同、传感器配置不同、场景设置不同。CARLA 的目标是成为自动驾驶领域的 “ImageNet 式基准”,为社区提供一个统一的实验平台。


🏗️ 方法详解:CARLA 仿真器架构

1. Server-Client 异步架构

CARLA 的核心设计采用 Server-Client 解耦架构,这是其灵活性的基础:

CARLA 架构 图1:CARLA 的 Server-Client 架构示意图

Server 端(C++/UE4)

UPE((y(4PamtAshcahgtytpoeeCso,nneAXrtrR)Wsw(A,Lo,eNSTCIPAraetClnItltttrPithSdrhwe/eereaeoaPnrorSfrrmrtftvtf,keoTateairtCclrtcsoPeCeeec+,(线(lno(+CUisllb+EgooCr+4hrBcla)tsuaikRs)fleee,fhn)neotdrsestr):)2000)Client

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类)场景理解、域泛化分析❌ 伪传感器
LIDARPointCloud N×33D 感知、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 1Town 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.00.090°(正午)★☆☆
雨天(Rainy Noon)0.80.890°★★☆
雨后(Wet Noon)0.30.090°★★☆
黄昏(Soft Sunset)0.30.015°(低角度)★★★

不同天气条件对视觉感知的影响极大——雨天降低路面纹理对比度,黄昏产生长阴影和过曝,这为测试视觉感知模型对**域偏移(domain shift)**的鲁棒性提供了天然实验场。

4. 基准评测协议(CoRL 2017 Benchmark)

这是 CARLA 最具影响力的贡献之一——定义了标准化的驾驶评测协议,使得不同方法可以在完全相同的条件下比较。

任务定义

论文定义了 4 个难度递增的驾驶任务

  1. Straight(直线行驶)—— 没有转弯,最简单
  2. One Turn(单次转弯)—— 在单个路口转弯
  3. Navigation(导航)—— 通过多个路口到达指定目标
  4. 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 PipelineMP经典模块化RefineNet 语义分割(ResNet-101 backbone)PID 控制器
Conditional Imitation LearningIL端到端模仿学习CNN(8 层),输入 RGB + 高层命令直接输出控制量
Reinforcement LearningRL端到端强化学习CNN(8 层),输入 RGB + 速度A3C 算法,10M 步训练

主实验结果

实验结果 图5:三种方法在不同条件下的成功率对比

任务条件MP (%)IL (%)RL (%)
Straight训练条件989589
新城镇929774
新天气1009886
新城镇+天气508068
One Turn训练条件828934
新城镇615912
新天气959016
新城镇+天气504820
Navigation训练条件808614
新城镇24403
新天气94842
新城镇+天气47446
Nav. Dynamic训练条件77837
新城镇24382
新天气89822
新城镇+天气44424

更多结果 图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:三种方法的平均行驶距离及违规间隔

违规类型MPILRL
逆向行驶(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%模型需要同时学习"去哪"和"怎么去"
条件 IL86%导航命令独立于驾驶策略,降低了任务复杂度

这启发了后来几乎所有端到端驾驶模型的设计——将导航规划与驾驶控制分离,也是横纵向解耦思想的早期实践。

模块化管线组件消融

模块化管线 图9:MP 的组件消融——感知模块的分辨率和语义类别数对性能的影响

配置StraightOne TurnNavigation
全分辨率 + 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/LIDARRGB真实日志回放
物理引擎PhysXBullet✅ (微观交通流)✅ (简化)
交通流仿真规则代理 + Traffic Manager (v0.9+)规则代理真实日志✅ SUMO 原生规则代理
场景可编辑性✅ Python API✅ Python❌ 固定✅ XML✅ 代码级
端到端驾驶评测✅ CoRL 2017 Benchmark✅ 多任务❌ 规划评测
开源协议MITApache 2.0Apache 2.0GPLMIT
典型用途端到端驾驶 / 感知 / 规划泛化性研究规划器评测交通工程RL 驾驶
引用量~7,000~300~300~10,000+~500

🕰️ CARLA 版本演进时间线

版本发布时间关键新增功能
0.8.x2017–2018初始版本(即论文版本),2 个城镇,4 种天气,3 种传感器
0.9.02019.01彻底重写:全新的 Python API(更 Pythonic),新的渲染管线
0.9.62019.06Traffic Manager(TM) 引入——管理 NPC 车辆行为
0.9.92020.02Scenario Runner 发布——场景编辑器/执行器,支持复杂场景生成
0.9.102020.06支持 LIDAR 射线投射、新的 Town 3–5
0.9.112020.09CARLA Leaderboard 上线——在线提交自动驾驶 Agent 进行自动评测
0.9.122021.05新版 Town 6(高速公路)、行人动画改进、HD Map 导出
0.9.132022.02天气控制 API 增强、OpenDrive 地图导入、同步模式改进
0.9.142022.10高性能 LIDAR 仿真(GPU-based)、新的 Town 7(乡村)
0.9.152023.11ROS2 Bridge 官方支持、更真实的车辆动力学模型
0.9.162024.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)
arXiv1711.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}
}