📄 论文信息

项目内容
标题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 Simulator 或 Torcs 进行快速原型——场景过于简单,无法验证泛化性
  2. 使用 GTA V mod 获取具有视觉逼真度的数据——但受限于游戏引擎的 API 限制,无法实现闭环控制
  3. 如果有商业资金,使用 Vires VTD 或 CarSim——但价格动辄数万美元,且无法修改内部实现

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


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

1. Server-Client 异步架构

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

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

Server 端(C++/UE4):

CARLA Server (C++) 内部:
  - UE4 物理引擎 (PhysX)
  - 渲染管线 (UE4 Render)
  二者 -> World State (actors, traffic lights, map, weather, sensors)
World State -> Network Streamer (TCP/Protocol Buffers) -> TCP (localhost:2000)
客户端 Client 端:
  - Client Interface
      - Python API
      - C++ Client
  - Agent 控制逻辑 (steer, throttle, brake)

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))
)
```text

传感器数据通过 **回调函数(callback)** 异步传递到 Client,支持批量处理和流式处理两种模式。

### 3. 环境系统:城镇、天气与交通

![城镇地图](/images/carla/fig5-towns.jpg)
*图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 种标准天气条件**:

![天气与资产](/images/carla/fig3-weathers.jpg)
*图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 个难度递增的驾驶任务**:

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 Pipeline** | MP | 经典模块化 | RefineNet 语义分割(ResNet-101 backbone) | PID 控制器 |
| **Conditional Imitation Learning** | IL | 端到端模仿学习 | CNN(8 层),输入 RGB + 高层命令 | 直接输出控制量 |
| **Reinforcement Learning** | RL | 端到端强化学习 | CNN(8 层),输入 RGB + 速度 | A3C 算法,10M 步训练 |

### 主实验结果

![实验结果](/images/carla/fig8-results1.jpg)
*图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 |

![更多结果](/images/carla/fig9-results2.jpg)
*图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)

![结果对比](/images/carla/fig10-results3.jpg)
*图7:三种方法的平均行驶距离及违规间隔*

| 违规类型 | MP | IL | RL |
|---------|----|----|----|
| 逆向行驶 | 中 | **高**(IL 最常逆行) | 极低 |
| 侵占人行道 | 中 | 训练下中,泛化下高 | 极低 |
| 碰撞(静态物体) | 中 | 训练下较低,泛化下高 | 极低 |
| 碰撞(车辆) | 中 | 训练下较低 | 低 |
| 碰撞(行人) | **高**(MP 最危险) | 中 | **极高**(但行驶距离最短) |
| 平均行驶距离 | **最长** | 中 | **极短**(~10m) |

⚠️ **RL 的低违规率是一个危险的假象**——不是因为 RL 学会了安全驾驶,而是因为 RL 智能体绝大多数时间停在原地不动(平均行驶距离仅 ~10 米)。这提醒研究者:**在评估安全指标时必须同时考虑任务完成率**,否则"不动策略"会在安全指标上取得虚假高分。

### Conditional Imitation Learning 的消融

![有条件模仿学习](/images/carla/fig6-conditional.jpg)
*图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%** | 导航命令独立于驾驶策略,降低了任务复杂度 |

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

### 模块化管线组件消融

![模块化管线](/images/carla/fig7-modular.jpg)
*图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](https://arxiv.org/abs/1711.03938) |
| **代码** | [github.com/carla-simulator/carla](https://github.com/carla-simulator/carla) |
| **官网** | [carla.org](https://carla.org/) |
| **引用格式** | Dosovitskiy et al., "CARLA: An Open Urban Driving Simulator", CoRL 2017 |

```bibtex
@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}
}