2、仿真环境搭建基础:硬件在环(HIL)与软件在环(SIL)概念、主流仿真工具介绍(如CARLA, VTD, Prescan)、环境配置实战

好,咱们正式开始搭建仿真环境。这一节内容,说白了就是整个AD系统测试的“地基”。地基打不牢,后面跑什么场景都容易翻车。我见过不少团队,上来就追求高保真度,结果环境配置卡了两周,最后发现连个基本的SIL都跑不通。嗯,咱们一步步来。

2.1 硬件在环(HIL)与软件在环(SIL)——到底有什么区别?

先搞清楚这两个概念。很多新人容易混淆,其实没那么复杂。

SIL(Software-in-the-Loop),就是软件在环。说白了,你的算法代码跑在一个虚拟环境里,没有真实硬件参与。我刚开始做ADAS那会儿,公司连个像样的ECU都没有,全在PC上跑SIL。好处是快,迭代快,调试方便。坏处是——你永远不知道真实硬件上会不会出幺蛾子。

HIL(Hardware-in-the-Loop),硬件在环。这时候你的算法已经烧录到真实的控制器里了,比如一个域控制器或者MCU。但车还是虚拟的,通过I/O接口和实时系统连接。我曾经在HIL测试中遇到过一个问题:算法在SIL里跑得好好的,一上HIL就报时序错误。查了两天,发现是CAN总线延迟导致的。你看,这就是HIL的价值——暴露真实硬件的问题。

对比项 SIL HIL
硬件参与度 无真实硬件 真实控制器/ECU
实时性要求 低,可非实时 高,必须实时
调试便利性 极高,可打断点 较低,依赖日志
测试成本 高(硬件+实时系统)
典型应用阶段 算法开发初期 集成测试、验证
我的建议: 别想着一步到位上HIL。先跑通SIL,把算法逻辑验证清楚。等SIL覆盖率做到80%以上,再考虑HIL。否则你会在硬件问题上浪费大量时间。

2.2 主流仿真工具——CARLA、VTD、Prescan怎么选?

市面上工具很多,但真正在工业界用得多的,就这三家。我分别说说我的使用感受。

2.2.1 CARLA——开源党的最爱

CARLA是个开源仿真器,基于Unreal Engine。我个人很喜欢它,因为社区活跃,文档齐全。你想想看,一个开源项目能做到这个程度,确实不容易。

  • 优点: 免费、可定制性强、支持Python API、传感器模型丰富(相机、激光雷达、毫米波雷达都有)
  • 缺点: 渲染开销大、实时性一般、官方场景库偏少
  • 适合场景: 算法原型验证、学术研究、小团队快速迭代

我记得有一次,我们需要测试一个极端场景——夜间暴雨下的行人横穿。CARLA里改个天气参数就搞定了,几分钟的事。要是用商业工具,光申请场景包就得等一周。

2.2.2 VTD(VIRES Virtual Test Drive)——工业级选手

VTD是德国VIRES公司的产品,在主机厂和Tier 1里用得非常多。它最大的特点是——支持完整的ADAS/VAD开发流程,从场景编辑到传感器仿真再到数据回放,一条龙。

  • 优点: 实时性好、支持ASAM OpenDRIVE/OpenSCENARIO标准、与dSPACE/NI等HIL平台深度集成
  • 缺点: 贵(一套license几十万)、学习曲线陡峭
  • 适合场景: 量产项目、HIL测试、法规验证
注意: VTD的许可管理比较严格。我曾经有个同事,因为忘了在虚拟机里激活license,结果整个HIL测试台架停了一天。所以,用VTD之前,一定先搞清楚你们的许可策略。

2.2.3 Prescan——西门子的“瑞士军刀”

Prescan现在属于Siemens,主打易用性。它的图形化界面做得很好,拖拽式场景编辑,对新手非常友好。

  • 优点: 上手快、与Simulink无缝集成、传感器模型精度高(尤其是雷达)
  • 缺点: 场景复杂度有限、大型场景性能下降明显
  • 适合场景: 快速原型、功能验证、与Simulink联合仿真

我个人习惯是:原型阶段用CARLA,集成测试用Prescan,量产验证用VTD。当然,这取决于你们公司的预算和技术栈。

2.3 环境配置实战——从零搭建一个SIL测试环境

光说不练假把式。咱们来搭一个最简单的SIL环境。假设你用的是CARLA + Python。

2.3.1 安装CARLA

首先,去CARLA官网下载对应版本的包。我建议用0.9.14或更新的版本,API更稳定。

# 下载CARLA包(以0.9.14为例)
wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/CARLA_0.9.14.tar.gz
tar -xzf CARLA_0.9.14.tar.gz
cd CARLA_0.9.14

# 安装Python依赖
pip install -r PythonAPI/examples/requirements.txt
避坑指南: 我曾经在Ubuntu 20.04上装CARLA,结果死活打不开。后来发现是显卡驱动版本太低。CARLA对NVIDIA驱动有要求,至少520以上。如果你用的是笔记本双显卡,记得切到独显运行。

2.3.2 启动CARLA服务器

CARLA采用客户端-服务器架构。先启动服务器,再运行你的算法脚本。

# 启动CARLA服务器(默认端口2000)
./CarlaUE4.sh -quality-level=Low -fps=10

这里我用了低画质和10帧,因为只是做SIL测试,不需要高保真渲染。你想想看,跑个算法验证,没必要把GPU烧到100%。

2.3.3 编写第一个测试脚本

下面是一个最简单的脚本:生成一辆车,让它直线行驶。

import carla
import time

# 连接到CARLA服务器
client = carla.Client('localhost', 2000)
client.set_timeout(10.0)

# 获取世界对象
world = client.get_world()

# 生成一辆车
blueprint_library = world.get_blueprint_library()
vehicle_bp = blueprint_library.filter('model3')[0]
spawn_point = world.get_map().get_spawn_points()[0]
vehicle = world.spawn_actor(vehicle_bp, spawn_point)

# 让车动起来
vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0))

# 跑10秒
time.sleep(10)

# 清理
vehicle.destroy()
print("测试完成!")

这段代码很简单,但它是你整个SIL测试的起点。你可以在此基础上加传感器、加场景、加碰撞检测。我刚开始做的时候,就是从这个脚本一步步扩展起来的。

2.3.4 验证环境是否正常

跑完脚本后,你应该能看到CARLA窗口里有一辆特斯拉Model 3在直行。如果报错,多半是端口被占用或者版本不匹配。

常见问题:
  • 连接超时:检查防火墙是否放行2000端口
  • 蓝图找不到:确认CARLA版本和Python API版本一致
  • 渲染卡顿:降低画质或关闭渲染(用no-rendering模式)

2.4 小结

这一节我们讲了SIL和HIL的区别,介绍了三个主流工具,还亲手搭了一个SIL环境。说实话,环境搭建是最枯燥的部分,但也是最重要的。我见过太多人,工具装了一半就放弃了,或者装好了不知道怎么用。

记住一句话:仿真环境不是目的,是手段。你的目标是测试算法,不是玩转工具。所以,选一个你最顺手的工具,把它用透,比什么都强。

下一节,我们会讲场景设计——怎么构造那些让算法“崩溃”的极端场景。嗯,那才是真正有意思的部分。