HOST 开源:机器人如何从 29 秒人类视频中一次学会新技能

2026-08-03 59 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

让机器人学习新动作,传统路线往往需要遥操作采集、反复示范、数据清洗和策略训练。自变量机器人(X SQUARE ROBOT)联合北京理工大学、清华大学发布的 HOST(Human-to-robot One-Shot Skill AcquisiTion)框架,把入口换成了更自然的人类操作视频:给机器人观看一次示范,摘要披露的案例在 29 秒后即可在真实世界复现技能。论文、代码和权重同时开源,也让这条路线从实验结果变成了可检查、可改造的工程对象。

真正困难的不是“看见”,而是把动作映射到机器人

人类视频和机器人执行之间存在明显的形态差异。人的手指、手腕和视角,与机械臂的关节、夹爪和相机坐标系并不一致。视频里一句直观的“拿起物体”,落到机器人系统中至少涉及目标识别、动作阶段划分、空间位置估计、末端执行器轨迹以及抓取力度等问题。

因此,HOST 的核心价值不能简单理解为视频模仿。根据框架名称和发布摘要,更准确的工程视角是:它试图完成从人类示范到机器人技能的一次性获取,并把结果带到真实世界执行。至于具体视觉编码器、动作表征和控制模块如何实现,应以开源论文与仓库配置为准,不能仅凭摘要推断。

“一次学习”也不等于机器人获得了无限泛化能力。29 秒是公开案例中的示范时长,不应直接外推为所有任务的固定训练时间。物体遮挡、相机变化、机器人本体差异、柔性材料和接触密集型任务,都可能显著提高复现难度。

开源带来的关键变化:可以测量迁移成本

代码和权重开放后,团队可以把注意力从“效果视频是否可信”转向更具体的问题:同一段示范能否在不同物体位置下执行?换一台机械臂需要改哪些标定和控制接口?失败发生在感知、规划还是接触阶段?

评估这类系统时,单一成功率并不够。建议至少记录以下指标:

  • 任务成功率:机器人是否完成了最终目标。
  • 阶段成功率:接近、抓取、移动、放置分别是否成功。
  • 执行时延:观看示范、生成技能和实际执行各花多长时间。
  • 扰动恢复能力:物体位置变化或抓取滑移后能否继续。
  • 人工介入次数:一次成功背后是否需要重新标定或挑选示范。
  • 安全事件:是否触发碰撞、越界、急停或力矩限制。

这些数据能区分“偶然复现一次”和“可以进入工作流”的差别。尤其在真实机器人上,失败样本通常比成功视频更有工程价值。

可以这样搭一个最小实验外壳

下面不是 HOST 官方 API,而是一个可直接运行、便于改造的实验记录器。它假设你已经通过 HOST 或其他策略模块得到了一次技能执行结果,用统一 JSON 记录示范、机器人配置、阶段结果和安全状态。之后只需把 run_skill 替换为仓库提供的推理入口。

# save as evaluate_one_shot.py
from __future__ import annotations

import argparse
import json
import time
from dataclasses import asdict, dataclass
from pathlib import Path


@dataclass
class RunResult:
    demo_video: str
    robot: str
    skill: str
    success: bool
    stage_results: dict[str, bool]
    inference_seconds: float
    safety_stop: bool
    notes: str


def run_skill(video: Path, robot: str, skill: str) -> RunResult:
    # Assumption: replace this block with HOST's actual inference/control API.
    started = time.perf_counter()
    time.sleep(0.1)
    stages = {
        "observe": video.exists(),
        "approach": True,
        "grasp": True,
        "place": True,
    }
    return RunResult(
        demo_video=str(video),
        robot=robot,
        skill=skill,
        success=all(stages.values()),
        stage_results=stages,
        inference_seconds=round(time.perf_counter() - started, 3),
        safety_stop=False,
        notes="Mock execution; connect the official model and robot adapter.",
    )


def main() -> None:
    parser = argparse.ArgumentParser()
    parser.add_argument("video", type=Path)
    parser.add_argument("--robot", default="lab-arm-01")
    parser.add_argument("--skill", default="pick-and-place")
    parser.add_argument("--output", type=Path, default=Path("run.json"))
    args = parser.parse_args()

    result = run_skill(args.video, args.robot, args.skill)
    args.output.write_text(
        json.dumps(asdict(result), ensure_ascii=False, indent=2),
        encoding="utf-8",
    )
    print(args.output.resolve())


if __name__ == "__main__":
    main()

准备任意测试视频后运行:

python evaluate_one_shot.py demo.mp4 \
  --robot lab-arm-01 \
  --skill pick-and-place \
  --output results/run-001.json

接入真实设备时,应把模型推理与底层控制隔离。策略层输出目标位姿或动作序列,机器人适配层负责坐标变换、速度限制、碰撞检测和急停。不要让研究模型直接绕过硬件安全控制器发送无约束关节命令。

从桌面复现到稳定部署

采用 HOST 这类一次性技能获取框架,适合从边界清楚、风险较低的任务开始,例如固定工作台上的取放、分类或简单工具操作。第一轮实验应固定相机、光照、背景和机器人型号,只改变一个因素,并保存每次运行的视频与结构化日志。

进入更开放的环境前,可以用一份简短清单把风险挡在执行之前:确认示范视频完整展示关键接触过程;验证相机与机器人坐标标定;设置速度、力矩和工作空间限制;在无人身接触的隔离区域测试;分别统计原始场景和扰动场景的成功率;保留失败轨迹用于回放,而不是只保存成功案例。

HOST 值得关注的地方,不只是“29 秒学会技能”这个结果,而是它把人类自然示范、一次性技能获取和真实机器人执行连成了一条开源链路。对工程团队而言,下一步不是追求演示数量,而是验证这条链路在自己的机器人、任务和安全约束下能否重复工作。


相关推荐