直接回答

机器人基础模型是希望跨机器人任务、场景或本体迁移的预训练模型或策略。**视觉-语言-动作模型(Vision-Language-Action,VLA)**是其中一类重要架构:它把视觉观测、语言指令以及通常包含的本体状态映射为动作或动作块。参数量、模型标签或一次基准不能证明可生产。生产就绪需要不可变的模型-本体契约、防泄漏评测、实时接口验证、独立安全控制、受保护灰度和可回滚证据。

本文聚焦机器人基础模型工程。若要了解更宽泛的定义与感知-行动闭环,请阅读具身智能是什么?

核心要点

  • “基础模型”是一项迁移能力声明,不是标准化认证;必须说明跨任务、场景、机器人和动作空间迁移了什么。
  • VLA 的关键差异集中在动作接口:离散 Token、回归、扩散、Flow Matching 与动作分块具有不同延迟和控制含义。
  • 跨本体训练依赖明确的观测、坐标系、动作、时序和本体元数据契约。
  • 任务成功率只是起点;还要评测泛化切片、重复性、故障原因、人工干预、安全、延迟和恢复。
  • 学习策略不能成为唯一安全层;确定性约束、看门狗、保护停机和应用级风险控制必须独立存在。

什么才算机器人基础模型?

机器人基础模型是否可复用,只能由声明协议下的迁移证据证明。这个名称可能指表征模型、高层规划器、视觉运动策略,或组合多个组件的系统。比较两个系统前,应先回答:

契约问题 为什么重要
输入是什么? RGB、深度、触觉、语言与本体状态对应不同传感器和标定
模型输出什么? 子目标、末端位姿增量、关节目标、力矩和动作块需要不同控制器
哪些条件保持不变? 同一机器人上的新物体,不等于新机器人或新动作空间
允许怎样适配? 零样本、只改 Prompt、少量示教、Adapter 训练和全量微调是不同声明
评测单位是什么? Episode 成功、子任务完成、无干预时长和节拍回答不同问题
模型之外保留什么? 状态估计、运动规划、控制和安全层都会影响系统表现

Open X-Embodiment 论文 汇聚了 22 种机器人数据,并在 RT-X 实验中报告正迁移。它证明异构机器人数据具有可行性,但不等于任意机器人即插即用。机器人形态、相机安装、坐标系、控制频率与动作语义仍需要适配。

VLA 在机器人系统中的位置

VLA 把语义观测和指令连接到动作表示,但不会抹去机器人栈的其他部分。

flowchart LR S["传感器与机器人状态"] --> C["标定与时钟同步"] I["语言或任务目标"] --> V["VLA 策略"] C --> V V --> A["动作表示"] A --> F["可行性与安全过滤"] F --> L["底层控制器"] L --> B["机器人本体"] B --> S M["运行监控"] --> F M --> L

观测与语言编码

策略可以接收一个或多个相机视角、机器人状态、力觉或触觉信号,以及任务指令。传感器时间戳和标定属于输入契约。腕部相机训练的模型若直接接入第三方相机,不能默认保留原能力声明。

多模态主干

主干网络把观测和语言对齐到共享表示。RT-2 同时使用互联网视觉语言任务与机器人轨迹微调视觉语言模型,并把动作表示为文本 Token。论文在 6,000 次评测试验中展示了语义迁移,但结论只对其任务、机器人和协议成立。

动作解码器

动作解码器决定模型输出如何交给控制器:

动作家族 表示方式 工程权衡
自回归 Token 将各动作维度量化为 Token 顺序输出 可复用语言模型机制,但引入离散误差和串行解码
直接回归 连续动作向量或轨迹 接口简单,但必须显式处理不确定性与多模态动作
扩散策略 迭代去噪生成动作块 能表示多峰轨迹,但增加迭代推理和调度器选择
Flow Matching 通过连续向量场生成动作块 支持连续动作,但求解步数、时域和 Runtime 仍需实测
分层输出 由另一规划器/控制器消费的子目标或位姿 保留模块化检查,但评测对象变成完整组合系统

π0 论文 在预训练视觉语言主干之上使用 Flow Matching,并评测多种灵巧任务。它代表一种设计选择,不能证明 Flow Matching 在任意任务上都比 Token 或扩散策略更快、更安全或更准确。

实时控制边界

模型推理与底层控制通常运行在不同频率。部署契约必须记录观测频率、推理延迟、动作时域、命令频率、抖动策略、陈旧命令处理,以及插值或执行动作块的控制器。只报告平均延迟不够;Deadline Miss 和尾延迟都可能破坏系统稳定性。

建立跨本体数据契约

只有模型能够一致解释每个 Episode 时,机器人数据才可复用。一个包含视频和电机数组的目录并不是可治理数据集。

