
搞定一个VLA要烧掉多少数据我最近在整理具身智能项目时翻了一轮论文和开源仓库OpenVLA这类方案起步就是数千条遥操作示范RT系列更是动辄几万到十几万条。放到实验室里遥操作采集一天两百条已经是血汗工厂级的速度放到行业客户那边很多细分场景连一条稳定运行半个月的采数产线都凑不出来。所以看到Show-Harness打出“直接用VLM操控机器人不再专门训练VLA”这个思路时我的第一反应是好奇第二反应是怀疑。VLM真能只靠“看演示”就干活吗这期PNP具身技术笔记就把这个项目从原理、部署到横评讲透适合正在做机器人操作方案选型、或者被VLA数据问题折磨的研究者与工程师。1. VLA路线卡在哪先弄清楚“不训练VLA”为什么能成为卖点1.1 VLA的理想很丰满但训练链路太重VLA全称是Vision-Language-Action Model输入是相机图像加自然语言指令输出是机械臂的动作参数。从概念上讲它把“看、懂、动”三件事压进同一个网络确实是具身智能最性感的路线之一。但性感归性感落地是另一回事。VLA的训练链路通常是这样先在海量互联网图文数据上做视觉-语言预训练让模型知道杯子长什么样、什么叫“抓起来”再用大量机器人示教数据做动作微调让模型把“看到了什么”映射成“关节怎么转”。问题恰恰出在第二步。机器人数据不像图文数据那样唾手可得每条轨迹都需要真机采集、清洗、标注换一个机械臂型号、换一种夹爪、换一个光照环境成功率都可能明显下滑。我见过不止一个团队模型在自建仿真环境里跑到95%成功率一上真实产线直接腰斩。原因不复杂仿真到现实的domain gap、末端执行器差异、相机安装位置不同都会让VLA把“熟悉的场景”认成“陌生的场景”。想恢复精度怎么办继续采数据、继续微调。这就像开车绕路每遇到一个路口就交一次过路费路线越长成本越失控。1.2 数据成本到底有多夸张我从公开论文和代码仓库里整理了一些量级感受不精确到个位数但足够说明问题方案类型示范数据规模训练方式部署成本RT系列数万到十万条级大规模预训练指令微调集群训练周期以周计OpenVLA数千条级预训练VLM动作微调单卡或多卡可微调但数据采集周期仍长传统模仿学习几百到上千条按任务单独训练数据少但泛化弱Show-Harness思路几条到几十条不训练直接推理只需准备演示轨迹和VLM API哪怕OpenVLA已经把门槛降到单机可微调数据采集依然是隐形的大头。以常见的6自由度机械臂配合示教器遥操作来看一个熟练操作员完成一条5秒左右的任务轨迹从复位、操作、检查到存档顺畅情况下也要两三分钟。一千条有效轨迹意味着至少几十个小时的纯采集时间这还没算失败重试、传感器丢帧、任务设计调整带来的返工。1.3 真正的问题不是精度而是长尾不少团队能接受为单一任务微调VLA真正劝退的是长尾场景。客户的工件换了个颜色、桌面从白色换成黑色、目标物从静止变成传送带上的随机位置……每一个变化都可能让精心微调的策略失效。Show-Harness选择了一条更“取巧”的路既然VLA的训练瓶颈在于“学动作”那就干脆不学让大语言模型和视觉模型现成的推理能力直接干这件事。把人类演示轨迹作为上下文喂给VLM让VLM通过观看演示理解任务意图再根据当前画面直接给出动作目标。门槛从“准备一千条数据微调一个模型”变成了“录三五条演示轨迹写一段好用的提示词”。2. Show-Harness的核心设计演示轨迹就是提示词的一部分2.1 三个模块拆解参考轨迹、动作评判、空间映射从实现逻辑上看Show-Harness这类方案通常由三大块组成参考轨迹注入把人类演示的“图像序列末端坐标”作为多模态上下文拼进VLM的输入。VLM看到的不再是一句干巴巴的指令“把杯子放到托盘里”而是“之前有人这样做过”的一组证据。动作评判模块让VLM在候选动作上做筛选或评分。比如给定当前帧和参考轨迹VLM输出“下一步最合理的末端位置是哪里”或者对几个候选抓取点打分选分数最高的那个。空间映射模块把VLM输出的2D图像坐标或相对偏移量转换到机器人基座坐标系下生成真实可执行的轨迹。这里最有意思的是第一块。传统微调是把“示范数据”变成梯度信号让网络参数记住动作Show-Harness不改变任何参数而是把示范数据原封不动地放进推理上下文。相当于一个新人进车间你没让他死记操作手册而是把老师傅干活的录像放给他看他在现场照着理解来。能不能百分百复刻老师傅的水平不一定但至少不需要为每个新任务重新培训一遍。2.2 为什么VLM不需要微调也能“看懂”动作很多人会问VLM不是只会聊天和识图吗它凭什么知道机械臂该怎么动答案在于VLM在预训练阶段见过海量“人在环境中操作物体”的图像和视频。从倒水、叠衣服到拧螺丝这些日常行为在图文数据里反复出现。模型未必见过具体的UR5机械臂但它理解“抓取”意味着什么、“放置”需要怎样的空间关系。Show-Harness的聪明之处就是把这些通用知识从“回答问题”迁移到“生成机器人动作目标”。举个生活化的例子。你让一个没开过叉车的人看一段叉车师傅搬运货物的视频再让他判断“现在叉子应该升到多高”他虽然开不好叉车但完全能说出“货物在第二层叉子要举到货架中上部”。VLM做的事很类似它不输出电机电流级别的细粒度控制信号而是输出“物体在图像中的位置”“目标点的相对偏移”这些是它训练时反复见过的概念。2.3 动作输出格式从一句坐标到一整套轨迹为了把VLM的“想法”变成机械臂的动作输出格式设计是整个方案的命门。我在调研和实验中发现比较实用的输出范式有这么几种绝对末端位置让VLM直接输出物体抓取点在图像上的像素坐标再结合深度图反投影成3D点。相对偏移以当前末端位置为基准输出“沿桌面法线向下3cm向前5cm”这类偏移指令。VLM对“相对关系”的理解通常比绝对坐标更稳。关键点序列把一条轨迹拆成起点、途经点、终点VLM只输出这几个关键点的空间位置中间路径交给运动规划器去补。目标状态描述当VLM对动作细节没把握时让它描述“最终画面应该长什么样”再用底层视觉伺服模块去主动逼近这个状态。Show-Harness类方案最常见的是“关键点序列相对偏移”的组合。低级动作执行交给传统运动规划VLM只负责做空间决策这样既利用了VLM的理解能力又规避了它对连续控制信号不擅长的问题。3. 从模型输出到真实机械臂坐标标定与执行链路3.1 相机坐标系到机器人基座的转换VLM看到的是图像机械臂运动需要的是基座坐标系下的3D坐标这中间隔着一个标定环节。最常见的做法是eye-to-hand配置相机固定在支架上通过ArUco标定板计算相机到机器人基座的变换矩阵。流程上说把标定板放在机械臂可达范围内的任意平坦位置用机械臂末端分别触碰标定板上的几个角点记录多组基座坐标与像素坐标的对应关系再用PNP算法求解出变换矩阵。这个步骤建议做成启动时自动执行的脚本而不是每次手动操作否则换一次相机角度就要重标太折腾。eye-in-hand配置则相反相机装在机械臂末端标定的是相机到末端法兰的变换。这种配置的好处是视野随机械臂移动操作目标附近能看得更清楚坏处是标定误差会随机械臂姿态变化被放大。Show-Harness这类依赖VLM“全局理解”的方案用eye-to-hand更省心因为VLM需要看到整个工作台面的布局而不是局部特写。3.2 VLM输出的是2D信息怎么变成3D动作这是新手最容易卡住的地方。VLM很多时候输出的是图像上的像素坐标比如“目标物中心在(320, 240)”但机械臂需要的是一个3D抓取点。我建议的方法是用RGB-D相机把2D选点反投影到3D空间拿到VLM输出的像素坐标后直接读取深度图上对应位置的深度值再通过相机内参反投影得到相机坐标系下的3D点最后乘上第3.1节标定出的变换矩阵就得到了机器人基座坐标。实际处理时要注意几点。一是深度图的边缘区域噪声大尽量让VLM选点选在物体中心附近别选边缘二是透明物体、反光物体和细长物体的深度值经常不可信这类场景不要硬用反投影最好结合点云分割或人工指定抓取高度来兜底三是VLM输出的坐标可能漂移几个像素但在1米左右的工作距离下几个像素对应几毫米到一厘米的误差对大部分抓取任务是可以接受的。3.3 VLM推理慢怎么让它“看起来”实时VLM单次推理耗时通常要一两秒甚至更长这和机械臂控制需要的毫秒级响应差距很大。硬要拿VLM做闭环实时控制不现实但把它放在“规划层”完全够用。我习惯把执行链路分成两层上层由VLM做低频规划比如“3cm/s的传送带上下一个抓取点在哪”频率1-2Hz就够下层是传统运动规划和伺服控制负责让机械臂平滑地移动到目标点。VLM算得慢不要紧只要目标点切换的速度比机械臂运动速度快执行过程就是连续的。对于多步任务还可以用“滞后重规划”的策略VLM每完成一步动作后重新观察画面判断上一步是否成功再决定下一步动作。这个策略比一口气生成完整轨迹稳健得多因为VLM对长程任务的空间推演能力有限走一步看一步才是最不容易翻车的用法。3.4 硬件选型建议相机、机械臂与算力从复现成本出发我推荐这样的配置起步机械臂6自由度以上带位置和速度控制接口优先选ROS支持好的型号调试效率高不少。相机入门级RGB-D相机即可注意工作距离要和机械臂工作空间匹配太近会视野不足太远深度误差会变大。算力VLM推理如果走本地至少需要一张24GB显存的显卡如果只是验证可行性直接调云端VLM API更方便把图像压缩后传上去先把流程跑通再说。夹爪两指平行夹爪做桌面抓取最省事避开吸盘——吸盘对待测物体表面平整度要求高容易引入额外变量。这套配置下来一个能跑Show-Harness的最小系统用不了太多预算比买一台动辄几十万的遥操作系统友好得多。4. Show-Harness与微调VLA的横评数据、泛化、实时性到底差多远4.1 先看一张对比总表维度Show-HarnessVLM直接推理微调VLA示范数据需求几条到几十条数千条起步训练成本零训练仅推理需要GPU训练与调参任务切换成本换提示词和演示轨迹即可重新采集数据并微调泛化能力依赖VLM预训练知识的广度依赖训练数据的覆盖度组合任务能力强天然理解语言指令中等需要数据中体现组合模式执行精度中等依赖标定和低层规划可训练到较高精度实时性受限VLM推理延迟高训练后推理快安全性输出需加滤波与约束同样需要安全层保护这张表不是要分个高下而是说明两者其实在不同维度上互补。4.2 泛化能力VLM赢在“没见过的场景”VLM的优势在于它背靠海量互联网图文知识。我做过一个测试让机械臂把一罐可乐放到一个蓝色碗里不换任何代码只改自然语言指令让它把可乐放到黄色盘子里Show-Harness路线一次就跑通了。因为它不是“记住”了蓝色碗这个特例而是理解“放置”到“容器”里这个概念。反过来微调VLA如果数据集里只有蓝色碗遇到黄色盘子大概率会犹豫甚至抓取策略漂移。要让VLA学会新颜色、新物体唯一的办法是补数据。这种差异在实际项目中非常致命因为客户的需求永远是“我们下一批工件和这批长得不一样”。4.3 实时性与稳定性VLA依然有优势也不能把Show-Harness吹上天。VLM推理一次要一两秒在高速分拣、连续传送带等场景下完全顶不住。微调后的VLA推理通常在单张显卡上就能到几十毫秒接近实时控制。虽然VLA同样需要安全滤波和碰撞检测但它的延迟天花板低得多。另外VLA的参数是针对具体机器人和任务调出来的输出动作相对平滑VLM是通用模型直接输出的空间点偶尔会出现跳变不加滤波器就发给机械臂机械臂可能会被“吓”得抖一下。所以Show-Harness路线必须串联一个平滑层比如对连续几次VLM输出的目标点取移动平均或者用低通滤波处理参考轨迹。4.4 选型建议什么场景用哪套我的经验是分场景看每天换任务、换物料的场景选Show-Harness。省下的数据采集时间非常可观改指令就是改需求。固定任务、大批量、节拍要求高的场景选微调VLA。虽然前期数据贵但跑起来之后稳定性和速度都更省心。新项目从0到1做预研先Show-Harness验证逻辑再决定要不要为量产去采数据训VLA。这样最省钱。5. 我在复现Show-Harness时踩过的坑以及绕坑方案5.1 坑一VLM被任务描述带偏只输出“想法”不输出“坐标”第一次跑通流程时我让VLM“分析杯子的位置确定抓取点”它洋洋洒洒输出了一段话听起来很有道理但里面一个可用的数值都没有。原因很简单VLM在预训练中习惯了“回答问题要完整”而不是“输出结构化数据”。解法是严格约束提示词的回复格式。我在实验里用的是JSON模板加few-shot示例的方式明确告诉它“只输出以下结构不要多余解释”{ target_pixel: [320, 240], approach_direction: down, grasp_gripper_width_mm: 30 }同时给一个填好的示例放在参考轨迹后面。关键不是让VLM“理解”这个格式而是让它“照葫芦画瓢”。经过类比学习后绝大多数VLM都能稳定输出结构化内容。5.2 坑二参考轨迹太长VLM上下文窗口装不下演示轨迹是按帧存的一条10秒的轨迹按30帧每秒保存就是300帧图像。这么多图塞进VLM的上下文轻则超长报错重则模型在长上下文里“忘掉”了前面的信息开始胡编乱造。我的做法是先降采样每5到10帧保留一帧只保留关键动作段。比如“移动到物体上方→下降→夹取→抬起→移动→放下”这个流程我手动截取每段转折点附近的帧作为关键帧通常6到10帧就够。VLM不需要看完整的连续视频它需要的是动作阶段之间的变化关系。保留太多冗余帧反而干扰判断。5.3 坑三末端坐标偏了2到3厘米抓取总是擦边VLM输出的像素坐标大体没错但反投影到3D后机械臂末端总是差一点有时甚至碰到物体边缘。这个问题的根源通常不是模型而是标定或深度图的精度。排错步骤是这样先固定一个已知位置的物体让VLM输出抓取点反投影后与真实位置对比看偏差是否稳定在同一方向。如果稳定基本可以断定是标定结果不精确重做一遍手眼标定多采几组标定点取平均。如果不稳定重点检查深度图对应区域的深度值是否抖动必要时对深度图做时间中值滤波。还有一个加分的做法是把物体点云投影到像素平面用点云的质心去修正VLM选点。5.4 坑四多步任务做到第二步就开始漂移单步抓取没问题但一旦任务变成“把红色方块放在蓝色方块旁边再把绿色方块放到红色方块上面”做到第二步就开始出幺蛾子。VLM对长程任务的空间关系推演能力有限前面一步稍微偏一点后面几步的参照物就都不对了。绕坑方案是拆分决策每个子步骤完成后让VLM基于最新画面重新做一次目标检测和动作规划而不是让它一口气规划完整条链。我在提示词里加入“当前状态检查”的环节先问它“上一步完成了吗”确认后再问“下一步目标是什么”。这样虽然多消耗几次VLM推理但每一步的空间参照物都是新鲜的成功率明显提升。5.5 坑五遮挡情况下VLM的选点会跑到物体背后工作台上物体一多互相遮挡很常见。VLM如果只看到被挡住的物体边缘输出的抓取点可能落在不可达区域。这种情况我用的办法是多视角冗余在eye-to-hand的相机之外再加一个低角度相机两个视角的图像同时拼进prompt里让VLM综合判断。VLM对“同一物体在不同视角下的位置一致性”有基本理解多视角能大幅降低因遮挡导致的误判。如果条件不允许加相机至少要在提示词里要求它“如果物体被遮挡请输出一个最接近可见部分的候选点并标记置信度”。5.6 关于安全的最后一个提醒Show-Harness再怎么方便VLM输出的目标点都必须经过碰撞检测和边界约束再发给机械臂。我见过有人图省事直接把VLM输出的位置塞给底层控制器结果机械臂往桌面边缘猛冲的场景。务必要在VLM和运动规划之间加一层安全过滤工作空间边界、关节限位、夹爪状态、速度限制缺一不可。通用模型的“聪明”和物理世界的“危险”之间必须有一道硬代码的防火墙。6. 后续可以怎么扩展Show-Harness这套思路在单机械臂桌面操作场景里已经能跑通我觉得更值得尝试的方向有三个。第一是把它接到双机械臂协同让VLM同时输出两个臂的目标点重点考验的其实是提示词里的空间关系描述第二是让VLM结合语音指令做交互式修正操作员说一句“再往左一点”系统直接调整轨迹这对半自动产线场景很实用第三是拿它给VLA生成训练标签先用VLM完成任务收集高质量数据再去微调VLA把两条路线从对立变成互补。我在实际测试中最深的体会是Show-Harness不一定完全取代VLA但它提供了一种低成本验证任务可行性的路径。以前一个新任务落地上来就要评估数据成本和训练周期现在可以先花半天时间录几条演示、写一套提示词跑通之后再决定值不值得为这个任务投入资源去训VLA。这种“先试后投”的思路对项目决策的帮助比模型本身那点精度的提升更重要。