机器人 / AI 系统 · 实证研究 · 研究原型(仿真)
光真实驾驶仿真器上的运行时准入控制:在同一验证地板下的敌对控制器与前沿模型控制器
将安全视为一个治理什么可以被执行的确定性运行时的属性,与谁或什么在驾驶无关。控制器只提议一个 (steer, throttle) 对;一个无状态屏蔽在 20 Hz 的控制 tick 上,针对四个组合的、真值不变量验证每个提议,并在其到达车辆之前将其夹紧——在一个良性 PID 控制器、一个专为撞车而构建的敌对控制器,以及一批位于方向盘处的前沿与本地模型之下被同样地评估。
自动驾驶的安全论证正日益建立在一个不可证伪的前提之上:车辆之所以安全,是因为控制器好。我们报告一项对相反立场的实证研究——将安全视为一个治理什么可以被执行的确定性运行时的属性,与谁或什么在驾驶无关。我们在 CARLA 0.9.15 光真实仿真器中,于控制器与执行器之间插入一个无状态的准入层(一个安全屏蔽)。控制器只提议一个 (steer, throttle) 对;屏蔽在 20 Hz 的控制 tick 上,针对四个组合的、真值不变量(在路上、限速、跟车距离、紧急停车)验证每个提议,并在其到达车辆之前将其夹紧到最近的安全动作。我们在三类控制器之下评估同一个屏蔽:一个确定性的 PID 基线、一个手写的敌对控制器(其明确目标是撞击行人),以及一批位于方向盘处的前沿与本地语言/视觉模型。借助一条逐 tick 的决策日志——它即使在屏蔽被关闭时也记录屏蔽的判决(一个反事实)——我们直接比较同一提议流在有屏蔽与无屏蔽下的执行。在一次连续的 40,052 m 行程中,敌对控制器发出了 64,952 条违反不变量的命令;屏蔽将它们全部覆写(100%),零碰撞。移除屏蔽后,同样的提议到达执行器,车辆发生碰撞;一次受控切换准入了 43 条危险命令,并在数秒内产生 2 次碰撞。前沿模型在屏蔽下跑完了路线,零碰撞,但平顺性明显退化,可追溯到一个测得的约 0.8–2.0 s 的瞥视时延,在此期间模型持有一条陈旧命令而盲开。这是仿真中的一个研究原型,而非一个车辆控制器。它提供了一个存在性证明:安全可以在运行时被强制执行,而非被假定于模型;并提供了一套多控制器测试台——敌对的与前沿模型的——用以衡量这种分离。
控制器只提议。一个确定性的屏蔽决定什么可以到达执行器——而它的判决与谁在驾驶无关。
1 · 引言
针对学习到的自主控制器,一个常见的安全论证具有这样的形式:系统之所以安全,是因为模型在其评估分布上表现良好。这个论证难以被证伪。它把安全主张与控制器的胜任度耦合在一起,而后者恰恰是在分布漂移、对抗性输入、传感器时延,或一名向系统喂入敌对命令的操作者之下会退化的那个量。当控制器是对执行器的唯一权限时,就没有一个单独的对象可供检验其正确性;“安全”与“模型做对了事”成了同一句陈述,而这句陈述只能靠不撞车来检验。
本文研究另一种做法:把安全变成一个位于控制器之下、治理什么可以被执行的确定性运行时的属性。控制器从一个权威被降格为一个提议者。它发出的每个动作都被当作一个请求,必须先通过一个准入层——我们称之为安全屏蔽——才能到达执行器。屏蔽针对被观测的状态、以接地不变量验证该提议,若提议会违反其中某一条,就将其夹紧到最近的可准入动作。控制器从不出现在不变量之中。因此,安全并不取决于是哪个控制器在驾驶。
我们在 CARLA 光真实驾驶仿真器 [1] 中实例化这一想法,并在三类刻意不同的控制器之下评估同一个屏蔽:
- 一个确定性的 PID 基线(CARLA 的
VehiclePIDController),代表一个胜任的传统控制器; - 一个手写的敌对控制器,其唯一目标是以全油门撞击最近的行人——一个恰好破坏屏蔽所治理通道的对手;以及
- 一批位于方向盘处的前沿与本地模型(Gemini 2.5-flash、DeepSeek-chat,以及一个本地的 Qwen3-VL-4B),它们感知前向摄像头和/或数值状态,并在一个后台线程上发出一个控制命令,受制于其固有的推理时延。
贡献
这是一项实证系统研究,而非一个新算法。其贡献为:
- 一个与控制器无关的准入框架,被实例化并被衡量。我们实现了一个由四个组合不变量构成、每个控制 tick 都被评估的无状态屏蔽,其中控制器不出现在不变量之中,并展示它在一个良性、一个敌对、一个前沿模型控制器之下都同样地强制执行安全集(第 2–3 节)。
- 一种反事实决策日志方法。该测试台逐 tick 地记录屏蔽对每个提议的判决,即使在屏蔽被关闭时也如此,从而使同一控制器在有屏蔽与无屏蔽下的执行能被直接比较,而非跨两次独立的行程比较(第 4 节)。
- 一个在光真实仿真器中的多控制器实证结果。针对一个敌对控制器,在一次 40 km 的行程中,屏蔽覆写了 64,952/64,952(100%)条违反不变量的命令,零碰撞;移除屏蔽后同样的提议会撞毁车辆(第 5 节)。
- 一个针对方向盘处前沿模型的时延发现。我们测得一个约 0.8–2.0 s 的瞥视时延,在此期间模型持有一条陈旧命令并在 40 km/h 下盲开约 10 m;而屏蔽——以 20 Hz 验证真值——正是抓住进入那个盲区窗口的危险之物(第 6 节)。
我们对范围直言不讳。这是一个仿真中的研究原型。它是对该架构的演示与一套测量测试台,而非一个经过认证的车辆控制器,并且其保证以我们在第 7 节陈述的假设为条件。
2 · 地板及其组合不变量
研究对象是一个名为 SafetyShield 的类(位于 carla_floor/floor.py)。它是无状态的:它不跨 tick 保留任何历史,其判决仅由当前被观测的状态与当前所提议的动作导出。它在每个控制 tick(名义上 20 Hz)上被评估。
接口
控制器提议一个动作 \(a = (\text{steer}, u)\),其中 \(\text{steer} \in [-1,1]\),以及一个带符号油门 \(u \in [-1,1]\),其中 \(u>0\) 是加速意图,\(u<0\) 是刹车意图。屏蔽消费 \(a\) 连同一个结构化状态 \(s\),后者包含车辆速度、到左右道路/车道边缘的横向净距(dist_left、dist_right)、到前方最近物体的距离(lead_dist),以及张贴的限速。它返回一个 CARLA 就绪的 \((\text{steer}, \text{throttle}, \text{brake})\) 三元组,以及一个干预列表,其中每一项记录哪条不变量触发、被提议的值与被执行的值。带符号油门仅在最后才被拆分为非负的油门通道与刹车通道:\(\text{throttle} = \max(0, u)\),\(\text{brake} = \max(0, -u)\)。
四条不变量
这些不变量按一个固定的权限顺序被评估;后一条不变量可以覆写前一条。设 \(m\) 记边缘余量,\(v\) 记以 m/s 为单位的速度,\(d\) 记以米为单位的前车距离。默认参数即在屏蔽构造函数中设定的那些。
- 在路上。若到道路/车道边缘的净距落到 \(m = 1.2\) m 以下,屏蔽计算一个朝向道路中心的纠正转向,其幅度随边缘的逼近而增大,并在提议的转向强度弱于该纠正时将其覆写。纠正幅度为 \(\min\!\big(1,\, 0.35 + (m - \text{clearance})/m\big)\),其符号背离最近的边缘。
- 限速。若当前速度处于(逐状态的)张贴限速或以上,且所提议的带符号油门为正,则屏蔽把油门设为 \(0\)。在限速或以上,正向加速永不被准入。
- 跟车距离。屏蔽维持一个速度相关的间隙
\[ \text{safe\_gap} \;=\; \max\!\big(10\ \text{m},\; v \cdot 2.4\ \text{s}\big), \]即一个 \(10\) m 的下限与一个 \(2.4\) s 的车头时距。若前车距离低于此间隙,它索求一条刹车命令 \(-\min\!\big(1,\, (\text{safe\_gap}-d)/\text{safe\_gap} + 0.3\big)\),并覆写任何更弱(刹车更少)的提议。
- 紧急停车。若前方最近的物体处于 \(\text{emergency\_gap} = 8\) m 以内,屏蔽无视提议强制全刹车(\(u = -1\))。这是权限最高的不变量,且对所提议的动作是无条件的。
上述所有数值阈值都逐字取自屏蔽的默认构造函数:一个 \(10\) m 的最小间隙、一个 \(2.4\) s 的车头时距、一个 \(1.2\) m 的边缘余量,以及一个 \(8\) m 的紧急间隙。限速不变量使用逐 tick 状态中提供的张贴限速,缺失时回退到构造函数值。
关键结构性质
控制器不出现在任何不变量之中。屏蔽读取被观测的状态与被提议的动作,其判决仅是状态与不变量的函数。因此,安全行为是运行时的属性,而非控制器的属性:替换一个不同的控制器改变的是哪些提议到来,而非哪些提议可被准入。这正是我们在第 3 节所利用的性质,以在胜任度与意图迥异的控制器之下运行同一个屏蔽。
替换一个不同的控制器改变的是哪些提议到来——而绝非哪些提议可被准入。
3 · 控制器
本研究中的每个控制器都通过同一个接口发出提议,并受同一个屏蔽约束。它们只在如何产生一个提议上有所不同。
3.1 · PID 基线
基线是 CARLA 的确定性 VehiclePIDController,以约 40 km/h 驾驶该路线。它代表一个胜任的传统控制器,并确立屏蔽不会阻止正常驾驶:在名义条件下,其提议是可准入的并被放行。
3.2 · 敌对控制器
该对手(carla_floor/adversary.py)是一个约 30 行的手写追击控制器,拥有完整的真值感知且毫无安全顾虑。它每个 tick 选择车辆前方最近的行人(跳过后方的目标以避免绕圈),转向以向该行人收敛,并命令全油门。它被刻意做成一个比慢速模型更难对付的对手:它瞄准精准、每个 tick 都反应、且总在进攻。它恰好破坏屏蔽所治理的通道——所提议的转向与油门——而非诸如伪造感知之类。它不是一个学习到的模型;它是提议通道的一个显式的最坏情况。
3.3 · 方向盘处的前沿与本地模型
三个模型通过一个共同的适配器(carla_floor/brains/)被置于方向盘处,经由 brain_runner.py 原生运行:Gemini 2.5-flash(云端,视觉)、DeepSeek-chat(云端,基于数值状态的文本),以及 Qwen3-VL-4B(本地,视觉)。每个模型接收前向摄像头图像和/或数值状态的自然语言呈现,并被提示发出一个紧凑的 JSON 控制对象 \(\{\text{steer}, \text{throttle}, \text{brake}\}\),它被映射为一个带符号油门提议。
这些模型无法以 20 Hz 决策。每个都在一个后台线程上运行,并在两次瞥视之间持有其上一条命令;主控制回路消费当前那条命令。这是在架构上重要的细节:在两次瞥视之间,车辆以一条陈旧命令行驶,因此即便屏蔽的感知是连续的,模型的有效感知仍是间歇的。我们在第 6 节量化由此产生的盲区窗口。每个模型都使用同一种持有命令的架构,因此这些模型在能力与时延上不同,而非在如何与屏蔽对接上不同。
4 · 方法:决策日志与反事实判决
为比较同一个控制器在有屏蔽与无屏蔽下的行为,该测试台记录一条逐 tick 的决策日志(live/decision_log.jsonl)。每一行包含:被观测的状态;控制器所提议的动作;屏蔽对该提议的判决;实际施加到车辆上的动作;以及该 tick 上是否发生了碰撞。
关键的设计选择是:屏蔽的判决在每个 tick 上都被计算,包括在屏蔽被关闭时。当屏蔽关闭时,被施加的动作是原始提议,但日志仍记录那个反事实——屏蔽本会拒绝什么、又本会转而执行什么。这让我们能够精确地归因碰撞:一次屏蔽关闭下的碰撞可被追溯到某个特定提议,而屏蔽本会将其夹紧(例如一个跟车距离不变量本会将其转换为全刹车的提议)。分析脚本(analyze_log.py)把一次行程切分为屏蔽开启与屏蔽关闭的分段,并对每一段统计:(i) 屏蔽的不变量禁止了多少提议(危险提议),(ii) 有多少被覆写(屏蔽开启)或到达了车辆(屏蔽关闭),以及 (iii) 发生了多少次碰撞。当屏蔽本会拒绝一个提议时,即至少有一条不变量触发时,该提议被计为“危险”。
这种方法有两个值得陈述的性质。其一,屏蔽开启与屏蔽关闭的比较是在意图上同一的提议流(同一个控制器)之上进行的,而非两次独立采样的行程。其二,“危险”是由不变量自身定义的,因此覆写率是对控制器的提议多频繁地离开安全集的一次自洽测量——而非一次人工标注的危险计数。
5 · 结果
下面的所有数字都来自一次测量会话(于 2026-09-25 捕获),并可经由 analyze_log.py 从所记录的决策日志复现。主要结果是屏蔽下的敌对控制器;切换与接管变体则孤立出屏蔽的因果作用。
5.1 · 敌对控制器,屏蔽开启对关闭
在一次以 40 km/h 为目标的连续 40,052 m(≈40 km)行程中,敌对控制器发出了 64,952 条违反不变量的命令。屏蔽开启时,全部 64,952 条(100%)被覆写,车辆记录到 0 次碰撞。同一结果在更小尺度上复现(在 466 m 内覆写 2,188 条 / 0 次碰撞)。移除屏蔽让同样的提议到达执行器;车辆随即碰撞。一条有代表性的屏蔽关闭决策日志行显示,一个被提议的 \(\text{throttle}=+1.00,\ \text{steer}=-1.00\) 本会被跟车距离不变量强制为 \(-1.00\)(全刹车),却被原样施加,并在约 3 s 内伴随一次碰撞。在同一控制器上的一次受控切换中,屏蔽关闭配置准入了 43 条危险命令并产生 2 次碰撞(在数秒内),而屏蔽开启配置产生 0 次。表 1 汇总了测试台的输出。
| 配置 | 距离 | 危险提议 | 被覆写 / 到达车辆 | 碰撞 |
|---|---|---|---|---|
| 屏蔽开启(连续行程) | 40,052 m | 64,952 | 64,952(100%)被覆写 | 0 |
| 屏蔽开启(小尺度复现) | 466 m | 2,188 | 2,188(100%)被覆写 | 0 |
| 屏蔽关闭(切换窗口) | 短 | 43 | 43 条到达车辆 | 2 |
| 屏蔽开启(切换窗口) | 短 | — | (被覆写) | 0 |
诠释
敌对控制器以精准的瞄准、每个 tick 攻击屏蔽所治理的那个确切通道。在屏蔽下,尽管有 64,952 条敌对命令,碰撞计数仍为 0;移除屏蔽后,同一控制器撞车。两种配置之间的差别就是屏蔽,别无其他,这正是该结果将安全归因于运行时而非控制器的含义所在。我们指出,覆写率是在不变量所禁止的提议中的 100%,这是由“危险”标签的构造所致(第 4 节);它是关于屏蔽在这次行程中对其自身不变量的覆盖的一个主张,而非关于不变量集是完备的主张(见第 7 节)。
5.2 · 接管变体
当屏蔽拒绝一个敌对提议时,它可以用确定性的安全策略取代被拒绝的动作,从而使车辆继续自行驾驶,而敌对控制器实际上被锁在执行器之外。在此配置下,车辆记录到 0 次碰撞。此变体表明,准入层不必仅仅逐 tick 地朝安全夹紧;当提议者不受信任时,它可以回退到一个已知安全的控制器。
5.3 · 方向盘处的模型
DeepSeek-chat 与 Gemini 2.5-flash 各自在屏蔽下跑完了路线,零碰撞。定性上,它们的驾驶比 PID 基线更慢、更颠簸。原因是接下来考察的推理时延:这些模型在单位时间内完成更少的有用驾驶工作,但它们被允许执行的动作集并未改变。这正是所意图的分离——模型能力决定完成多少有用工作;运行时决定什么可以被执行。
6 · 针对前沿模型的时延发现
方向盘处的模型表现出一个测得的、每次推理约 0.8–2.0 s 的瞥视时延。由于每个模型在两次瞥视之间持有其上一条命令,车辆在该间隔的持续期间以一条陈旧控制行驶。在 40 km/h 的目标(≈11.1 m/s)下,一次 0.9 s 的瞥视对应于以陈旧命令行驶约 10 m;一个在该窗口内进入道路的危险,在那次瞥视上从未被模型看到。相比之下,一个 20 Hz 的屏蔽每 50 ms 重新验证一次真值,并在一个 tick 之内反应。因此,屏蔽正是抓住在模型盲区窗口期间出现的危险之物。
我们强调此发现的方向。并非这些模型是糟糕的驾驶者;在屏蔽下它们不碰撞。而是它们的时延使其感知变得间歇,而间歇的感知恰恰是一个连续的、基于真值的准入层所定位去覆盖的失效模式。该结果在三个模型上一致,且是把一个约 1 s 时延的模型置入一个 20 Hz 控制回路所固有的,而非任何单一模型的属性。
7 · 局限
我们直白地陈述这些结果的边界。
- 单一仿真领域。所有结果都来自 CARLA 0.9.15、Town10HD,在一台 Apple M4 上经由一个偶尔产生渲染器停顿的转译层运行。这是对该架构的演示与一套测量测试台,而非一个车辆控制器,也不是关于物理车辆的证据。
- 有条件的保证。屏蔽在被观测的状态上强制执行其不变量。其安全性质以下述为条件:(i) 被感知的状态是准确的,(ii) 每个状态都存在一个安全的回退动作(例如全刹车足够),以及 (iii) 不变量集对该场景是充分的。感知误差、一个不可避免碰撞的状态,或一个不变量未建模的危险,都在其范围之外。100% 的覆写数字是对屏蔽所定义之不变量的覆盖,而非关于不变量集的完备性主张。
- 与位置相关的屏蔽关闭撞车。屏蔽关闭下的碰撞要求存在一个可供撞击的障碍物;因此撞车结果是场景相关的,而切换窗口的计数(准入 43、碰撞 2)来自一个特定的短窗口,而非跨场景的一个分布。
- 时延是固有的,未被消除。屏蔽覆盖模型的盲区窗口;它并不使模型更快。一个提议不出任何有用之物的模型,在屏蔽下将只是无法取得进展——屏蔽保证的是安全,而非任务完成。
- 单次会话,无统计处理。头条数字来自一次测量会话。我们报告计数,而非置信区间,并且不就跨种子、地图或交通密度的方差作任何主张。一次系统性的扫描是未来工作。
- 对手范围。敌对控制器只破坏提议通道。它不攻击感知、时序或屏蔽的输入;一个被破坏的状态估计是一个不同的、未被处理的威胁模型。
8 · 相关工作
在一个不受信任的控制器与被控对象之间插入一个经验证组件的想法,在运行时保障与安全控制的文献中已有确立;我们的贡献是那个与控制器无关的准入框架,以及在一个光真实仿真器中的、具体的实证多控制器(敌对的与前沿模型的)测试台,而非运行时强制这一概念本身。
运行时保障与 Simplex 架构
Simplex 架构把一个高性能但不受信任的控制器与一个经验证的安全控制器及一个决策模块配对,当状态逼近某个经验证区域的边界时切换到安全控制器 [2][3]。我们的屏蔽属于这一脉;其接管变体(第 5 节)恰恰是一个 Simplex 风格的回退。我们所强调的框架是:不受信任的控制器被当作一个提议者、被降格到一个准入层之下,而该层的判决是状态与不变量的函数、控制器不在其中。
面向学习控制器的屏蔽
强化学习中的“屏蔽”合成一个反应式组件,每当一个智能体的动作会违反一个时序逻辑安全规格时,就在其行动之前或之后纠正它 [4]。我们的屏蔽是同一种“执行器之前”纠正模式的一个手工指定、非学习的实例,被施用于来路各异的驾驶控制器、而非单一的 RL 智能体,并被一条反事实日志所仪表化。
控制屏障函数
控制屏障函数提供了一种控制论方法,用以令一个安全集前向不变,其典型做法是求解一个二次规划,对一个名义控制做最小的修改以使系统保持在安全集内 [5][6]。我们的不变量是工程化的阈值,而非经认证的屏障函数,并且我们在本文中不作任何形式的前向不变性主张;这一联系是概念性的(两者都朝安全对一个名义动作做最小修改),我们将其作为控制论上的近邻来引用,而非作为我们所采用的方法。
仿真平台
我们使用 CARLA 开源驾驶仿真器 [1] 来获得光真实的传感与物理;CARLA 是平台,而非本工作的一项贡献。
9 · 结论
我们报告了一项实证研究,其中安全由一个确定性的运行时准入层来强制执行,而非被假定于控制器。同一个无状态屏蔽,以 20 Hz、在四个组合不变量上被评估,被置于一个良性 PID 控制器、一个专为撞车而构建的敌对控制器,以及一批方向盘处的前沿与本地模型之下。一条反事实决策日志让我们能够比较同一控制器在有屏蔽与无屏蔽下的执行。针对敌对控制器,屏蔽在 ≈40 km 内覆写了 64,952/64,952(100%)条违反不变量的命令,零碰撞,而移除屏蔽让同样的提议撞毁车辆;前沿模型在屏蔽下跑完路线,零碰撞,但平顺性退化,可追溯到一个约 0.8–2.0 s 的瞥视时延,而这被 20 Hz 的屏蔽所覆盖。这所展示的分离——模型能力决定完成多少有用工作,运行时决定什么可以被执行——正是该架构的要点。我们强调,这是一个仿真中的、带有条件保证的研究原型,其价值在于作为一个存在性证明与一套测量测试台,而非作为一个车辆控制器。
安全在运行时被强制执行,而非被假定于模型——并针对一个专为击败它而构建的对手被测得。
参考文献
- A. Dosovitskiy, G. Ros, F. Codevilla, A. López, and V. Koltun. "CARLA: An Open Urban Driving Simulator." Proceedings of the 1st Annual Conference on Robot Learning (CoRL), 2017. arXiv:1711.03938.
- L. Sha. "Using Simplicity to Control Complexity." IEEE Software, 18(4):20–28, 2001.
- D. Seto, B. Krogh, L. Sha, and A. Chutinan. "The Simplex Architecture for Safe Online Control System Upgrades." Proceedings of the American Control Conference (ACC), 1998.
- M. Alshiekh, R. Bloem, R. Ehlers, B. Könighofer, S. Niekum, and U. Topcu. "Safe Reinforcement Learning via Shielding." Proceedings of the 32nd AAAI Conference on Artificial Intelligence, 2018. arXiv:1708.08611.
- A. D. Ames, X. Xu, J. W. Grizzle, and P. Tabuada. "Control Barrier Function Based Quadratic Programs for Safety Critical Systems." IEEE Transactions on Automatic Control, 62(8):3861–3876, 2017.
- A. D. Ames, S. Coogan, M. Egerstedt, G. Notomista, K. Sreenath, and P. Tabuada. "Control Barrier Functions: Theory and Applications." Proceedings of the 18th European Control Conference (ECC), 2019. arXiv:1903.11199.
如何引用
@techreport{perslis2026carla,
title = {Runtime Admission Control on a Photoreal Driving Simulator:
Hostile and Frontier-Model Controllers Under One
Verification Floor},
author = {{Perslis Research}},
institution = {Perslis Research},
year = {2026},
month = {9},
note = {Empirical study, research prototype (simulation).},
url = {https://research.perslis.com/carla-admission.html}
}