搞自动驾驶的朋友们,是不是经常听到这些词?Open-loop SIL、Closed-loop HIL……每个字都认识,连在一起就懵了?别慌,今天我们用最接地气的方式,把 ASAM 标准框架下的仿真测试「四象限」给你讲明白。顺便聊聊为什么"看录像"已经不够用了,以及 E2E 架构是怎么把这些假设全部推翻的。
先搞清两个维度,世界就清晰了
在开始之前,我们需要理解两个正交的维度:
维度一:SIL vs HIL —— 你的「被测对象」跑在哪里?
SIL(Software-in-the-Loop,软件在环)意味着被测的自动驾驶算法跑在普通 PC 或者云服务器上,不需要任何真实硬件。而 HIL(Hardware-in-the-Loop,硬件在环)则是把算法烧到目标 ECU / 域控制器上运行——真正的芯片在真正地跑。
维度二:Open-loop vs Closed-loop —— DUT 的输出能不能「反作用」于输入?
这是最容易被误解的一组概念,很多人以为 Open-loop = 录制数据回放、Closed-loop = 仿真环境。错! 根据 ASAM 框架下的定义,区分 Open-loop 和 Closed-loop 的唯一标准是:被测系统(DUT)的输出是否会反馈影响后续的输入。
Open-loop(开环)意味着:输入是预先确定的(predefined),DUT的输出被记录和评估,但不会反馈回去改变输入序列。注意,这里的"预先确定的输入"可以来自多种来源——真实路测录制的数据、合成生成的数据、甚至是对录制数据做了增强/篡改/变换(data manipulation)之后的数据。只要 DUT 的输出不影响输入,就是 Open-loop。
Closed-loop(闭环)意味着:DUT的输出(比如控制指令)会被送回仿真环境,仿真环境据此动态生成新的输入——形成一个完整的反馈循环。DUT 的每一个决策都会改变它接下来"看到"的世界。
最通俗的比喻?看电影 vs 打游戏。
看电影 vs 打游戏Open-loop 就像看电影——主角刹车了你点头,主角撞了你皱眉,但你改不了剧情、改不了结局。你只是一个观众,只能验证"当下你的系统决策看起来对不对"。Closed-loop 就像打游戏(比如 GTA)——你打方向车就转,你踩油门车就跑,你撞了世界就变了。你的行为会改变未来,每个决策都会产生不同结果。把两个维度画成坐标轴,就得到了下面这张经典的「四象限图」:
四象限全景图好,接下来我们一个一个拆开聊。
1. Open-loop SIL:预定义输入 + 纯软件执行
一句话总结
给算法一份「预先确定好的」输入数据,在仿真环境下 跑一遍,看输出对不对——不管算法输出了什么,输入都不会变。
这是最简单、最快、成本最低的测试方式,不需要渲染,不需要跟环境进行交互,把只需要预先准备好的传感器数据「喂」给算法,然后对比算法输出和期望结果。
这里的「预先准备好的数据」有很多来源:
- 录制回放(Log Replay):直接使用路测采集的原始数据,这是最常见的做法
- 合成生成(Synthetic Generation):用工具生成特定的传感器信号序列(比如 ASAM MIL 报告中提到的 "stimulate Vego with a constant value" 这种人工构造的输入激励)
- 数据增强/篡改(Data Manipulation):在真实录制数据的基础上做变换——比如修改天气条件、替换前方车辆、注入噪声等,生成「半真半假」的新数据
不管数据来自哪里,只要 DUT 的输出不反馈影响输入,就是 Open-loop。
Open-loop SIL 架构图为什么它这么受欢迎?
理由很直白:速度快,成本低,可以海量并行。想象一下你有 100 万公里的路测数据,再加上对这些数据做各种增强变换后生成的衍生数据,在云端开 1000 个容器同时跑,可能一个晚上就能把整个模块的评估跑完。这就是为什么几乎每一家自动驾驶公司的 CI/CD 流水线里都有 Open-loop SIL——它是回归测试的绝对主力。
但它的致命弱点是什么?
没有反馈回路。不管你的输入数据是真实录制的、合成生成的、还是增强变换过的——它终归是「提前确定好的」。算法说"我要左转",但世界不会因为你左转而发生变化。这意味着你永远无法回答那个核心问题:如果当时它做了另一个决策,会发生什么?
你能判断"这个算法有没有识别到行人"、"有没有刹车"、"行为看起来对不对",但你验证的其实是:在一个已经写好的剧本里,演员有没有演对。 而不是:演员能不能随机应变。
用 ASAM 的话说,Open-loop 测试是 "testing of driving functions without scenarios"——这里的 "without scenarios" 不是说没有数据,而是说没有动态交互的场景演进。输入是预先定义好的序列,不会因为 DUT的行为而发生分支。
2. Closed-loop SIL:虚拟世界驾驶模式
一句话总结
算法在虚拟世界里「自己开车」,它的每个决策都会改变世界。
这是仿真测试的核心战场。你需要一个仿真引擎(比如 CARLA、51Sim、aisim,dSPACE SIMPHERA 等),它模拟整个驾驶环境:道路、交通参与者、天气、光照,甚至传感器的物理特性。算法运行在这个虚拟世界中,它的输出(比如"打方向盘 15 度、踩油门 30%")会实时反馈给仿真引擎,仿真引擎据此更新世界状态,再生成新的传感器数据。
Closed-loop SIL 架构图为什么自动驾驶「必须」进入 Closed-loop?
因为自动驾驶真正难的,从来不是"看见",而是决策(Decision)和规划(Planning)。而这两件事有一个共同前提:未来是可以变化的。
如果世界是固定的——别的车不会因为你变道而反应,行人不会因为你靠近而躲避,场景不会发生分叉——那你验证的不过是"在一个固定剧本里,你有没有演对"。这在工程上是非常危险的。
Closed-loop 就不同了。你变道,旁边的车可能让你、可能加速、可能直接撞你。"前方 50 米突然有个小孩跑出来"、"暴雨 + 逆光 + 前车急刹"——这些在真实路测中可能几百万公里才遇到一次的极端场景,在仿真里你可以无限复现、参数化扫描。
ASAM OpenSCENARIO 标准就是为此而生的:它定义了一套场景描述语言,让你可以用代码精确地描述"在什么条件下,哪个交通参与者做了什么动作"。OpenSCENARIO 2.0 更进一步,支持跨平台复用——同一套场景可以在 SIL、HIL、测试场、实车上运行。
它的痛点在哪?
两个字:仿真度。虚拟传感器数据和真实传感器数据之间的差距(Sim-to-Real Gap)是闭环 SIL 的阿喀琉斯之踵。你的渲染引擎生成的摄像头画面,和真实世界的摄像头画面,在像素层面差异巨大。如果你的感知算法对渲染伪影敏感,那仿真结论就不可信了。
3. Open-loop HIL:预定义输入 + 真实硬件执行
一句话总结
把预先准备好的信号「灌」进真实的 ECU,看硬件能不能正确处理——ECU 的输出不影响输入信号。
现在我们从纯软件世界跳到了硬件世界。Open-loop HIL 和 Open-loop SIL 的核心逻辑一样——都是预定义的输入、没有反馈回路——但有一个关键区别:被测对象是真实的 ECU 硬件。
和 Open-loop SIL 一样,这里的输入数据同样可以来自多种来源:路测录制的原始信号、信号发生器按测试规范人工构造的标准波形、或者对录制数据做了修改增强的信号。不管来源如何,信号发生器会把这些数据转换成真实的物理信号(CAN 总线报文、以太网帧、模拟视频信号等),通过真实的线缆送给 ECU。
Open-loop HIL 架构图它验证的是什么?
不是算法对不对——那是 SIL 的事。HIL 验证的是:真实的硬件能不能在真实的时间约束下正确工作。比如:ECU 能不能在 10ms 内完成一帧数据的处理?CAN 总线的时序对不对?硬件看门狗会不会误触发?内存有没有泄漏?
这些问题在 SIL 里是测不出来的,因为 SIL 运行在 x86 架构的 PC 上,时序和资源约束完全不同。
典型应用场景
车载以太网协议一致性测试、ECU 启动/休眠时序验证、传感器接口电气特性检查。这些都是"给硬件播放预设好的测试曲目,看它能不能正确响应"的逻辑。
4. Closed-loop HIL:终极形态
一句话总结
真正的 ECU 在虚拟世界里「活着」开车——最接近实车路测的验证方式。
这是仿真测试金字塔的顶端。一台实时仿真机(通常是 dSPACE SCALEXIO 或 NI PXI 这样的专业设备)运行着整个虚拟世界,通过 I/O 板卡把仿真数据转成真实的物理信号送给 ECU,ECU 的控制输出又被采集回来反馈给仿真环境。
Closed-loop HIL 架构图为什么说它是「终极形态」?
因为它同时验证了三件事:算法逻辑对不对(功能正确性)、硬件能不能跟上(实时性)、以及在闭环交互中系统整体行为是否安全(系统级验证)。它是量产前最后一道防线——如果 Closed-loop HIL 都过了,那基本可以上路了。
但它也是最贵最慢的
一套 Closed-loop HIL 台架可能要花几百万人民币,而且因为涉及真实硬件和实时仿真,测试速度只能是 1x 实时——无法快进。你想跑 100 万公里?那就需要真正跑 100 万公里的时间(或者买 N 台台架并行)。
而且在 HIL 世界里,时间不能"假"——不是"差不多 10ms",而是精确到毫秒甚至微秒级 jitter。同时还要保证每次运行结果一致(deterministic)、数据 bit-level 一致。仿真不是"能跑"就行,而是要做到可控 + 可复现 + 稳定。
ASAM 在其「Requirements Based Testing on Closed Loop HIL」报告中强调了闭环 HIL 测试中场景的可复用性挑战:"specific test environment steps are quickly built into the artifacts unconsciously"——也就是说,测试工程师经常不自觉地把特定硬件环境的细节写死在测试用例里,导致场景无法在不同台架之间迁移。
四种模式速查对比
对比表
真正的难点,不在你以为的地方
聊完了四象限,你可能觉得"不就是有没有反馈吗,加个反馈回路不就行了"。没那么简单。Closed-loop 之所以难,难在三件事:
难点一:你其实没有"完整世界"
Log 只有 ego 视角——看不到所有物体、不知道别人的意图、无法支持未来分叉。所以 log replay 天然是残缺的。这也是为什么现在大家在做 World Model、4D Reconstruction、Neural Scene——本质上都是在试图从一段残缺的录像里"重建一个完整的世界"。
难点二:周围车辆必须"会思考"
Closed-loop 的关键不是 ego 会不会动,而是别的车会不会因为你而改变行为。你变道,有的车会让你,有的车会加速,有的可能直接撞你。要模拟这种交互,你需要给周围的交通参与者赋予"智能"——可以是规则模型(rule-based)、可以是学习模型(RL / Imitation Learning)、也可以是混合策略。
难点三:时间精度是 HIL 的生死线
在 SIL 里时间可以"假"——跑快点跑慢点都行。但在 HIL 里,10ms 就是 10ms,精确到微秒级 jitter,同时还要 deterministic。这直接决定了仿真结果能不能被信任、能不能被复现。
构建「会响应你的世界」:三条主流路线
行业里现在有三种看起来不同的方法来实现 Closed-loop,但本质上都在做同一件事:构建一个「会响应你的世界」。
三条路线路线一:Log Replay 增强——把录像变成游戏。 从真实数据出发,给 log 加上"行为能力":周围车辆可以响应你、行人可以做出反应、场景可以产生分叉。技术栈包括 World Model、4D Reconstruction、Neural Scene 等。优势是真实感强,但受限于原始数据覆盖范围。
路线二:Scenario 构建——直接造一个世界。 不用真实数据,直接用 ASAM OpenSCENARIO 等标准描述场景:突然 cut-in 的车辆、前车急刹、高速汇入……可控、可复现、可调难度。优势是覆盖全面、支持参数化扫描,但真实感依赖渲染质量。
路线三:Requirement 驱动——从"感觉对"到"必须达标"。 不再定性地问"好不好",而是定量地问"达没达标":安全距离是否满足阈值?TTC 是否在合规范围?是否零碰撞?这就是 Requirements-based Testing,它让 Closed-loop 的输出变得可量化、可审计。
三条路线殊途同归,核心都是同一件事:下一秒的世界,取决于当前世界 + 你的行为 + 其他参与者的行为。
不是越真实越好——不同阶段该用不同「世界复杂度」
聊了这么多 Closed-loop 的好,你可能想问:那是不是所有测试都应该上 Closed-loop?
答案是:绝对不是。
很多人有一个误区:"仿真越真实越好"。但在工程上,更准确的说法是:在正确的阶段,用「刚刚好的世界复杂度」。
CI / Staging / ReleaseCI(持续集成)阶段:你只需要"快速发现你写错了"。 目标是快速、频繁、低成本地发现错误——接口有没有 broken?算法有没有 crash?基本功能有没有退化?这时候如果上来就搞 Closed-loop + agent 行为建模 + 世界动态演化,结果通常是测试变慢、变不稳定、还不好 debug。所以 CI 的典型形态是 Open-loop + 极简场景:replay 一小段数据、跑几个 deterministic case、几分钟内出结果。CI 不是在验证"系统是否聪明",而是在验证"系统有没有坏"。
Staging / SIL 大规模阶段:你开始需要"一个会动的世界"。 目标变成了验证系统行为是否合理——决策开始重要、交互开始重要、长时间行为开始重要。如果还用 Open-loop,你其实验证不了 Planning。所以这个阶段 Closed-loop 开始变得必要,但你需要在"真实性"和"吞吐量"之间做平衡:用 rule-based agent、简化物理模型、可控的随机性——这是简化版 Closed-loop。
Release / HIL 阶段:你需要"一个严格受控的世界"。 目标不再是"跑得多",而是"跑得准"——deterministic、repeatable、timing-accurate。这时候 Closed-loop 本身会带来新的挑战:agent 行为可能有随机性、世界演化可能不可预测、浮点误差会累积放大。所以在 HIL 上,你需要的是强约束的 Closed-loop——严格控制世界的自由度,用可控性换可验证性。
一句话总结:真正成熟的系统,不是到处用 Closed-loop,而是在正确的地方用正确复杂度的 Closed-loop。
E2E 架构如何颠覆了上述所有假设?
好了,前面讲的都是"传统规则"。现在让我们聊聊 E2E(End-to-End)架构是怎么把这些规则全部推翻的。
E2E 颠覆颠覆一:Open-loop 的局限被放大到极致
传统的模块化架构(感知→融合→预测→规划→控制)之所以和 Open-loop 测试很搭,是因为每个模块都有清晰的输入输出接口。你可以单独测感知模块:输入是传感器数据,输出是 3D bounding box,用 mAP 来评估——非常清晰。
但 E2E 架构把所有模块塞进了一个大神经网络。输入是原始传感器数据,输出直接就是轨迹或控制信号。中间没有"感知结果"这个可以度量的东西了!你没法用 Open-loop 来单独评估"感知准不准"——因为根本不存在一个独立的感知模块。
你唯一能评估的是:给定这一帧输入,模型输出的轨迹和 Ground Truth 轨迹差多远。但这里有个致命的问题——轨迹是一个关于未来的预测,而 Open-loop 数据只包含了一种未来(实际发生的那个)。模型如果输出了一条不同但同样合理的轨迹呢?Open-loop 评估会判定它"错了",但它可能是对的。
结论:E2E 时代,纯 Open-loop 评估的可信度大幅下降,Closed-loop 成为刚需。
颠覆二:闭环仿真的速度瓶颈
既然 Closed-loop 成了刚需,那问题就来了:E2E 大模型的推理速度跟不上。
传统模块化架构里,Closed-loop SIL 可以跑得很快,因为每个模块相对轻量。但 E2E 模型(特别是基于 Transformer 的视觉大模型)单帧推理可能就要 50-200ms,还需要 GPU。而仿真环境本身也在消耗算力——场景渲染、物理模拟、交通流……
结果就是:一次 Closed-loop SIL 仿真测试的计算成本可能是传统方案的 10-100 倍。想跑大规模场景扫描?GPU 集群的账单会让你心跳加速。
这逼迫业界重新思考仿真架构:如何在保证闭环交互的前提下降低计算成本?
颠覆三:Neural Rendering 的可能性
E2E 模型的另一个特点是:它直接处理原始像素。这意味着传统仿真引擎(Rasterization-based rendering)和真实世界之间的 Sim-to-Real Gap 会被 E2E 模型无情地暴露——毕竟它连光照的微妙变化都学进了权重里。
于是 Neural Rendering(神经渲染)登场了。
核心思路是:不用传统图形学来渲染传感器数据,而是用神经网络(NeRF、3D Gaussian Splatting、World Model)来生成"看起来像真实世界"的传感器数据。你有一段真实路测录像,Neural Rendering 可以基于它生成"如果你往左偏了 1 米会看到什么"的新视角——从而实现了一种介于 Open-loop 和 Closed-loop 之间的新范式。
这就像是:你不再需要从头搭建一个虚拟世界,而是「在真实世界的录像上做手术」——修改自车轨迹,让神经网络帮你脑补出新的视觉画面。
这开辟了一条全新的技术路线:基于 Neural Rendering 的 Closed-loop 仿真——兼具真实感和交互性。
这其实是一场范式变化
如果把整个行业的发展压缩一下,脉络其实非常清晰:
范式跃迁第一阶段:Replay。 你只是回放数据,验证的是 Perception。你是观众。
第二阶段:Closed-loop Simulation。 你开始影响世界,验证的是 Decision + Planning。你是玩家。
第三阶段(正在发生):Adversarial Simulation。 世界开始"故意让你失败"——有 agent 专门制造危险场景、有系统主动挖掘 failure case、有 RL 在生成极端对抗场景。你面对的不再是一个被动的世界,而是一个会挑战你的对手。
从"看录像"到"打游戏"再到"和高手对战"——这就是自动驾驶测试的进化之路。
写在最后
自动驾驶仿真测试正站在一个历史性的拐点上。传统的 Open-loop/Closed-loop、SIL/HIL 四象限框架依然是基础,理解它们是每一个自动驾驶工程师的必修课。但 E2E 架构的到来正在重新定义"好的仿真"到底意味着什么。
未来的仿真平台,大概率是 Closed-loop SIL(基于 Neural Rendering)+ Closed-loop HIL(基于传统实时仿真)的组合拳。前者负责大规模功能验证和 Corner Case 挖掘,后者负责量产前的系统级确认。
而如果你正在做 HIL 或仿真平台,你真正在做的其实已经不是一个普通的 Simulator 了——你在做一个「世界执行引擎」。它需要解决的不是场景写法和数据格式,而是:世界状态如何定义、时间如何推进、不同仿真引擎如何统一、以及如何保证 deterministic。
在这一切的底层,ASAM 的标准体系(OpenSCENARIO、OSI、XIL)正在努力确保这些不同的测试方式能够互联互通、场景复用——毕竟在这个行业里,光靠一种测试方式是不够的,你需要所有的武器。
参考标准与资料:ASAM XIL (eXtended Interoperability Layer)、ASAM OpenSCENARIO、ASAM OSI (Open Simulation Interface)、ASAM 测试方法论报告