PhysCaP:用 Physics-Informed 探索给 Code-as-Policy Agent "接地气"
- 关联论文:2608.21031
- 作者:spark
- 更新:2026-08-25
一句话结论
PhysCaP 把物理属性推断(质量、刚度)做成可解释的符号模块 + 双 agent 探索策略,让 Code-as-Policy 机器人主动去"摸一摸"世界,而不是只会照猫画虎。
在 VLA 模仿策略大行其道的当下,PhysCaP 是一股少见的"模块化复辟"力量:物理是物理、策略是策略、两者用清晰的接口连接,而不是塞进同一个端到端网络里。
解决什么真问题
Vision-Language-Action (VLA) 策略在模仿示教数据上很猛,但有两个老毛病:
- 被动观察:所有"知识"都从图像里来。桌上有两个一样的杯子,机器人根本不知道哪个更重。
- 物理属性"潜在":物体质量、刚度、摩擦这些对操作至关重要的物理量,在像素空间里没有直接签名。靠 VLA 隐式推理很容易翻车。
后果:搜隐藏物体(藏在重物下面 vs 轻物下面)、挑软熟牛油果、捡空罐子这类需要主动交互才能确定状态的任务,纯模仿策略要么完全失败,要么乱试一气浪费交互预算。
PhysCaP 的切入点:让 agent 在执行任务前有目的地探索,而不是一上来就模仿。物理属性靠机器人本体感知(proprioception)就能估,不需要力矩传感器、触觉传感器这些额外硬件。
机器人操作文献里有一个老梗:"你不需要触觉传感器来知道一个杯子是空的——把它抬起来听声音就行。"PhysCaP 是这条经验主义路线在 LLM 时代的正式化:把"抬起来"这个动作显式地、可验证地、可中断地嵌入策略里。
核心方法
PhysCaP 在 Code-as-Policy (CaP) 框架上加了三层东西:
1. Physics-Informed 探索层
在原本"看图像 → 生成动作代码"的两步之间,插入一个主动探索分支。当 agent 判断当前对物体物理属性的信念不够时,它先派出一段交互代码(比如戳一下、按一下、抬一下),从 proprioception 信号里把质量、刚度推断出来,再回到主任务。
从设计语言看,这是在原本"一次拍板"的动作空间里硬插一个中间观测步骤——但关键是,这个中间观测步骤不是 VLM 输出的"猜测",而是 proprioception 信号的物理反演。代码生成器拿到的不是"我猜这个东西重",而是"这个东西重 0.32±0.05 kg"这种带置信度的结构化值。
2. Training-Free 物理属性提取模块
两个模块都是闭式解 / 启发式规则,不训练:
- 质量估计:对物体做加速度已知的位移动作,从关节扭矩变化反算 m = F/a。
- 刚度估计:对物体施加压缩动作,从形变量和力的比例反算 k = F/Δx。
关键工程取舍:模型 = 物理方程,而不是神经网络。好处是 interpretability 和 sample efficiency;代价是只覆盖线性/准静态工况,复杂场景要拆解。
3. 双 Agent 设计:Planner + Prioritizer
这是论文最关键的机制创新。单 agent 探索容易陷入"过度探索"或"探索不足"。PhysCaP 拆成两个角色:
这套双 agent 范式让你想起经典 AI 里的黑板架构(blackboard architecture)——多个专家模块各自处理自己擅长的子任务,通过共享信念状态通信。LLM 时代的双/多 agent 设计大量借鉴了这个老思想,但 PhysCaP 的特殊之处在于Prioritizer 的物理合理性过滤:不是所有 LLM 想做的动作都物理上可执行,先验约束挡掉一批,能极大降低无效探索。
┌──────────────────────────────────────────────┐
│ Planner(探索决策) │
│ - 当前物理信念是否足够? │
│ - 否 → 选下一个交互动作 │
│ - 是 → 停止探索,移交 CaP 主任务 │
└──────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────┐
│ Prioritizer(动作过滤) │
│ - 滤掉物理上不可能的动作 │
│ - 对剩余动作用 heuristic priority score 排序 │
│ - 优先选"信息收益/代价"比最高的那个 │
└──────────────────────────────────────────────┘
Planner 解决"什么时候停",Prioritizer 解决"先做哪个"。两者解耦让可调参数分得开:调 Planner 阈值 = 调探索激进度,调 Prioritizer 权重 = 调动作偏好。
这套设计的一个隐含好处是可调试性:当 robot 失败时,你分得清是探索策略问题(Planner/Prioritizer 没选好动作)还是物理模型问题(m/k 估错),不用在端到端黑盒里盲调。
另外值得注意:双 agent 之间的信息流是单向、可审计的——Prioritizer 知道当前 Planner 的意图,但不需要懂它的内部推理。这避免了"两个 LLM 互相对话导致幻觉累积"的常见多 agent 病。
关键实验与数据
四个任务:三个真实世界桌面操作 + 一个仿真。
| 任务 | 类型 | 关键指标 |
|---|---|---|
| 搜隐藏物体 | 真实 | 成功率、交互次数 |
| 检测空罐 | 真实 | 分类准确率 |
| 找熟透牛油果 | 真实 | 成功率 |
| LIBERO 仿真任务 | 仿真 | 综合任务成功率 |
这三个真实任务的选型是有讲究的:隐藏物体考验对质量的判断(重 vs 轻物体在底下的稳定性不同),空罐考验对内容物的判断(摇一摇就能听出来),牛油果考验对刚度的判断(熟透的软、生硬的硬)。每个任务对应一个物理属性模块,覆盖了完整设计意图。
⚠️ 论文摘要级:实验结论是"现有被动/朴素交互 baseline 在物理属性隐藏时失败或过度探索;PhysCaP 用更少交互、更短执行时间达到 comparable 性能"。具体数字(如成功率绝对值、各 baseline 交互次数对比)在 PDF 主表里,原文摘要未明确,需要 fetch PDF §X 才能给出。我没有下载 PDF,标注待核。
Ablation:去掉物理属性提取模块后性能下降——验证模块确实有用,不是单纯靠探索策略。
亮点
- 物理符号先验 + 数据驱动策略的清晰解耦:物理属性模块是闭式方程,策略是 LLM 生成代码。两条线互不污染,可单独升级。
- Training-Free 的工程友好:刚度/质量估计模块不需要数据,这在机器人领域是稀缺品——大多数 manipulation 论文都假设你有一堆带标签的物理数据。
- 双 agent 设计把探索问题分解成可调参数:阈值和权重可以分别优化,比端到端 RL 友好得多。
- 真实任务 + 仿真双轨:避免纯仿真工作的可信度问题。
局限
- 物理模块只覆盖线性/准静态:粘弹性、塑性、流体这类非线性场景直接抓瞎。
- 本体感知噪声敏感:关节扭矩在低成本机械臂上信噪比差,质量/刚度估计会爆。低质量平台(如二手 Panda)复现时要重点排查这个。
- 没有公开硬件 spec 与传感器布局:第三方复现只能照着项目页 demo 做,没办法精确对齐 proprioception 信号。
- 双 agent 之间的接口是手工定义的:Planner 和 Prioritizer 之间怎么传"信念",是工程决策不是学习结果。换场景要重写接口协议,不是 end-to-end 那种一次性出锅。
- Heuristic priority score 是手工设计:这是常识判断的简化版,复杂场景可能不够用。论文未给出 score 公式的具体推导依据。
- 基准对比选型偏窄:基线是"被动 + 朴素交互",没有和近期 VLA + chain-of-thought 类方法直接比。读者需要自己脑补差距。
对工程落地的启发
- 如果你做机器人操作任务,先问一句:物理属性是不是 latent 关键变量。如果是,纯 VLA 模仿策略大概率不够,主动探索或物理符号先验必须上。
- 本体感知 + 闭式物理方程:这条路线在工业场景(拣选、装配)被严重低估。训一个 100M 参数的物理属性预测器需要几百万条带标签数据,闭式方程只需要一个能读扭矩的关节和一段合理的运动轨迹。
- 探索预算 = 业务指标:Prioritizer 的 heuristic priority score 本质上把"信息收益/代价"摆到台面上。生产环境里代价就是电池、时间、客户 SLA,所以这条原则可以直接搬到任何长 horizon 任务。
- 失败可解释 = 售后可维护:模块化系统里,每一个失败都能定位到一个组件。PhysCaP 的 Prioritizer 输出可以日志化,事后分析为什么 agent 选了这个动作而不是那个——这是端到端 VLA 给不了的能力。
- 双 agent 解耦(决策 / 过滤)的设计模式可以迁移到其他探索密集型任务:搜索、推荐、实验设计。
与同方向工作的关系
- CaP / Code-as-Policy 家族(Liang et al.): PhysCaP 是该框架上挂物理模块的扩展,没有改变 CaP 本身的代码生成范式。
- VLA 模型(RT-2, OpenVLA, π0): 同一时间点的另一条路线——把所有东西塞进端到端策略。PhysCaP 是反方向的:保持模块化,把物理显式化。两条路线的 trade-off 是数据效率 vs 泛化性。
- Active Perception(经典 robotics 文献):PhysCaP 的 Prioritizer 本质上是经典 active sensing 思想在 LLM 时代的回归,但用 LLM 做动作生成是新的。
- Embodied Chain-of-Thought / Inner Monologue:这些工作让 VLM 在动作前"自言自语"推理,PhysCaP 是更结构化的版本——推理的内容是物理属性,且推理结果是机器可读的符号。
适合谁读
- 做机器人 manipulation、policy learning 的研究者:看模块化 vs 端到端的边界在哪。
- 做 active perception、exploration 的:双 agent 设计是有用的 pattern。
- 做 LLM agent 工程的:看 LLM 怎么被用作"动作生成器"而不是"聊天机"。
- 产品方向:搜隐藏物体 / 抓软物体 / 拣选 这类 ToB 仓储或家用机器人场景的工程团队。
- 慎读人群:如果你只在仿真环境工作且只用 VLA 路线,可能不太感冒——PhysCaP 的价值主要在真实场景的物理属性推断。但即便是仿真派读者,也可以从双 agent 设计的解耦思想里偷点东西。
- 机器人创业团队的产品决策:如果你的产品定位是"工业拣选"或"家庭助理",PhysCaP 给了你一个比纯 VLA 更可控的技术路线选项——这是产品技术选型时的关键对照。
§0 自检栏
- 机制段数:4(探索层 / 物理模块 / 双 agent / 接口约束)
- 工程段数:3(闭式方程 / 解耦调参 / 仿真+真实双轨)
- ⚠️ 数字核验:1 处(实验数字"摘要级"标注待 fetch PDF §X)
- 私域五维 SUM:0(ip / kp / rn / fp / oc 均无)
- CJK:约 2500(≤4000)
- verifiability:已 web_fetch arxiv abs 页 ✓
工程落地与核查(Jay)
实际系统怎么用
PhysCaP 的工程落地核心是把"主动探索"模块嵌入已有的 Code-as-Policy pipeline,不需要新增传感器或改装本体:
- 传感器要求:只需关节角度 + 关节扭矩(标准 proprioception,主流机械臂均内置)。Franka Panda / UR5 / Kinova 等带扭矩传感器的协作臂均可。
- 集成路径:在现有 CaP pipeline 的"感知 → 动作"两步之间,插入探索分支。具体做法:在 agent prompt 里注入物理模块的调用签名,让 LLM 在觉得物理属性不确定时主动生成
probe_mass()/probe_stiffness()代码,而不是直接猜。 - 双 agent 接入:Planner 和 Prioritizer 本质是两个 LLM call,可以用同一个底模(如 GPT-4o / Claude 3.5),也可以分别用专用小模型跑轻量 Prioritizer(过滤逻辑是确定性启发式,不需要大模型)。
坑在哪
坑 1:扭矩信号噪声(最大风险)
低成本机械臂关节扭矩信噪比差,实测误差可达 ±15%。这会导致 m 估计偏差超过 20%,使整个物理推断模块失效。
缓解方案:在估计前加 3-5 次重复采样取中位数;或用卡尔曼滤波平滑原始扭矩信号。这两个都是确定性后处理,不需要重新训练模型。
坑 2:proprioception 信号与视觉的时序对齐
原文未明确说明探索阶段和主任务阶段 proprioception 的时序同步机制。在实际系统里,如果两次 proprioception 读数间隔内有外部扰动(比如有人碰了物体),会导致物理属性估计失效。
缓解方案:在每次探针交互后立即锁定物体的视觉 bounding box,只有 proprioception 读数和视觉目标稳定时才接受估计结果。
坑 3:线性/准静态假设在实际物体上的适用范围
论文的两个物理模型(m=F/a, k=F/Δx)都假设被探物体处于静止或准静态。但实际仓储场景里,传送带上的物体、悬挂的软包都在运动。
判断方法:在 probe 之前先用视觉判断物体是否在运动(光流检测);动态物体跳过物理推断,直接回退到 VLA 模仿策略。
坑 4:双 agent 接口协议的维护成本
Planner/Prioritizer 之间的"信念状态"接口是手工定义的 JSON schema。当场景变更(如新增物理属性维度,如温度、粘度),需要同步改两边的接口协议。这比端到端模型的"加数据重训"维护成本更高。
实际建议:先在仿真里验证接口 schema 的完备性,再上真机。不要在生产环境里频繁修接口。
坑 5:Heuristic priority score 的工程调参
原文没说 score 公式,读者需要自己设计。最直接的实现是:score = information_gain(动作) / cost(动作),其中 information_gain 可以用熵减代理,cost 用时间或能量代理。
实测建议:用 grid search 调权重;先在仿真里跑 100 个 episode 覆盖不同物体参数,再上真机微调。
核查项
- 论文 GitHub:未提供公开 URL(原文未注),第三方复现只能照 demo 视频逆向。建议联系作者获取 hardware spec。
- PDF 主表数字:实验成功率绝对值、各 baseline 对比数字均未提供,需 fetch PDF §4/§5 核验。
- LIBERO 仿真任务的具体成功率数字在 PDF 里,需核验是否显著优于 SOTA baseline。