json
{
  "episode_id": "cell-a/task-17/run-0042",
  "embodiment": {
    "robot_model": "arm-x",
    "kinematic_revision": "sha256:...",
    "end_effector": "gripper-y",
    "action_space": "ee_delta_xyz_rpy_grip",
    "action_units": ["m", "rad", "binary"],
    "control_hz": 20
  },
  "observations": {
    "camera_ids": ["head", "wrist"],
    "calibration_revision": "sha256:...",
    "state_schema": "joint_position_velocity-v2",
    "clock": "monotonic-ns"
  },
  "task": {
    "instruction": "把蓝色零件放入 B 托盘",
    "scene_id": "scene-91",
    "object_set": "parts-v3"
  },
  "outcome": {
    "status": "success",
    "failure_code": null,
    "human_interventions": 0
  },
  "provenance": {
    "collection_method": "teleoperation",
    "license": "dataset-specific",
    "consent_policy": "policy-v4"
  }
}

时钟同步与标定

图像、机器人状态、动作与接触事件必须共享有文档的时钟和对齐策略。相机内外参、工具中心点、关节约定与控制延迟都需要版本化标定。训练和部署使用不同对齐方式,会产生静默分布漂移。

动作归一化

跨机器人学习需要明确转换关节空间、笛卡尔空间、夹爪和控制频率。归一化统计属于 Checkpoint 制品,不能从文件名猜测单位、坐标系或夹爪正负方向。

结果与故障标签

只保留成功示教会隐藏恢复行为,也削弱离线验证。应记录部分完成、超时、感知错误、目标不可达、避碰、保护停机、物体掉落、人工干预和未知结果。“未知”必须与成功和失败分开。

来源与治理

记录每个 Episode 由谁或什么生成、适用许可证、同意、保留期、受限环境与派生制品。人类视频、遥操作、合成数据和自主采集具有不同权利与 Domain Gap;混合后的数据量更大,不代表质量一定更好。

防止评测数据泄漏

机器人数据在相机、轨迹、场景和重复示教之间包含大量近似样本。随机按 Episode 切分,很容易把几乎相同条件放进训练集与评测集。

应显式留出:

  • 新物体实例与外观;
  • 新场景布局、光照和背景;
  • 新语言表达与组合式指令;
  • 新任务组合或更长时域;
  • 新操作员和采集 Session;
  • 同型号的新机器人单机;
  • 新本体或动作 Adapter;
  • 经过标定的传感器扰动与依赖故障。

先对相关 Episode 分组,再切分。模型应携带切分 Manifest 与 Hash。若基准中的任务、物体或场景可能出现在预训练数据中,应标记为分布内或可能污染,不能直接称为“零样本”。

适配模型,但保留可回退基线

适配应从狭窄任务和本体契约开始,而不是从“通用机器人智能”承诺开始。

flowchart LR P["固定预训练 Checkpoint"] --> D["目标数据审计"] D --> A["本体与动作 Adapter"] A --> T["微调或后训练"] T --> E["冻结评测切片"] E --> C{"晋级门禁"} C -->|通过| R["版本化候选"] C -->|失败| D

可选适配路径包括:

  • 不更新权重,只修改 Prompt 或任务模板;
  • 观测与动作 Adapter;
  • 参数高效微调;
  • 动作头或 Action Expert 训练;
  • 完整策略微调;
  • 模仿学习后进行严格受控的强化学习。

OpenVLA 发布了 7B VLA 的 Checkpoint、代码和微调方案,其训练包含 970,000 条示教。论文结果是该模型和协议的有效证据,但不能与在不同任务上测试的新系统直接排名。

始终保留固定基础 Checkpoint、目标数据 Hash、优化器配置、Adapter Revision、归一化统计与评测切分。缺少这些制品,就无法完整回滚与归因。

分层评测,而不是只看一个成功率

生产评测需要拆分任务能力、泛化、Runtime、安全与运营。

层级 应保留的指标
接口忠实度 观测形状、标定、单位、动作范围、控制器兼容性
任务结果 完整成功、部分完成、超时、故障码、置信区间
泛化 留出物体、场景、指令、任务、机器人单机、本体
鲁棒性 传感器噪声、遮挡、延迟、丢帧、物体位移、外部扰动
安全 约束违规、碰撞、险情、力/速度限位事件、保护停机
人工监督 干预次数、干预时点、恢复结果、操作员负担
Runtime Sensor-to-Action P50/P95/P99、抖动、Deadline Miss、显存、功耗、热降频
运营 可用率、每小时成功循环、维护、漂移、回滚频率

2026 年的 VLA 综述 将领域划分为组件、低层控制策略和高层任务规划器,并整理数据集、仿真器与基准。这种广度说明不能把所有系统压成一个排行榜。

