GOAL-TRIAL-DATA-MANAGEMENT.md 是并列的两份 GOAL,可以分开做。到 2026-09-03 为止,深度这摊的真实状态是:
操作者的要求:先查官方方法和论文,看业界一般怎么整合、怎么锁定杯子,再定方案。
这份文件就是那次调研 + 由它得出的计划。
Point Cloud Matters: Rethinking the Impact of Different Observation Spaces on Robot Learning
系统比较了 RGB / RGB-D / 点云三种观测空间,结论是:
Towards Fusing Point Cloud and Visual Representations for Imitation Learning 进一步指出:
点云给几何,RGB 给纹理和语义,两者互补,融合优于单一。
对我们的含义:「把深度伪彩成第四路相机」是三种里最弱的一种,
而我之前正是这么设想「路线 B」的。这条要改。
Depth Helps: Improving Pre-trained RGB-based Policy with Depth Information Injection
这篇解决的正是我们的问题:已经有一个 RGB 预训练的策略,怎么加深度而不重训主干。
| 它怎么做 | 对我们的意义 |
|---|---|
| RGB 主干冻结(ViT + projection 不动) | SmolVLA 的 SigLIP 可以不动,避免"分布外输入毁掉预训练特征"那个顾虑 |
| 加两个小模块:Depth Completion Module(cross-attention 从 RGB 预测深度特征)+ Depth-Aware Codebook(把深度离散化,抗噪) | 只训这两个小模块,不训主干 |
| 每个任务只要约 20 条真机轨迹 | 我们有 30 集 —— 数量够 |
| 推理时可以只用 RGB(RGB-only 63.15% vs RGB-D 63.95%,只掉 0.8%) | 部署更省事:深度只在训练时需要 |
| 提升:57.95% → 63.95%,长时程任务提升最大(约 12%) |
注意事项(论文自己说的):要成对的 RGB-D 训练数据(我们有);
三阶段训练(warmup / alignment / codebook);codebook 在某些任务类型上会掉点;
真机实验用了双相机,第三人称视角会让深度感知变难——而我们的深度相机正是装在头上的第三人称。
结论:没有人用「找最近的一团」这种手写规则。标准做法是开放词表检测 + 分割。
Grounded SAM 是当前的通用管线:
Grounding DINO 按文本查询定位物体 → SAM 生成分割掩码。
以及关键的一步(正是我们缺的那一环):
也就是:**RGB 负责"哪个像素是杯子"(开放词表,换杯子不用改代码),
深度负责"那些像素有多远",合起来得到杯子的点云 → 再算抓取位姿。**
其它相关工作:HiFi-CS(视觉-语言定位用于抓取)、
ThinkGrasp(杂乱场景中的部件抓取)、
Attribute-based Object Grounding and Robot Grasp Detection(5-DoF 抓取位姿)。
Object Pose and Shape Estimation for Grasping: Does it Work? (2026-05-26,Karke 等)专门做的就是这个对比,限定在平行夹爪、7-DoF 抓取、单视角 RGB(-D):
对我们的含义(两面都要看):
所以 §3 阶段 A 的顺序是对的——感知不做对,模块化路线的优势就不存在。
VIOLA: Imitation Learning for Vision-Based Manipulation with Object Proposal Priors (CoRL 2022,UT Austin,Zhu / Joshi / Stone / Zhu;代码 UT-Austin-RPL/VIOLA)
| 它怎么做 | 论文实测 |
|---|---|
| 用预训练 RPN 拿一组通用(不分类别)物体候选框 | 不用自己训检测器 |
| transformer 策略在这些候选框上做注意力,自己挑任务相关的 | 成功率比当时 SOTA 模仿学习高 45.8% |
| 物体级结构先验 | 对物体变化和环境扰动更鲁棒 |
| 真机长时程任务(摆餐具、冲咖啡) | 在实体机器人上部署过 |
为什么它值得单列:它既不是「手写规则算 3D 坐标喂进去」,也不是「端到端硬 train」, 而是中间路线——感知不进控制回路当规则用,只作为结构先验交给策略自己取舍。 而它宣称解决的正是我们最痛的那一点:换个杯子、挪个位置就失效。
和 §1.3 的关系是互补,不是替代:VIOLA 的 RPN 是类别无关的("这里有个东西"), Grounding DINO 是文本指定的("a cup")。后者更精准,前者更省事。
Focusing on What Matters: Object-Agent-centric Tokenization for Vision Language Action models (Bendikas / Dijkman / Peschl / Haresh / Mazzaglia)
§1.5 的 VIOLA 用的是它自己的 transformer 策略,不是 VLA。这篇是同一个思路做在 VLA 上的:
| 论文原文 | |
|---|---|
| 基座 | OpenVLA(Llama-2 7B + DINOv2 ViT-L/14 + SigLIP ViT-So400M/14,224×224) |
| 物体 token 从哪来 | FT-Dinosaur,无监督物体中心模型(现成的,不用标注) |
| token 数 | 256 → 16:7 个物体 token + 9 个 agent(夹爪)token,少 93.75% |
| 收敛 | LIBERO 上「至少快一倍」 |
| 真机 pick-and-place | Oat-VLA 29/49,OpenVLA 20/49 |
GOAL-TRIAL-DATA-MANAGEMENT.md §2.1 那条规矩,对别人的论文也一样适用。prepare_images /
embed_prefix 那条路要改成什么样没人量过。| 做法 | 证据等级 | 结果 |
|---|---|---|
locate_nearest(最近的一团) | 实测 | 检出 79%,但锁的是机械臂;估计宽度 273–344 mm(手臂尺寸,不是杯子) |
locate_on_table(拟合桌面找凸起) | 实测 | 检出 97.5%、跳动 0.9 mm,看起来很好,但看图发现锁的还是机械臂。"稳定"是因为锁住了不动的手臂 |
| + 剔除接触画面边界的连通域(去掉颜色假设) | 实测 | 检出 97.6%、跳动 6.4 mm、宽 86–129 mm,数字都合理,但看图仍无法确认锁的是杯子(Z 在 216–792 mm 之间飘,而杯子基本不动) |
| 基于颜色(米色)的规则 | 放弃,未实测 | 操作者指出:目标物包含磨砂杯、彩色高脚杯,颜色规则不泛化。这个方向本身就是错的 |
教训:三次都是"数字好看",两次靠看图推翻。尺寸/稳定性指标通过 ≠ 锁对了目标。
不再手写几何规则。 按业界标准做法走开放词表检测。
| 步骤 | 内容 | 谁 |
|---|---|---|
| A1 | 选模型:优先 Grounding DINO + SAM(业界标准);Jetson 上跑不动就退到 OWL-ViT 或轻量 YOLO-World。先量 Jetson 上的推理耗时再定 | 远程 |
| A2 | 在已录的 30 集 RGB 上离线跑,文本 prompt 用 "a cup"。评:检出率、框的稳定性、换不同杯子是否仍然work(这是颜色规则做不到的) | 远程 |
| A3 | ★ 人工核对 ★ 抽 30–50 帧,逐帧看图确认框住的是杯子。前三次失败都栽在跳过这一步 | 远程(看图) |
| A4 | 框 → SAM 掩码 → 取掩码内的深度 → 杯子点云 + 质心 3D 坐标 | 远程 |
验收(事先写死):在 ≥30 帧人工核对上,框住杯子 ≥90%,且至少换一种杯子仍成立。
达不到就不进入阶段 B。
只有 A 通过了才做。 按代价排:
B0 · VIOLA 式物体先验(候选框当结构先验,不自己算 3D 坐标) —— 用现成预训练检测器给出物体候选框,交给策略自己注意,而不是我们算好一个 3D 坐标塞进观测。
吸引力:有开源实现、有 45.8% 的论文实测收益、直指"换杯子就失效"这个痛点, 而且不依赖相机内参和手眼标定(§4 那四项硬前置它一项都不需要)—— 这是它相对 B1 唯一确定的优势。
证据在 2026-09-03 晚变强了一档:原来只有 VIOLA(非 VLA 架构)撑着, 现在有了 Oat-VLA —— 同一个思路做在真正的 VLA (OpenVLA)上,而且 token 从 256 降到 16,有可能顺带把 Jetson 上的推理变快。 所以 B0 从「值得摸底的候选」升到「有 VLA 上的直接先例」。
train310 环境,lerobot 那个 torch 是 CPU-only
(实测 torch.cuda.is_available() 为 False),用错环境会量出一个假的"跑不动";prepare_images / embed_prefix,
写清楚「7 个物体 token + 9 个夹爪 token」怎么接进 SmolVLM2 的 token 序列;B1 · 深度在策略外(不重训) —— 杯子 3D 坐标用于:
① 开跑前的门(杯子不在工作区就不让手臂动)
② 每次试验记录杯位(这正是 GOAL-TRIAL-DATA-MANAGEMENT.md 里最缺的字段)
③ 失败诊断:把"模型往哪抓"和"杯子实际在哪"对齐,才能回答"是没看见还是抓歪了"
代价最低、和试验数据管理那份 GOAL 直接咬合,建议先做这个。
前置:相机内参标定 + 手眼外参(都还没做,见 §4)。
B2 · 按「Depth Helps」的方式注入策略 —— 冻结 SigLIP 主干,加 DCM + codebook,
用我们的 30 集 RGB-D 训那两个小模块。
为什么这条现在可行了:以前我说「加深度要重训、SigLIP 是 RGB 预训练所以是分布外输入」——
那是没查文献的推断。这篇论文给的正是"主干冻结 + 小模块 + 20 条轨迹"的做法,
和我们的处境高度吻合。
前置:深度必须以原生特征录进数据集(orbbec_depth_camera.py 已打通,
但 9-02/9-03 录的 30 集还是旧的旁路格式,要重录)。
B3 · 点云策略(DP3/iDP3) —— 学界实测效果最好,但换策略家族、整条链路重来。
先不做,等 B1/B2 有结论再评估。
| 事项 | 状态 | 谁 |
|---|---|---|
头部预置位 trial | ❌ 没存 | 现场,1 分钟 |
| 相机内参标定 | ❌ 没做(现在 FX=FY=320 是猜的,Z 准 X/Y 近似) | 现场摆姿势 + 远程解算 |
| 手眼外参 | ❌ 没量 | 同上 |
| 深度↔RGB 时间对齐验证 | ❌ 从没验过 | 现场挥手 + 远程比对 |
| 用原生格式重录一批带深度的数据 | ❌ 待 8781 重启后 | 现场 |
trial 预置位是地基:相机装在会动的头上,外参是"头在某个姿态时"的值,头一动全废。
而 run_policy_trials.py 的 head_lock 是启动时读当前位置就锁在哪,不是固定值。
标定前、每次试跑前都必须先移到这个预置位。
见记忆 claims-must-state-evidence-level。
彩色高脚杯,规则必须对外观不敏感。
数字好看但锁错目标,已经发生三次。
检测模型的耗时必须实测,不能假设跑得动。
**锁定杯子不要自己写规则,用 Grounding DINO + SAM(业界标准);
深度不要当第四路相机,要么在策略外面用(B1,最省),
要么按「Depth Helps」冻结主干注入(B2,有论文背书、20 条轨迹就够)。
但在此之前,先把"能不能可靠地框住杯子"用人工看图验掉——前三次都栽在这一步。**