1. 联合仿真概述
1.1 为什么我们需要联合仿真?
做自动驾驶仿真这些年,我踩过不少坑。最让我头疼的一个问题是:车跑得挺好,但路上没车。
你想想看,CARLA 里渲染出来的场景确实漂亮,光照、天气、传感器模拟都很逼真。但如果你只开一辆车在空荡荡的街道上跑,那跟玩赛车游戏有什么区别?真实的自动驾驶系统,面对的是复杂的交通流——有加塞的、有突然刹车的、有行人乱穿的。
这就是联合仿真要解决的问题。
说白了,CARLA 负责“看得见”的部分——传感器、渲染、车辆动力学;SUMO 负责“看不见”的部分——交通流、路网逻辑、车辆行为决策。两者一结合,你就能在逼真的 3D 场景里,跑出真实的交通流。
核心价值一句话总结:CARLA 给你眼睛,SUMO 给你脑子里的交通规则。
1.2 CARLA 是什么?
CARLA 是一个开源的自动驾驶仿真器。我最早接触它是在 2019 年,那时候版本才 0.9.6,功能远没现在这么全。但它从一开始就做对了一件事:把 Unreal Engine 4 作为渲染引擎。
这意味着什么?
- 画面真实:光照、反射、阴影,跟真实世界几乎没区别
- 传感器模拟:摄像头、激光雷达、毫米波雷达、GPS、IMU,全都有
- 场景可编程:你可以用 Python API 控制天气、行人、车辆、交通灯
- 支持多种地图:内置了城镇地图,也支持导入 OpenDRIVE 格式的高精地图
我个人习惯把 CARLA 比作一个“虚拟试车场”。你可以在里面测试感知算法、规划算法、控制算法,甚至做硬件在环测试。但它的短板也很明显——交通流模拟能力弱。CARLA 自带的 Traffic Manager 虽然能生成一些车辆,但行为模式比较单一,很难模拟出真实城市路口的复杂交互。
我的经验:如果你只是做单车的感知或控制测试,CARLA 自带的 Traffic Manager 够用了。但一旦涉及到多车协同、交通效率分析、或者 V2X 场景,你就必须上 SUMO。
1.3 SUMO 是什么?
SUMO(Simulation of Urban MObility)是一个微观交通流仿真工具。它不渲染 3D 画面,但它在交通逻辑上做得极其深入。
我记得第一次用 SUMO 时,被它的路网编辑器和车辆行为模型震撼到了。你可以定义每辆车的:
- 跟车模型(比如 Krauss 模型、IDM 模型)
- 换道模型(LC2013、SL2015)
- 路径规划(最短路径、动态路由)
- 交通灯逻辑(固定配时、感应控制、自适应控制)
SUMO 的输出是每辆车每一帧的位置、速度、加速度、车道、转向灯状态。这些数据对于自动驾驶决策系统来说,简直是黄金数据。
但 SUMO 的问题也很明显——它没有视觉。你看到的只是一堆二维的三角形在路网上移动。你没法在上面跑感知算法,也没法做传感器融合。
所以,CARLA + SUMO = 完美互补。
1.4 联合仿真的价值与应用场景
我在做自动驾驶测试时,遇到过这样一个场景:
我们要测试一个城市路口的左转决策算法。单用 CARLA,我只能手动设置几辆车,行为模式很固定。单用 SUMO,我虽然能生成密集的交通流,但没法用摄像头去验证感知结果。
联合仿真之后,情况完全变了:
- SUMO 生成 200 辆车在路网上跑,每辆车都有自己的目的地和驾驶风格
- CARLA 实时接收 SUMO 的车辆状态,在 3D 场景中渲染出对应的车辆模型
- 我们的自动驾驶车(Ego Vehicle)在 CARLA 里跑,传感器看到的是 SUMO 生成的交通流
- Ego 车的决策结果(比如左转、让行)会反馈给 SUMO,影响后续的交通流
这叫什么?这叫闭环仿真。
具体来说,联合仿真能用在以下场景:
| 应用场景 | 说明 | 我遇到的典型问题 |
|---|---|---|
| 城市路口决策测试 | 测试自动驾驶车在复杂路口(无保护左转、环岛)的决策能力 | 曾经用纯 CARLA 测试,路口车辆太少,算法过拟合到简单场景 |
| 交通效率评估 | 评估自动驾驶车对整体交通流的影响(拥堵、通行时间) | 联合仿真后发现,某决策算法虽然安全,但导致路口通行效率下降 30% |
| V2X 场景测试 | 测试车联网通信下的协同决策(绿波通行、编队行驶) | SUMO 可以模拟多车通信延迟,CARLA 渲染通信失败时的视觉表现 |
| 边缘场景生成 | 自动生成极端交通场景(紧急刹车、行人鬼探头) | 用 SUMO 控制背景车的行为参数,生成高密度交通流中的危险场景 |
| 大规模测试 | 同时运行数百个仿真实例,进行回归测试 | 联合仿真支持分布式部署,CARLA 和 SUMO 可以跑在不同机器上 |
注意:联合仿真不是万能的。CARLA 和 SUMO 之间的数据同步延迟是个大问题。我曾经遇到过 SUMO 的步长和 CARLA 的步长不匹配,导致车辆位置跳变。这个问题我们在后面的章节会专门讲怎么解决。
1.5 课程目标
这门课的目标很明确:让你从零开始,搭建一套可用的 CARLA + SUMO 联合仿真系统。
具体来说,学完这门课,你应该能:
- 独立安装 CARLA 和 SUMO,并配置好联合仿真环境
- 理解 CARLA 和 SUMO 的通信机制(Co-Simulation Bridge)
- 编写 Python 脚本,控制联合仿真中的车辆、交通灯、传感器
- 设计 自定义的交通场景,包括路口、环岛、高速公路
- 采集 联合仿真数据,用于训练和测试自动驾驶算法
- 调试 常见的联合仿真问题(同步、坐标转换、性能瓶颈)
嗯,这里要注意:这门课不是讲自动驾驶算法的。我们聚焦在仿真工具链的搭建和使用上。算法部分,你可以在我们搭建好的仿真平台上自己去跑。
1.6 前置知识
说实话,联合仿真涉及的东西挺杂的。但我不希望你因为前置知识不够而放弃。我列一下最低要求:
- Python 基础:能写简单的脚本,理解类、函数、循环、条件判断。如果你会 NumPy 和 Matplotlib,那就更好了。
- Linux 基础:能在 Ubuntu 系统上执行命令、安装软件包。如果你用过 Docker,会省很多事。
- 基本概念:知道什么是自动驾驶、什么是传感器(摄像头、激光雷达)、什么是交通流。
如果你没有这些基础,也不用慌。我在每章都会给出详细的步骤和代码,你跟着做就行。遇到问题,先自己查一下,实在不行再问我。
我的建议:准备一台配置还行的电脑。CARLA 对显卡要求比较高,至少需要 6GB 显存。SUMO 倒是不挑机器。如果你没有 GPU,可以考虑用 CARLA 的 CPU 模式,但帧率会很低。
1.7 本章知识体系
下面这张图,是我自己整理的联合仿真知识体系。你可以把它当作整门课的地图:
这张图展示了联合仿真的核心架构。从上到下,我们一步步搭建。别急,后面每一章都会对应图中的一个模块。
1.8 写在前面的话
做仿真这件事,说白了就是用虚拟世界去逼近真实世界。但你要明白,仿真永远只是仿真,它不能完全替代真实路测。不过,好的仿真系统可以帮你发现 80% 的问题,省下 80% 的时间和成本。
我曾经在一个项目里,用联合仿真跑了一整夜的回归测试,第二天早上发现算法在某个路口连续失败了 12 次。如果没有仿真,这个 bug 可能要等到实车路测才能发现——那时候代价就大了。
所以,认真学这门课。你搭建的不只是一个仿真系统,更是一套自动驾驶开发的加速器。
好了,第一章就到这里。下一章,我们开始动手安装 CARLA 和 SUMO。
本章要点回顾:
- CARLA 负责 3D 渲染和传感器模拟,SUMO 负责交通流和路网逻辑
- 联合仿真的核心价值是:在逼真场景中跑出真实交通流
- 应用场景包括路口决策测试、交通效率评估、V2X 场景、边缘场景生成
- 前置知识:Python 基础、Linux 基础、自动驾驶基本概念
可可精品资料库