拓冰建站拓冰建站
首页 / 资讯中心 / 正文

VLA模型简化机器人开发:从感知-规划-控制到端到端大模型的工程实践

做真实机器人项目的朋友应该都体会过那种感觉单看感知、规划、控制每个模块都“能用”一旦串起来换个物体、挪个位置、调个环境光照整个链路就要重新伺候一遍。这两年具身智能方向最核心的技术变化就是VLA模型Vision-Language-Action Model视觉-语言-动作模型开始把这条传统链路压缩成一个端到端的大模型。它接收相机画面和自然语言指令直接输出机器人动作不再需要中间那堆规则和手工模块。作为具身智能入门系列的第十篇这篇我直接从工程视角把VLA拆开讲它到底改了什么、内部结构怎么搭、数据从哪来、以及用开源模型实际部署时有哪些坑。1. VLA到底改变了传统机器人开发里的什么东西1.1 传统“感知-规划-控制”链路为什么越改越累传统机器人堆栈基本是“感知 → 规划 → 控制”三段式。感知部分负责物体检测、位姿估计规划部分一般用运动规划算法算一条无碰撞轨迹控制部分再把轨迹下发给底层伺服。这套思路在产线上非常成熟但你只要让机器人离开重复固定的工位复杂度就指数上升。举个例子我让机械臂“把红色杯子放到蓝色托盘上”。传统方案需要先检测红色杯子和蓝色托盘分别识别它们的类别、2D检测框、3D位姿然后做抓取点计算再规划轨迹。这里面任何一步出了问题整个任务就失败。更麻烦的是如果场景里出现一个你没有标注过的绿色杯子检测模型只会当它不存在。所以大家做真实项目时大部分时间不是在写核心算法而是在拼“胶水代码”目标检测输出格式转换、坐标变换、抓取姿态求解、轨迹插值、异常处理。一个demo能跑通但每个环节升级都会引发连锁改动。1.2 VLA用一句“端到端”解决了什么VLA的思路非常直接让一个多模态大模型同时理解图像和语言然后直接输出机器人动作。输入是“当前相机图像文本指令”输出是一个动作向量通常包含机械臂末端位姿位置和姿态以及夹爪开合量。这样做最大的好处是模型自己从海量数据里学到了“看到什么、听到什么、下一步该动到哪里”的映射关系。视觉和语言在同一个Transformer里面交互而不是像传统方案那样语言指令经过人肉翻译成程序逻辑视觉经过检测框变成几何坐标。需要说明的是VLA并不是完全把传统方法扔进垃圾桶。底层还是要依赖运动学解算、碰撞检测和伺服控制但“从语义到动作”这一段确实被一个模型接管了。1.3 为什么偏偏是这两年火起来VLA能落地靠的是三个要素同时成熟。第一基础模型。CLIP这类视觉-语言预训练模型让机器第一次把“看到的东西”和“语义概念”对齐LLaMA等语言模型提供了强力的推理和理解能力。第二数据。以Open X-Embodiment为代表的开源机器人数据集把全球多个实验室的遥操作数据聚合到一起规模达到了百万条轨迹级别这是过去不敢想的。第三硬件。机械臂成本下降遥操作设备普及让实验室有能力采集更多真实数据。这三点凑齐之后VLA从论文走向实际部署就成了必然。2. 一个VLA模型拆开看视觉、语言、动作如何汇合2.1 视觉侧用CLIP/SigLIP这类模型做“眼睛”VLA不会从零开始训练视觉特征它直接用预训练好的视觉编码器来抽取图像信息。OpenVLA用的是SigLIP和DINOv2的组合RT-2基于PaLI-X的视觉塔π0用PaliGemma那一套。SigLIP负责语义理解帮模型认出“这是杯子”“这是托盘”DINOv2更擅长捕捉几何和结构特征比如物体轮廓、表面纹理起什么作用。两者特征拼在一起后模型既知道“这是什么”也知道“这大概在什么位置、什么朝向”。你可以把视觉编码器理解成一个“翻译官”把高分辨率图像变成一串特征向量再喂给Transformer。实际使用中视觉输入的预处理也很关键。OpenVLA官方建议把图像resize到224×224RGB归一化再用。很多人忘了这一点直接传原始分辨率图片结果模型推理非常慢效果还未必好。2.2 语言侧指令变成“后缀式”promptVLA的指令处理和聊天机器人不太一样。OpenVLA的prompt格式是这样的A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the users questions. USER: What action should the robot take to push the red cup to the right? ASSISTANT:模型在“ASSISTANT:”之后不再输出文字而是输出一连串动作token。为什么搞成这样因为OpenVLA是从开源的VLM微调来的它保留了原来的chat模板。你直接换成“给我一个动作”这种口语化指令效果会掉一截。这里给入门者一个重要提醒语言指令要尽可能描述任务目标而不是描述动作轨迹本身。“pick up the red cup”这种指令没问题但“move x to 0.5, y to 0.3”这种底层指令不是VLA的强项。VLA更擅长自然语言到抽象技能的映射精确定位还得靠后续的伺服控制。2.3 动作侧离散token、连续回归、流匹配VLA的门面就是“动作输出”这方面的设计五花八门也是代际差异最大的地方。早期RT-1和OpenVLA的做法是把动作离散化。每个自由度比如x、y、z、roll、pitch、yaw、夹爪都被切割成若干个bin每个bin对应一个token id。OpenVLA的做法是每个自由度拆成256个离散级别7个自由度就是7个token再补一个“停止”token整个动作序列由模型自回归生成。这种做法最接近语言模型的习惯可以直接套用next-token prediction的训练范式工程上非常省事。缺点是离散化本身有精度上限而且动作是单步预测容易不连贯。π0用的则是另一条路线在做语言和视觉特征融合之后加了一个“动作专家”模块用流匹配flow matching来生成连续动作序列。流匹配可以理解成从随机噪声一步步还原成真实动作分布的过程类似扩散模型但步数更少、速度更快。它输出的是未来一段时间的动作序列而不是单个动作所以运动更平滑也适合控制灵巧手这种高自由度硬件。此外还有很多尝试用扩散模型直接做动作头的比如Diffusion Policy现在也经常被拿来和VLA主干结合。总趋势是离散token先跑通链路连续生成保证质量和平滑度。2.4 一张图走通OpenVLA前向过程以OpenVLA为例一次完整的前向计算是这样的相机图像经过预处理器变为224×224的tensorSigLIP和DINOv2编码图像生成视觉特征用户的文本指令经过tokenizer变成文字token视觉特征和文本token拼接成序列进入LLaMA-2 7B的Transformer层Transformer最后输出7个动作类别的概率分布每个类别258个候选token其中256个有效值取argmax得到每个维度的离散编号再通过反归一化转成真实的机器人坐标。这个过程对显存要求不低。OpenVLA 7B在bf16精度下大约需要14~16GB显存一张24GB的4090能跑推理但如果要做训练或LoRA微调最好准备两张卡或者用A100。3. 从RT-2到OpenVLA到π0三代VLA的建模思路分岔3.1 RT-2把动作彻底文本化是里程碑也是套路谷歌的RT-2是VLA这个名词真正进入大众视野的标志。它的核心操作非常聪明直接把机器人的动作表示成“文本token”。比如一个动作[x: 0.1, y: 0.2, z: 0.3, roll: 0.0, pitch: 0.0, yaw: 0.5, gripper: 1]RT-2会把它写成一段类似“x轴坐标42y轴坐标15...”的文本。这样语言模型就可以用next-token prediction的方式训练完全复用LLM那一套基础设施不需要为动作设计单独的loss函数。RT-2的亮点是泛化能力。因为它基于超大规模的互联网图文预训练模型对“红杯子”“托盘”这类概念有先验理解所以碰到训练数据里没见过的物体组合也能零样本处理很多任务。缺点是动作精度有限而且输出是离散的bin不适合精细操作。3.2 OpenVLA把VLA带进开源世界的功臣OpenVLA是斯坦福等机构在2024年推出的开源VLA模型参数约7B完全开源权重和训练代码。它的基座不是谷歌的闭源大模型而是开源的Prismatic VLM——视觉用SigLIPDINOv2语言用LLaMA-2 7B。OpenVLA把动作离散化为每个维度256个bin模型参数量7B在24GB显存的消费级显卡上就能跑LoRA微调。这对学术界和小团队来说是一个极大的门槛降低。你在Hugging Face上可以直接下载openvla/openvla-7b权重配合transformers库就能跑起来。正是因为OpenVLA完全开放社区里后来出现了不少基于它的二次开发比如把动作头替换成扩散模型的、做6DoF姿态控制增强的。它已经成了VLA领域的事实基准之一。3.3 π0流匹配动作头与“动作专家”设计Physical Intelligence公司发布的π0在架构上做了一个很关键的变化不再用单一Transformer同时做语义理解和动作生成而是引入了一个独立的“动作专家”模块。π0的整体结构是PaliGemma视觉-语言模型负责理解任务动作专家模块则接收历史动作和视觉特征通过流匹配生成未来动作。这种解耦设计有实际好处语言模型部分可以继续用互联网数据预训练动作专家部分专门吃机器人数据两者互不拖累。π0能很好地支持灵巧手和双边臂的高频控制动作平滑度明显好于纯离散token的方案。当然π0的完整权重并没有像OpenVLA那样完全开源这在一定程度上限制了社区的研究热情但它的思路已经被很多后续工作继承。3.4 一张表理清选型逻辑模型基座动作表示参数量开源程度适合场景RT-2PaLI-X / PaLM-E离散文本token5B/55B无开源权重泛化研究、演示OpenVLAPrismatic (LLaMA-2 7B)离散token (258×7)7B权重全开源学术研究、小规模部署、微调π0PaliGemma Action Expert连续流匹配约3B部分技术报告灵巧操作、高质量连续控制如果你刚入门VLA想快速跑通一个真实机器人任务OpenVLA几乎是唯一选择。它资料多、社区活跃、对硬件要求不高。如果你专心做操作技能的高质量运动生成π0的思路更值得参考。4. VLA训练数据没有千万级真实机器人数据怎么办4.1 机器人遥操作数据到底长什么样VLA的训练数据主要是“遥操作数据”也就是人通过示教器、VR手柄或主从设备控制机械臂做任务同时记录摄像头画面、指令文本和机械臂动作。一条标准的轨迹数据由四部分组成观测图像通常是外部相机腕部相机、语言指令、连续的动作向量、是否终止标记。Open X-Embodiment数据集的jsonl格式大致如下{ dataset_name: example_robot, observation: { image_primary: path/to/camera_0.jpg, image_wrist: path/to/camera_1.jpg }, instruction: pick up the red cup and place it on the blue plate, action: [0.12, 0.35, 0.28, 0.01, 0.02, 0.15, 1.0], terminate: false }其中action的7个数值分别代表末端执行器的x、y、z位置、roll、pitch、yaw朝向和夹爪开合度。不同采集平台的动作定义差异很大有的机械臂多了夹爪宽度、有的用欧拉角、有的用四元数所以数据预处理中动作空间对齐非常关键。4.2 网络预训练和机器人数据的关系VLA有个很有意思的特点它的参数初始化来自互联网级别的图文数据。也就是模型先看过无数张猫、狗、杯子、托盘的图片学会图像与语义的对应关系然后再用机器人轨迹数据做领域微调。这样做的好处是模型不需要从零开始理解“什么是杯子”它只需要学会“杯子在我手里时该往哪里放”。这也是为什么VLA的泛化能力明显优于直接从机器人数据训练的小模型。但这里面有一个现实问题机器人真实数据即使有Open X-Embodiment加持也比互联网图文数据少了好几个数量级。所以很多团队开始引入仿真数据和视频数据做中间训练先让模型学会“看懂物理世界的变化”再用小规模真实操作数据精调。4.3 数据质量可能比数据数量更关键我个人的体会是VLA训练中最容易翻车的不是模型结构而是数据里的“脏活”。常见的坑有第一指令和动作不对齐。某个episode明明在做“将杯子放倒”指令却写成了“将杯子立起来”模型学到的映射就乱掉了。第二相机位置不一致。同一批数据里如果相机轻微移动但没有重新标定模型会把“位置变化”误认为“动作原因”。第三运动学不一致。手爪实际开合量和记录的动作值对不上模型会学到错误的夹爪策略。针对小团队我建议优先保证300~500条高质量、干净对齐的轨迹再谈规模。数据清洗脚本要提前写好把每条episode都可视化检查一遍这种笨功夫省不掉。4.4 数据不够时的替代方案如果你没有机器人数据也想体验VLA有几个过渡方案一是用Hugging Face的LeRobot平台它提供了低成本的SO-100双臂套件和开源数据集几百美元就能攒出一套数据采集设备。二是用仿真环境比如MuJoCo配合Maniskill数据集做预训练再用sim-to-real在真机上微调。三是“视频预训练少量动作微调”用互联网视频训练模型理解任务再拿100条左右真机数据做微调。数据永远是最花时间的地方。我认识的团队里数据工程师几乎是标配VLA模型本身反而不是最大的瓶颈。5. 用开源VLA做一次真实部署我踩过的实操流程5.1 环境配置最容易因版本翻车我以OpenVLA为例。单卡RTX 4090就能跑推理但环境配置有几个容易出问题的地方一是PyTorch和CUDA版本必须匹配。官方推荐torch2.2.1加CUDA 12.1不要盲目升级到2.5以上兼容性坑太多。二是transformers库版本要控制在4.40左右太新的版本接口变动会导致模型加载失败。三是模型下载要预留足够磁盘空间。最省事的做法是直接用官方Docker镜像或者用uv按仓库的锁文件创建环境。网上很多人报错说“KeyError: vq2d”或者“unexpected keyword argument use_cache”十有八九是环境版本不对。我自己第一次配置时在这上面耗了大半天后来老实按官方环境来一次通过。5.2 推理链路从图像到动作token加载模型的代码大概长这样import torch from transformers import AutoModelForVision2Seq, AutoProcessor processor AutoProcessor.from_pretrained(openvla/openvla-7b) model AutoModelForVision2Seq.from_pretrained( openvla/openvla-7b, torch_dtypetorch.bfloat16, device_mapcuda:0 ) prompt A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the users questions. USER: What action should the robot take to push the red cup to the left? ASSISTANT: image load_camera_image() # PIL.Image inputs processor(prompt, image, return_tensorspt).to(cuda:0) with torch.inference_mode(): pred_action model.predict_action(**inputs, unnorm_keyyour_robot_key, do_sampleFalse)注意predict_action是OpenVLA自定义的方法它会自动处理动作token到连续值的转换。但这里的unnorm_key对应训练时的动作归一化参数不同数据集对应的unnorm_key不一样。如果你不传模型输出的是归一化到[-1,1]的相对值拿到真实机器人上要自己标定反归一化系数。5.3 接到真实机器人上要注意什么模型能输出动作并不代表机械臂就真的会动。连接真机时至少有三个问题要想清楚第一控制频率。OpenVLA在4090上推理一次大约需要1秒到2秒生成7个动作token很快但图像编码占大部分时间。这个频率远低于机器人伺服要求因此不能让VLA直接发位置指令给电机否则机械臂会一顿一顿甚至抖动。正确做法是用VLA输出目标位姿然后用底层的高频PD控制或阻抗控制去插值逼近。第二坐标系统一。模型输出的末端坐标基于相机视角而机械臂执行器用的是底盘坐标系中间需要手眼标定。哪怕标定矩阵差几毫米抓取任务都很容易失败。如果看到模型“明明知道往哪去但总差一点”多半是标定问题。第三安全限制。VLA模型不可能保证每一步动作都无碰撞。部署时务必给机械臂设定速度上限、力传感器阈值、以及急停逻辑。先在小范围内跑通再扩大任务复杂度。6. 落地过程中的真实经验与我的判断6.1 动作空间对齐的坑方向反了、距离缩放、夹爪开度不对我在实际做VLA部署时最大的教训就是动作空间对齐。OpenVLA这种通用模型用的是开源数据集里的动作归一化方式而真实机器人平台的动作坐标系、量纲、尺度跟训练数据通常都不一样。最典型的案例模型输出某个夹爪开合值在源数据集里1.0代表完全闭合在你的机器人上可能代表完全张开。如果没有做映射和校准夹爪不仅抓不住东西还可能直接把物体碰倒。所以部署的第一步不是跑复杂任务而是做一轮“动作探头”测试固定机械臂在初始位姿设置一组不同的动作指令观察机械臂实际运动和预期方向一一比对。我建议先只测x方向再测y、z、旋转和夹爪最后再做组合动作。这一步看起来费时间但能省掉后面排查问题的大量时间。6.2 延迟、频率与控制器分层VLA模型的推理延迟是真实部署绕不开的话题。以大模型为backbone的VLA单次推理时间普遍在几百毫秒到几秒之间这还不包括图像预处理和通信传输。机器人控制通常需要几十到几百赫兹的反馈两者之间隔了好几个数量级。业界常用的解法有三种一是动作序列缓冲让VLA一次性预测一小段轨迹然后底层控制器按时间戳逐点执行二是混合策略VLA负责“做什么”和“大致往哪去”底层运动规划或操作技能库负责“具体怎么动”三是高频视觉反馈用传统的视觉伺服在底层做实时修正VLA只在任务状态改变时才重新推理。第三种做法目前工程上最稳。6.3 泛化边界在哪里VLA并不万能。它擅长的是“语义理解粗粒度操作”比如抓取、放置、推、按、倒水这类日常家务技能。但在高精度装配、微小零件操作、强力矩控制这些场景里VLA的输出精度远远不够。我在测试中发现OpenVLA对物体位置变化的鲁棒性不错但对物体外观剧烈变化比如透明杯子、强反光表面还是会出问题。模型也没办法记住几十秒之前的上下文因为输入主要依赖当前帧图像。如果你做的是多步骤长时序任务建议额外加一个任务状态机或者让VLM做高层规划把任务拆成若干个子技能再逐个用VLA执行。6.4 这个方向后续会怎么走VLA目前还在快速迭代期我判断接下来有几个明显趋势。一是“VLA世界模型”结合。让模型不只是输出动作还能想象“如果执行这个动作场景会变成什么样”从而具备更强的规划和纠错能力。二是“VLA强化学习”的后训练阶段。先用模仿学习让模型学会基本行为再用强化学习在真实或仿真环境里优化细节这种两段式训练在π0后续版本里已经看到雏形。三是数据采集基础设施会越来越像“数字工厂”。遥操作设备、自动标注、数据版本管理会成为机器人团队的标配。如果你现在打算入门VLA我建议从OpenVLA的源码和LeRobot的数据采集开始先跑通一个最简单的“推块”任务再逐步加复杂动作。这个领域还很新不需要一上来就啃几百篇论文亲手把一条数据从采集、清洗、训练、部署走完比看任何综述都管用。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门