📄 论文信息

项目内容
标题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)

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)
*图3CARLA 提供的两个城镇——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)
*图4CARLA 中的车辆与行人资产多样性*

| 天气 | 云量 | 降水 | 太阳角度 | 难度 |
|------|------|------|---------|------|
| **晴朗白天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 | 端到端模仿学习 | CNN8),输入 RGB + 高层命令 | 直接输出控制量 |
| **Reinforcement Learning** | RL | 端到端强化学习 | CNN8),输入 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: 8094反而提升!) |
| 💀 **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)
*图8Conditional 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)
*图9MP 的组件消融——感知模块的分辨率和语义类别数对性能的影响*

| 配置 | 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/Alog-based | N/A2D 抽象 | Pygame2D |
| **传感器仿真** | 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** | 20172018 | 初始版本即论文版本),2 个城镇4 种天气3 种传感器 |
| **0.9.0** | 2019.01 | **彻底重写**全新的 Python API更 Pythonic),新的渲染管线 |
| **0.9.6** | 2019.06 | **Traffic ManagerTM** 引入——管理 NPC 车辆行为 |
| **0.9.9** | 2020.02 | **Scenario Runner** 发布——场景编辑器/执行器支持复杂场景生成 |
| **0.9.10** | 2020.06 | 支持 **LIDAR 射线投射**新的 Town 35 |
| **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 定义了自动驾驶仿真领域的 **"平台范式"**开源 + 标准化评测 + 社区驱动这种模式后来被 MetaDrive2021和 nuPlan2023继承但 CARLA 的先行者优势使其始终处于中心地位

### 2. 2017 年的实验结论今天依然成立

论文中 IL 在新城镇/新天气下的泛化崩溃趋势在后来的几乎所有端到端驾驶工作中都被反复观察到即使用更强大的 backbone更多的数据更复杂的网络架构**域偏移仍然是端到端驾驶的核心瓶颈**模块化管线在新天气下不降反升的反直觉发现说明手工设计的感知模块在某些方面确实比数据驱动的方法更鲁棒——这为"可解释中间表示"的回归如 BEV 感知语义鸟瞰图埋下了伏笔

### 3. RL 的失败暴露了"从零学习驾驶"的不现实

论文中 RL 在 Navigation 任务上仅 14% 的成功率实际等效于~停车不动),使得仿真环境下的闭环 RL 训练在很长一段时间内被认为是不可行的但这一"失败"反而推动了两个重要方向
- **模仿学习作为 RL 的初始化**先 IL 学个大概再用 RL 微调
- **世界模型 + 规划**如 Dreamer 系列)——通过学习环境模型来降低 RL 的交互复杂度

最近20252026GRPO 和搜索型方法在 CARLA 上重新取得了突破也正是得益于**语言条件化的大规模行为先验**——本质上避免了"从零学习"的样本效率陷阱

### 4. "伪传感器"设计的深远影响

CARLA 把语义分割和深度图作为像素级对齐的"伪传感器"输出这看起来是一个工程实现细节但其影响极为深远
- 它允许研究者**在完全可控的条件下**进行多模态融合实验
- 它为 **"因果解耦"** 研究提供了基础——模型是否真的学到了语义概念还是仅仅利用了纹理统计线索
- 它催生了一大批 **"仿真训练 + 真实部署"**Sim-to-Real的工作因为有 pixel-perfect 对齐的 ground truth迁移学习算法的性能上限可以被精确量化

### 5. CARLA 对 VLA 和 World Model 研究的特殊价值

进入 20252026CARLA 的角色从"驾驶仿真器"演变为 **"通用具身智能评测平台"**
- **VLA 模型评测**DriveVLMQwen-VLA 等模型都使用 CARLA 作为闭环评测环境提供统一的场景控制
- **World Model 验证**GAIA-1DriveDreamer 等世界模型在 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 2017Conference 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}
}