重复试验并报告不确定性

物理试验有随机性且成本高。应公开试验次数、Seed 或随机顺序、置信区间、重置流程、操作员说明和被排除的运行。不同机器人、任务、成功定义或干预策略下的百分比不能直接比较。

区分基准泛化与真实部署

留出物体基准不能证明系统可以连续运行一个班次。部署还需要考察可用率、重启行为、标定漂移、机械磨损、网络故障、人员接近、材料变化,以及部分执行后的恢复。

把安全拆成多个测试轨道

语义拒绝、任务可行性、避碰、力限制和紧急响应是不同能力。模型可能拒绝危险指令,却生成不稳定轨迹;也可能平滑地朝错误目标移动。语义安全与物理安全必须分开评测。

让安全独立于学习策略

机器人模型输出会产生不可逆的物理影响,因此安全控制必须位于学习策略之外,并在策略错误、缓慢、不可用或被攻击时仍可强制执行。

flowchart TD V["VLA 候选动作"] --> K["运动学与工作空间检查"] K --> Q["关节、速度、力与碰撞限制"] Q --> W["看门狗与命令时效"] W --> C["经过认证或验证的控制路径"] C --> R["机器人执行"] H["人工急停与保护设备"] --> C X["违规或不确定"] --> S["安全停机或受控回退"] K --> X Q --> X W --> X

具体安全论证取决于应用与司法辖区。ISO 10218-1:2025 规定工业机器人安全要求,并明确区分机器人自身要求与 ISO 10218-2 覆盖的集成和应用要求。该标准不是 VLA 认证,而且排除了消费品、公众可接触服务、医疗、军事和航空等多个领域。

至少定义:

  • 关节、工作空间、速度、加速度、力与负载包络;
  • 适合工作单元的碰撞与隔离监控;
  • 陈旧、格式错误、越界与缺失命令的处理;
  • 独立急停和保护停机路径;
  • 高风险模式的人工授权;
  • 有边界的重试与恢复状态;
  • 不可变事件日志与事故复盘。

语言指令或模型置信度不能覆盖这些控制。

创建不可变发布 Manifest

模型、数据、机器人与安全配置共同组成一个可部署制品。

yaml
release_id: vla-cell-a-2026-08-09.1
base_checkpoint: sha256:...
adapter_checkpoint: sha256:...
training_dataset: sha256:...
evaluation_split: sha256:...
observation_schema: robot-observation-v3
action_schema: ee-delta-v2
normalization_stats: sha256:...
embodiment_revision: sha256:...
calibration_revision: sha256:...
runtime_image: sha256:...
hardware_profile: arm-x-gpu-y
control_hz: 20
safety_policy_revision: sha256:...
rollback_release: vla-cell-a-2026-07-14.3

即使权重没变,只要标定、动作归一化、控制器时序、相机位置或安全策略改变,就属于一次发布变更。

可运行的发布门禁

以下无第三方依赖的 Python 校验器对候选执行可配置的任务、安全、延迟和干预门禁。阈值来自应用风险与服务目标,程序不会虚构通用值。

python
from __future__ import annotations

import argparse
import json
from pathlib import Path
from typing import Any


REQUIRED_ARTIFACTS = {
    "base_checkpoint",
    "evaluation_split",
    "observation_schema",
    "action_schema",
    "normalization_stats",
    "embodiment_revision",
    "calibration_revision",
    "runtime_image",
    "safety_policy_revision",
    "rollback_release",
}


def is_number(value: Any) -> bool:
    return isinstance(value, (int, float)) and not isinstance(value, bool)


def validate(candidate: dict[str, Any]) -> list[str]:
    errors: list[str] = []
    artifacts = candidate.get("artifacts")
    metrics = candidate.get("metrics")
    gates = candidate.get("gates")
    if not isinstance(artifacts, dict):
        return ["artifacts must be an object"]
    if not isinstance(metrics, dict) or not isinstance(gates, dict):
        return ["metrics and gates must be objects"]

    missing = REQUIRED_ARTIFACTS - set(artifacts)
    if missing:
        errors.append(f"missing artifacts: {sorted(missing)}")
    for name in REQUIRED_ARTIFACTS & set(artifacts):
        if not isinstance(artifacts[name], str) or not artifacts[name]:
            errors.append(f"artifact {name} must be a non-empty string")

    for name, rule in gates.items():
        if name not in metrics:
            errors.append(f"missing metric: {name}")
            continue
        value = metrics[name]
        if not is_number(value):
            errors.append(f"metric {name} must be numeric")
            continue
        if not isinstance(rule, dict) or set(rule) != {"op", "value"}:
            errors.append(f"gate {name} needs op and value")
            continue
        op, limit = rule["op"], rule["value"]
        if op not in {"min", "max"} or not is_number(limit):
            errors.append(f"invalid gate: {name}")
            continue
        passed = value >= limit if op == "min" else value <= limit
        if not passed:
            errors.append(
                f"gate failed: {name} measured={value} {op}={limit}"
            )
    return errors


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("candidate", type=Path)
    args = parser.parse_args()
    try:
        value = json.loads(args.candidate.read_text(encoding="utf-8"))
    except (OSError, json.JSONDecodeError) as error:
        parser.error(str(error))
    if not isinstance(value, dict):
        parser.error("candidate root must be an object")
    errors = validate(value)
    if errors:
        for error in errors:
            print(f"ERROR: {error}")
        raise SystemExit(1)
    print(f"candidate passed: {args.candidate}")


