跨频调度
“大脑以秒为单位思考,脊髓以毫秒为单位反应——中间的 1000:1 频率鸿沟不是设计失误,而是物理约束。”
EICPS 三层架构中存在不可压缩的频率鸿沟:Brain 层(VLA/LLM)工作在 ~1Hz,Spine 层(实时控制)工作在 ~1kHz,两者相差三个数量级。跨频调度的任务是:让这两个异步运行的计算域安全、稳定地协同工作,既不让大模型的低频思考拖慢实时控制,也不让实时控制的高频噪声淹没语义规划。
📐 理论定位
Goebel, Sanfelice & Teel(2012)的混合动力系统理论为 Flow(连续演化)与 Jump(离散切换)提供了统一的数学框架,覆盖了稳定性分析、Zeno 行为检测、最小驻留时间定理等工程工具。Brooks(1986)的包容架构(Subsumption Architecture)最早指出机器人控制应按响应速度分层。神经生物学给出了”这条路行得通”的存在性证明——哺乳动物皮层(慢思考)与脊髓(快反射)的分工已经过亿年进化验证(△ Goebel et al. 2012 混合动力系统框架)。
频率鸿沟的三层分析
频率鸿沟的根本原因是计算需求与物理约束的不兼容:
| 层级 | 频率 | 为什么不能改变 |
|---|---|---|
| Brain(VLA/LLM) | ~1 Hz | 大模型推理一次需要 100ms–1s,无法实时化 |
| Spine(CBF/EKF) | ~1 kHz | 安全监控必须快于机械动力学响应(~10ms),不能降频 |
| Body(电机 FOC) | ~10 kHz | 硬件 PWM 时序,软件层无法干预 |
这三个频率段之间各相差约 10 倍——Brain 无法以 1kHz 运行(算力不够),Spine 不能降到 1Hz(安全无法保证)。频率鸿沟是物理约束,不是设计选择。
混合动力系统形式化
EICPS 以混合系统 统一描述两种动力学模式:
- :流集合,系统在此做连续控制(Spine 层 1kHz 执行)
- :跳集合,新 Brain 指令到达或安全事件触发离散切换
- :流映射,Spine 层的连续控制律(CBF + EKF + 动力学控制器)
- :跳映射,Brain→Spine 的状态重置函数(相位对齐、参考轨迹更新)
工程语义:Flow 对应”正常运行中 Spine 以 1kHz 执行当前模态”;Jump 对应”新 Brain 指令到达,Spine 切换到新的参考轨迹和约束集”。
跨频调度的三个核心机制
零阶保持(ZOH)
Brain 每隔约 1 秒发出一条新指令,但 Spine 在这 1000ms 内需要持续执行控制。零阶保持的策略:Spine 保存最后一次收到的 Brain 指令,在 Jump 到来之前持续以此为参考执行 Flow。
ZOH 保证了 Brain 无响应时(网络延迟、计算超时)Spine 不停机——这是安全关键系统的必要属性。Spine 不等待,不询问,依靠最后一条指令继续保持安全执行。
平滑切换(Bumpless Transfer)
当新 Brain 指令到达触发 Jump 时,直接切换控制目标会产生控制量突变(Bump)——电机电流瞬间冲击,可能超过安全阈值或引起机械振动。
Bumpless Transfer 在跳映射 中嵌入插值过渡:
过渡时间 通常取 3–5 个控制周期(3–5ms),足以消除电流冲击,同时对语义任务层面几乎无感。
Prj167 中的典型 Jump 场景:Brain 发出”切换到防振锤抓取模态”指令,Spine 需要从”接近导线”模态平滑过渡,末端速度从 0.5m/s 线性减速到 0.1m/s,同时切换 CBF 安全函数的参数集。
状态压缩上报
Spine 产生的 1kHz 传感器数据不能原样上报 Brain——信息量过大(1kHz × 60 维状态 = 6 万个数/秒),且 Brain 根本无法以此频率消费。
压缩策略:Spine 按需触发(事件驱动)将结构化状态摘要上报 Brain:
上报内容:
- 当前位姿摘要(SE(3) 压缩表示)
- STL 鲁棒度 ρ(安全裕量)
- 模态状态(当前 Flow 模态编号)
- 异常标志(EMI 检出、接触力超限等)
触发条件(任一满足):
- ρ 跌破预警阈值(ρ ≤ ρ_warn)
- 模态发生切换(Jump 完成)
- 距上次上报超过 500ms(心跳)
Brain 根据摘要决策是否重新规划,而不是被 1kHz 数据流淹没。
Zeno 行为与最小驻留时间
Zeno 行为:混合系统理论中的病态情形——系统在有限时间内无限次触发 Jump,导致时间”凝固”(时间步长趋于零),系统卡死。
在 EICPS 中,Zeno 的典型触发源是 CBF 安全边界的来回振荡:系统状态在 边界附近反复横跳,每次越界都触发一次 Jump,Jump 密度无限增大。
最小驻留时间定理(Minimum Dwell Time):保证每次 Jump 后系统在新模态至少停留时间 再允许下一次 Jump:
在 Prj167 中,(10 个控制周期)——物理上对应机械臂从响应指令到稳定运动的最短建立时间。这保证每次模态切换后系统有足够时间稳定,不会陷入无意义的快速振荡。
Zeno 检测算法:
class ZenoDetector:
def __init__(self, tau_min: float = 0.01, window: int = 10):
self.tau_min = tau_min # 最小驻留时间(秒)
self.jump_times = [] # 记录最近若干次 Jump 时间戳
self.window = window
def record_jump(self, t: float) -> dict:
self.jump_times.append(t)
if len(self.jump_times) > self.window:
self.jump_times.pop(0)
if len(self.jump_times) < 2:
return {"zeno": False}
# 最近若干次 Jump 的最小间隔
intervals = [self.jump_times[i+1] - self.jump_times[i]
for i in range(len(self.jump_times)-1)]
min_interval = min(intervals)
return {
"zeno": min_interval < self.tau_min,
"min_interval": min_interval,
"action": "HOLD_FLOW" if min_interval < self.tau_min else "OK"
}
Prj167 完整调度流程
以防振锤更换任务为例,跨频调度的完整时序:
t = 0s Brain 发出 "开始接近防振锤" 指令
→ Jump:Spine 切换到 [APPROACH] 模态,Bumpless Transfer 3ms
→ Flow:Spine 以 1kHz 执行接近轨迹,EKF 持续更新位姿
t = 8s Brain 发出 "切换到抓取模态" 指令
→ Jump:[APPROACH] → [GRASP],速度从 0.3m/s 过渡到 0.05m/s
→ Flow:CBF 切换为接触力约束,STL 规约更新为抓取规约
t = 9.2s Spine 检出 ρ ≤ ρ_warn(导线距离接近预警)
→ 事件触发上报 Brain
→ Brain 重新评估,下发微调指令
t = 15s 防振锤到达安装位置
→ Spine 检出 STL-TASK 规约满足(任务完成条件)
→ Jump → [RETURN] 模态
整个 15 秒任务中,Brain 介入约 3–5 次(1Hz 内),Spine 执行了约 15,000 个控制周期,ZOH 填补了其中 99% 的”Brain 沉默”时间。
🔢 完整实现:Flow-Jump 联合求解(
scipy.integrate.solve_ivp+ 跳集事件检测)、Bumpless Transfer 插值器、ZenoDetector 完整 Python 实现见 数学讲义·Flow-Jump 动力学。
→ 任务切换机制(HTN 如何生成 Jump 指令序列)
→ 实时安全监控(CBF)(Spine 层 Flow 阶段的 1kHz 安全约束)
参考文献
| # | 文献 | 关联概念 |
|---|---|---|
| [1] | Goebel, R., Sanfelice, R. G., & Teel, A. R. (2012). Hybrid Dynamical Systems: Modeling, Stability, and Robustness. Princeton University Press. | 混合动力系统框架,Flow/Jump,Zeno,最小驻留时间 |
| [2] | Brooks, R. A. (1986). A robust layered control system for a mobile robot. IEEE Journal on Robotics and Automation, 2(1), 14–23. | 包容架构,分层响应速度 |
| [3] | Liberzon, D. (2003). Switching in Systems and Control. Birkhäuser. | 切换系统稳定性,最小驻留时间定理 |