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 联合仿真的配置。到时候你会看到,这两个平台配合起来有多强大。