if __name__ == "__main__":
    main()

运行:

bash
python vla_release_gate.py candidate.json

可配置门禁包括:关键切片任务验收率、最大碰撞或约束违规、最大人工干预率、最大 P95 Sensor-to-Action 延迟、最大 Deadline Miss,以及运行包络内的最小成功循环数。仿真通过不等于获准真机部署;它只是发布决策的一项输入。

按物理风险逐级灰度

只有前一阶段产生可审阅证据后,才能增加物理暴露。

  1. 离线回放:验证 Schema、归一化、动作范围和已知轨迹。
  2. 仿真:测试任务切片、扰动、依赖故障和确定性监控。
  3. 硬件在环:在不开放无限制运动的前提下验证 Runtime 接口与时序。
  4. 受保护单元试验:限制工作空间、速度、负载,并只允许授权操作员。
  5. 影子或建议模式:在系统允许时比较候选动作,但不执行。
  6. 窄范围灰度:只启用一个任务、机器人 Revision、材料集与运行包络。
  7. 受控扩展:质量、安全、干预、延迟与可用率持续满足门禁后再扩大。

回滚必须整体恢复模型权重、Adapter、归一化、标定、Runtime 与安全配置。若物理动作已经发生,还需做状态对账:确认物体、机器人和工作单元状态后才能继续。

常见失败模式

把模型演示当成系统评测

剪辑演示无法说明试验次数、重置、被排除失败、干预或运行包络。应要求协议、原始结果与故障分类。

比较不兼容的成功率

不同任务和机器人的成功百分比不是排行榜。候选必须在相同硬件、切分、控制器和验收定义下复现。

忽略动作接口

Checkpoint 兼容远远不够。坐标系、单位、动作时域、夹爪语义、控制频率与归一化都必须匹配。

让策略承担全部安全论证

训练数据与语义拒绝不能替代确定性物理限位和应用风险评估。学习策略只是受约束系统中的一个组件。

只记录成功 Episode

缺少失败、人工干预、保护停机和未知结果时,下一轮训练会放大幸存者偏差并隐藏恢复缺口。

常见问题

每个 VLA 都是机器人基础模型吗?

不一定。VLA 描述输入输出家族,“基础模型”则隐含在有意义范围内复用或适配的证据。只针对一台固定机器人与任务训练的 VLA 仍可有价值,但不能据此证明广泛迁移。

动作 Token 和 Flow Matching 哪个更好?

没有通用答案。Token 方法复用自回归建模,但会离散动作;Flow 与扩散方法建模连续动作块,却增加求解器、时域与 Runtime 选择。必须在同一任务、机器人、控制器、延迟预算和故障策略下比较。

Open X-Embodiment 数据可以直接运行在任何机器人上吗?

不可以。该数据集标准化了异构机器人数据访问,但目标机器人仍需兼容观测、动作映射、标定、时序和适配。RT-X 实验中的正迁移不能保证迁移到任意本体。

最小可用的 VLA 评测包含什么?

至少需要固定 Checkpoint 和切分、重复干净条件试验、留出物体/场景/指令切片、Runtime 接口检查、故障码、人工干预日志、尾延迟、确定性安全约束测试,以及专用策略或上一版本基线。

什么情况下应该继续使用经典或专用策略?

当任务稳定、可精确定义、安全关键、数据不足,或现有方案已满足可靠性与节拍时,应保留专用策略。只有迁移或适配收益通过完整系统评测,通用模型才值得引入。

总结

机器人基础模型和 VLA 可以减少任务专用策略工程,但价值始终有条件。系统应围绕显式观测与动作契约、可治理跨本体数据、防泄漏评测、独立安全层、不可变发布和逐级物理风险灰度构建。生产问题不是“哪个模型最聪明”,而是“哪个完整系统能在这台机器人上满足任务、安全、时序、干预与回滚契约”。

参考资料