2. 仿真测试工具链介绍:主流仿真平台对比与选型
做自动驾驶仿真测试,选对工具链是第一步。说实话,我见过不少团队一上来就追着最火的平台跑,结果发现跟自己的场景根本不搭,白白浪费几个月。今天我就把这几个主流平台——CARLA、SUMO、LGSVL、AirSim——掰开揉碎了讲清楚。
2.1 为什么需要仿真工具链?
先问个问题:你想想看,一辆自动驾驶车在路上跑,遇到一个极端场景的概率有多大?比如行人突然从盲区窜出来、对面大货车爆胎侧翻。真实路测里,这种场景可能跑几万公里都碰不上一次。
仿真工具链就是干这个的。它能在虚拟世界里快速生成各种场景,从常见的十字路口到诡异的“鬼探头”,全都能模拟。我个人习惯把工具链分成三层:
- 场景构建层:负责搭建道路、交通流、天气等环境
- 传感器模拟层:模拟摄像头、激光雷达、毫米波雷达的数据
- 算法验证层:把感知、规划、控制算法接进来跑
说白了,工具链就是你的“虚拟试验场”。选对了,事半功倍;选错了,后面全是坑。
2.2 四大主流平台逐个看
2.2.1 CARLA——最像“真车”的仿真器
CARLA 是我用得最多的平台。它基于 Unreal Engine 4,画面逼真度在开源仿真器里数一数二。我在项目中遇到过一个问题:用 CARLA 生成的激光雷达点云,跟真实 Velodyne 的数据分布非常接近,这让我省了不少标定时间。
核心特点:
- 支持多种传感器:摄像头、LiDAR、雷达、GPS/IMU
- 内置场景编辑器:可以拖拽式构建道路、放置车辆、设置行人轨迹
- Python API 非常完善:控制车辆、获取数据、设置天气,一行代码搞定
- 支持 ROS 和 Autoware 集成
适用场景:感知算法验证、传感器融合测试、复杂城市道路场景
我的小技巧:用 CARLA 做场景时,记得把“天气控制”用起来。我曾经在雨天场景里发现感知模型误检率飙升了 40%,这个坑在晴天仿真里根本发现不了。
2.2.2 SUMO——交通流模拟的“老大哥”
SUMO 跟 CARLA 不一样,它不关心画面好不好看。它专注的是交通流模拟——车怎么走、路怎么堵、红绿灯怎么变。说白了,它是微观交通仿真领域的标准工具。
核心特点:
- 支持大规模路网:可以导入 OpenStreetMap 的真实路网
- 丰富的交通模型:跟驰模型、换道模型、信号灯控制
- Python/TraCI 接口:可以在仿真运行时动态控制车辆
- 轻量级:不需要 GPU,跑起来飞快
适用场景:交通流场景生成、V2X 通信测试、大规模路网仿真
注意:SUMO 本身没有传感器模拟能力。我一般把它跟 CARLA 配合使用——SUMO 负责生成交通流,CARLA 负责渲染画面和传感器数据。这叫“联合仿真”。
2.2.3 LGSVL——LG 的“工业级”选手
LGSVL 是 LG 推出的仿真平台,基于 Unity 引擎。它跟 Apollo 和 Autoware 的集成做得特别好,几乎开箱即用。我记得有一次帮客户做项目,对方要求必须用 Apollo 5.0,LGSVL 直接就能对接,省了我两天适配时间。
核心特点:
- 深度集成 Apollo:支持 Apollo 的感知、规划、控制模块直接接入
- 高保真传感器模拟:支持多摄像头、LiDAR、IMU 的精确标定
- 场景编辑器:可以创建自定义场景,支持 HD Map 导入
- 支持云端部署:可以大规模并行仿真
适用场景:Apollo 生态用户、工业级仿真测试、云端大规模仿真
避坑指南:我曾经在 LGSVL 里跑一个夜间场景,发现它的光照模型跟真实世界有偏差。后来我手动调整了 Unity 的 Post Processing 参数才解决。如果你对画面真实性要求极高,记得先做校准。
2.2.4 AirSim——微软的“无人机+车”双栖平台
AirSim 是微软开源的项目,基于 Unreal Engine。它最初是为无人机设计的,后来扩展到了自动驾驶。它的优势在于传感器模拟的精度——尤其是物理引擎和动力学模型。
核心特点:
- 高精度物理引擎:支持车辆动力学、空气动力学模拟
- 丰富的传感器:摄像头、深度图、分割图、LiDAR、IMU
- 支持多种编程语言:C++、Python、C#
- 内置计算机视觉工具:比如深度估计、光流计算
适用场景:无人机仿真、高精度动力学测试、计算机视觉研究
注意:AirSim 对硬件要求比较高。我试过在 GTX 1080 上跑,开两个摄像头就掉帧。如果你只有普通显卡,建议先用 CARLA 或者 SUMO 入门。
2.3 横向对比:一张表说清楚
| 特性 | CARLA | SUMO | LGSVL | AirSim |
|---|---|---|---|---|
| 渲染引擎 | Unreal Engine 4 | 无(2D) | Unity | Unreal Engine 4 |
| 传感器模拟 | ★★★★★ | ★ | ★★★★ | ★★★★ |
| 交通流模拟 | ★★★ | ★★★★★ | ★★★ | ★★ |
| ROS 集成 | ★★★★ | ★★★ | ★★★★★ | ★★★★ |
| 场景编辑器 | ★★★★ | ★★ | ★★★★ | ★★★ |
| 硬件要求 | 中高 | 低 | 高 | 高 |
| 开源协议 | MIT | EPL-2.0 | Apache-2.0 | MIT |
2.4 选型建议:到底该用哪个?
这个问题没有标准答案。我根据自己踩过的坑,给你几个参考:
- 如果你做感知算法:首选 CARLA。它的传感器模拟最逼真,场景编辑器也最灵活。
- 如果你做规划控制:CARLA + SUMO 联合仿真。SUMO 生成交通流,CARLA 提供环境反馈。
- 如果你用 Apollo:直接上 LGSVL。集成度最高,省心。
- 如果你做无人机或高精度动力学:AirSim 更适合。
- 如果你刚入门,预算有限:先玩 CARLA。社区活跃,教程多,遇到问题容易找到答案。
我的经验:别指望一个平台解决所有问题。我现在的做法是:用 CARLA 做感知测试,用 SUMO 做交通流生成,用 LGSVL 做 Apollo 集成测试。三个平台各司其职,配合起来效果最好。
2.5 快速上手:用 CARLA 跑一个最简单的场景
光说不练假把式。我给你一个最简单的 CARLA 示例,跑起来看看效果:
import carla
import random
# 连接 CARLA 服务器
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)
# 加载地图
world = client.load_world('Town01')
# 生成一辆车
blueprint_library = world.get_blueprint_library()
vehicle_bp = blueprint_library.filter('model3')[0]
spawn_point = random.choice(world.get_map().get_spawn_points())
vehicle = world.spawn_actor(vehicle_bp, spawn_point)
# 让车自己开
vehicle.set_autopilot(True)
print('车辆已生成,正在自动驾驶...')
这段代码干了三件事:连上 CARLA、生成一辆特斯拉 Model 3、让它自己开。你可以在 CARLA 的窗口里看到车在 Town01 地图上跑。
提示:第一次跑之前,记得先启动 CARLA 服务器。在终端里运行 ./CarlaUE4.sh(Linux)或 CarlaUE4.exe(Windows)。
2.6 小结
选仿真平台就像选工具——没有最好的,只有最合适的。CARLA 适合感知和场景构建,SUMO 适合交通流,LGSVL 适合 Apollo 生态,AirSim 适合高精度动力学。我的建议是:先搞清楚你的测试目标是什么,再选平台。别盲目追新,也别死守一个。
下一章,我会带你手把手搭建一个完整的仿真测试环境,包括 CARLA + SUMO 联合仿真的配置。到时候你会看到,这两个平台配合起来有多强大。