TrajBooster——通过“轨迹中心学习”提升人形全身操作能力的VLA:把智元轮式数据迁移到宇树G1上,先二次预训练后微调(免去动捕)

TrajBooster:跨形态迁移提升人形操作

前言

昨天25年10.19,我个人在朋友圈说道,让双足人形干活,比让其跳舞更难(行内人都懂的)

  • 上周我司『七月在线』完成了对机器人口头指定目的地,然后机器人自主导航到目的地,且过程中可以避开突然出现的人,最后通过机器视觉理解周围的环境

    人形自主导航 第4个版本(可口头指定目的地、可绕开障碍)

  • ​本周,我们会让人形最后走到操作台前,完成简单的桌面清理任务
    如此,集齐『语音对话 自主导航 动态避障 识别环境 灵巧操作』等一系列技能

    且所有一切全部自主,无任何摇操,无任何人工干预
    且很快,我们会让它干越来越多的活,让它的干活技能开始起飞,从而让大家开始感受一系列震撼,​让机器人干好活,让我们更兴奋

当然了,过程中 除了我司自行独立研发之外,也会关注到市面上其他同行的一些工作,特别是行走-操作类的

  1. 而本文所要解读的TrajBooster(来自浙大和西湖大学等单位),在上个月便已关注到了,只是当时忙于我司内部的开发,没时间去细看,近期有点时间了,可以仔细了解下
  2. 且我在解读过程中,加了大量的说明、解释——你如果浮躁的走马观花 你体会不到我解读的价值 可能误以为和原论文 没啥大的不一样,但如果你静下心来仔细阅读 你会发现到处都是我为你“阅读效率”着想的种种细节
    就为了让大家一目了然(读原论文是一种优雅体验,而读本解读则是一种轻松惬意)
    且综合归纳了散落在各处的细节

第一部分 TrajBooster:通过轨迹中心学习提升人形机器人全身操作能力

1.1 引言与相关工作

1.1.1 引言

如TrajBooster原论文所说,近期的进展显著推动了人形操作技术的发展 [比如1-Being-0、2-Egovla、3-Gr00t n1、4-Humanoid policy˜ human policy、5-Agibot world colosseo]

在此基础上,视觉-语言-动作(VLA)模型使人形机器人能够自主且更可靠地执行各种家庭任务,并提升了其泛化能力

其中,轮式仿人机器人在需要全身协调动作的家务任务中表现尤为出色,例如蹲下和跨越不同高度的伸手动作,这突显了真实家庭环境中对实用作业范围和灵巧性的需求

  • 来自 Agibot-World Beta 数据集 [5] 的证据显示

    ​末端执行器的轨迹集中在0.2–1.2 米之间『见图2,Agibot-World Beta数据集中Z-X平面上的手部位置热力图。利用核密度估计(KDE)可视化左右手分布。X轴正方向与机器人前进方向一致,Z轴正方向与重力相反(向上)』,进一步强调了日常家务任务需要在超越桌面范围的广阔工作空间内进行多样化操作

  • 相比之下,双足仿人机器人在操作时必须用上半身进行操控,同时用下半身保持动态平衡,这使得大范围的全身操作变得尤为具有挑战性

与此同时,先前的 VLA 研究主要集中在

  • 复杂环境中的行走 [6-Humanoidvla,7-Leverb: Humanoid whole-body control with latent vision-language instruction]
  • 或桌面操作 [2-Egovla、3-Gr00t n1]

因此存在一个关键空白:如何实现双足仿人机器人的大范围全身操作,而实现这一能力需要大规模的演示,但数据收集仍然是瓶颈

  1. 而现有的远程操作流程需要昂贵的基础设施,并且专家操作员通常只能生成规模较小、在不同场景和任务间多样性有限的数据集
  2. 因此,视觉语言动作模型(VLA)在后训练阶段难以适应新型人形机器人平台的动作空间。虽然在异构机器人语料库上进行预训练有所帮助,但这无法替代高质量、与人形机器人高度相关且覆盖全面的全身演示数据——说白了,就是不同本体的数据做预训练有用,但在同等数量的前提下,训练效果毕竟不如当前本体的实采数据

好在来自1 Zhejiang University, 2 Westlake University, 3 Shanghai Jiao Tong University, 4 Shanghai Innovation Institute 的研究者提出了TrajBooster来解决这个问题,这是一种跨形态框架(见图1)

具体而言,其能够利用末端执行器轨迹的形态无关特性,将演示从轮式机器人迁移到双足人形机器人,从而缓解双足VLA微调过程中的数据稀缺问题,并提升VLA动作空间的理解能力,及全身操作任务泛化能力

他们的关键见解在于,尽管形态结构存在差异,末端执行器轨迹可以作为共享接口,弥合不同实体之间的关节空间差距。从而可以通过利用轮式人形机器人Agibot G1的大规模数据,通过真实-仿真-真实的流程,间接提升了对双足Unitree G1的VLA训练

该TrajBooster框架包含以下三个步骤:

  1. 真实轨迹提取
    该过程首先从源机器人中提取末端执行器的轨迹
    具体而言,TrajBooster 并不是将全身动作直接映射到目标人形机器人,而是利用双臂末端执行器的 6D 坐标作为目标,使得在 Isaac Gym 仿真器中的重定向模型(retargeting model)能够通过跟踪该目标,实现全身动作的重定向
  2. 仿真中的重定向
    重定向模型采用作者经过启发式增强的统一在线DAgger算法,在目标人形机器人Unitree G1上进行训练,使其利用全身控制跟踪这些参考轨迹
    the retargeting model istrained with our heuristic-enhanced harmonized online DAg-ger algorithm for the target humanoid Unitree G1 to track the sereference trajectories using whole-body control
    ————
    在此过程中,人形机器人学习协调其各关节,使末端执行器能够跟随重定向后的目标,从而将低维参考信号有效映射为可行的全身高维动作
    该阶段生成了大量与真实世界目标人形机器人形态兼容的动作数据
  3. 先二次预训练,后微调
    利用上述第二步 新生成的数据,TrajBooster 构建了异构三元组,形式为⟨source vision, source language, target action,将感知输入与适用于人形机器人的行为相连接

    由此生成的合成数据集随后用于对已有的VLA 模型进行后(二次)预训练
    ——
    接着,仅需额外10分钟的真实遥操作数据,即⟨target vision,target language, target action⟩,即可对后预训练的 VLA 进行微调,并部署在 Unitree G1 上,覆盖广泛的全身操作任务

1.1.2 相关工作

首先,对于人形机器人的全身控制

  1. 近年来,现实世界中人形机器人全身控制的研究取得了显著进展,许多工作[8–15]主要通过远程操作的方法推动了该领域的发展
    8-Twist
    9-Clone
    10-H2O
    11-Omnih2o
    12-Exbody
    13-A unified and general humanoid whole-body controller for
    fine-grained locomotion
    14-Mobile-television
    15-Unleashing humanoid reaching potential via real-world-ready skill space


    诸如Humanoid-VLA[6]和Leverb[7]等研究通过采用VLA模型生成全身动作,探索了自主策略
    然而,这些工作主要集中在粗粒度的控制上,例如坐下、挥手或行走等动作

    相比之下,关于人形机器人操作任务的研究已探索通过视觉运动策略 [4,16-DP3] 或 VLA 模型 [2,3] 进行动作生成,但这些研究大多局限于桌面场景
    这种设定未能充分利用人形机器人下肢的运动能力,从而限制了机器人的操作空间
  2. 尽管 Homie[17] 通过其视觉运动控制策略在解决这一限制方面取得了显著进展,但其实用性仍受限于需要为每个任务单独训练策略,因此在多样化任务场景中的可扩展性有限

    为克服这一局限性,TrajBooster利用统一的 VLA 模型,使双足人形机器人在现实环境中能够实现多任务的全身操作,展现出在广泛操作高度范围内的多样化操作能力

其次,对于跨体态学习

  1. 跨体态学习旨在实现不同形态代理之间的知识迁移。多种方法通过修复、分割或基于物理的渲染[18–21]来缓解感知差异,有效对齐观测结果,但这些方法仍局限于感知层面
    18-Ag2manip
    19-Egomimic
    20-H2r: A human-to-robot data augmentation for robot pretraining from videos
    21-Masquerade: Learning from in-the-wild human videos using data-editing


    超越感知层面,研究者们开始探索体态无关的动作抽象

    潜在动作表示
    5-Agibot world colosseo
    22-Latent action pretraining from videos
    23-Igor: Image-goal representations are the atomic control units for foundation models in
    embodied ai
    24-villa-x:Enhancing latent action modeling in vision-languageaction models

    提供了粗粒度、隐式的编码方式

    而基于轨迹的方法
    2-Egovla
    25-Dexmv
    26-H-rdt: Human manipulation enhanced bimanual robotic manipulation

    则将操作技能提取为显式形式
    例如,DexMV[25]将人类三维手势映射到机器人轨迹
    尽管这些方法在灵巧的手-物体交互方面表现有效,但尚无法扩展到全身动作迁移
  2. 近期如[27-Umi on legs: Making manipulation policies mobile with manipulation-centric whole-body controllers]的研究可以生成全身动作,然而其适用性受限于四足机器人工作空间的配置
    本研究针对上述局限性,首次将该方法应用于类人机器人场景,利用执行器空间的6D位姿重映射,跨多种双臂机器人演示,实现了向目标类人机器人的跨体型迁移,从而达成了跨体型的双足类人机器人操作,并实现了广泛的全身工作空间覆盖

1.2 TrajBooster的完整方法:先提取真实轨迹,后仿真中重定向,之后二次预训练、微调

TrajBooster,是一个真实-到-仿真-到-真实的流程,如图1所示

​在本节中,作者依次描述

  1. 如何从现有数据集中提取真实轨迹以用于重定向
  2. 介绍重定向模型的架构和策略学习算法
    then introduce the retargeting model architecture and policy learning algorithm
  3. 详细说明通过两步后训练流程对预训练的 VLA 进行适应:
    i)利用在仿真中收集的重定向全身操作数据进行后预训练,即二次预训练
    ii)利用在真实环境中少量遥操作数据进行后训练,即微调

1.2.1 实际轨迹提取

作者使用 Agibot-World beta 数据集 [5] 的操作数据作为真实机器人数据源。该数据集包含超过一百万条真实机器人轨迹,包括多视角视觉信息、语言指令和 6D 末端执行器位姿

  1. 然而,基于末端执行器位置和姿态轨迹的直接迁移并不适用,因为 Agibot 和Unitree G1 之间的工作空间存在差异
    例如,Agibot 的机械臂完全伸展时臂展可达 1.8 米,而Unitree G1 的臂展仅为 1.2 米
  2. 为了解决这一问题,作者将Agibot 数据集的轨迹映射到Unitree 官方G1 操作数据集[28-unitreerobotics/G1 Dataset],后者包含7 个桌面级任务的2,093 个片段
    ————
    具体而言,作者通过基于G1 数据进行z-score 归一化,将Agibot 数据的x 轴与G1 对齐,使用与机械臂长度成比例的缩放因子\beta=0.6667对y 轴进行缩放,并将z 轴裁剪到[0.15, 1.25] 的安全范围内

1.2.2 仿真中的重定向(retargeting_model):涉及模型架构、分层模型训练

第一,对于模型架构

鉴于Agibot-World数据集涵盖了大量家务任务,其中z轴坐标主要分布在0.2–1.2米之间(见图2)

​因此,要实现成功的全身操作,需要下半身动作的协调配合(如下蹲)

为此,作者提出了一种用于全身操作重定向的复合分层模型(见下图图3)

​具体而言(原论文中阐述的顺序为手臂策略、工作者策略、管理者策略,而我个人认为把阐述顺序改为:手臂策略、管理者策略、工作者策略,会更一目了然且与上图更匹配,故我更改了阐述的顺序):

  • 手臂策略(PIK)
    通过Pinocchio [29-The pinocchio c++ library: A fast and flexible implementation of rigid body dynamics algorithms and their analytical derivatives]中的闭环逆运动学(CLIK)计算目标关节角度
    即,Computes target joint angles using Closed-loop Inverse Kinematics (CLIK) via Pinocchio

    \mathbf{a}_{t}^{\mathrm{arm}}=P_{\mathrm{IK}}\left(\mathbf{T}_{B E}\right)
    其中 \mathbf{T}_{B E} 表示手腕相对于基坐标系的位置姿态
  • 管理者策略(高层指令P_{\text {manager }} )
    根据手腕姿态生成下半身指令
    \left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)=P_{\text {manager }}\left(\mathbf{T}_{B E}\right)
  • 工作者策略(低层控制P_{\text {worker }})
    一种按照[17-Homie] 训练的目标条件强化学习策略,采用上半身运动课程以增强对干扰的鲁棒性『即,A goal-conditioned RL policytrained following [17] with upper-body motion curriculum for enhanced disturbance robustness

    它为12 自由度下肢输出目标关节位置:
    \mathbf{a}_{t}^{\text {leg }}=P_{\text {worker }}\left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)
    其中,v_{x}, v_{y}, v_{\text {yaw }} 控制前向/侧向/偏航速度,h 设置躯干高度

注意了!! 为方便大家一目了然,我july再进一步解释说明下:控制机器人全身就两块,一块手臂、一块腿部

  1. 手臂,由\mathbf{a}_{t}^{\mathrm{arm}}=P_{\mathrm{IK}}\left(\mathbf{T}_{B E}\right)控制、驱动
  2. 腿部,因为P_{\text {manager }}根据手腕姿态\mathbf{T}_{B E}生成下半身指令\left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)P_{\text {worker }}拿到P_{\text {manager }}生成的下半身指令\left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)后,去驱动机器人腿部行走,即\mathbf{a}_{t}^{\text {leg }}=P_{\text {worker }}\left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)

故,最终,该复合分层模型 H 集成了以下组件

\left(\mathbf{a}_{t}^{\text {leg }}, \mathbf{a}_{t}^{\text {arm }}\right)=H\left(\mathbf{T}_{B E}\right)=\left(P_{\text {worker }}\left(P_{\text {manager }}\left(\mathbf{T}_{B E}\right)\right), P_{\mathrm{IK}}\left(\mathbf{T}_{B E}\right)\right)

该模型以末端执行器相对于机器人基座的位姿T_{BE} 作为输入,输出通过 PD 控制器执行的 Unitree G1 关节指令

第二,对于分层模型训练(主要是Pmanager)

分层模型训练包括两个阶段:首先进行P_{\text {worker }} 训练,然后通过基于启发式的在线学习(算法1)进行P_{\text {manager }} 训练

P_{\text {manager }} 训练的关键方面如下:

  • 种子轨迹采集
    在 MuJoCo 中,将 Unitree G1 初始化为站立状态,重放包含 2,093 个片段的上肢运动数据集 [28],并记录生成的轨迹
  • 轨迹增强
    对种子轨迹应用 PCHIP(分段三次 Hermite 插值多项式)插值方法,生成高度变化范围为 [0.15m,1.25m] 的数据,从而实现不同高度下的全身操作

  • 启发式目标指令(\mathrm{a}^{*}) 生成
    启发式真实高度目标h^{*}由种子轨迹的PCHIP 插值高度得到

    ​启发式速度指令\left(v_{x}^{*}, v_{y}^{*}, v_{\text {yaw }}^{*}\right)根据Isaac Gym 中类人机器人基座相对于其初始位置的位移计算,假设规划时域为1 秒

  • 统一的在线DAgger
    为简洁起见,P_{\text {manager }} 和状态s_{t}(表示TBE)分别记作P_{m}s_{t}
    在每次迭代中,Pm 在Isaac Gym 中的N 个并行环境上执行一次T 步的rollout(T = 50)

    ——
    对的,如上图所示,​损失被最小化为
    \mathcal{L}_{\text {rollout }}=\frac{1}{N \cdot T} \sum_{n=1}^{N} \sum_{t=1}^{T} \mathcal{L}\left(P_{m}\left(s_{t}\right), \mathbf{a}_{\mathbf{t}}^{*}\right)
  • 另,作者为缓解在持续学习中出现的灾难性遗忘问题,他们实现了一种协调的数据集聚合(DAgger)策略

    ​具体而言,与标准的 DAgger [30-A reduction of imitation learning and structured prediction to no-regret online learning] 不同「标准 DAgger 在每次迭代时都会聚合数据
    ————
    作者通过在聚合过程中进行子采样来平衡数据效率和计算效率——
    具体来说,他们每 M = 10 次迭代才纳入新的演示数据
    \mathcal{D} \leftarrow \mathcal{D} \cup\left\{\left(s_{t}, \mathbf{a}_{\mathbf{t}}^{*}\right) \mid t \in[1, T]\right\}

    随后,作者对聚合后的数据集损失进行最小化:
    \mathcal{L}_{\mathrm{DA}}=\sum_{\left(s_{t}, \mathbf{a}_{\mathbf{t}}^{*}\right) \in \mathcal{D}} \mathcal{L}\left(P_{m}\left(s_{t}\right), \mathbf{a}_{\mathbf{t}}^{*}\right)

    关键的是,该流程利用了在实际部署中无法获得的特权信息。具体而言,在仿真中,作者可以获取与当前目标6D操作轨迹对应的躯干高度,以及人形机器人基座相对于相应身体位置的位移。这些特权信息使得能够高效生成启发式目标指令\mathbf{a}^{*},从而促进了P_{\text {manager }} 的有效训练

1.2.3 二次预训练:使用重定向数据的后预训练

后(二次)预训练(即Post-pre-training,简称PPT)是一种介于预训练和后训练之间的中间阶段,在大语言模型(LLMs)[31,32]和视觉-语言模型(VLMs)[33-Post-pre-training for modality alignment in visionlanguage foundation models]中被广泛采用——其实就是二次预训练

类似地,对于VLA,作者预计该方法也将提升模型对下游任务的快速适应能力,并增强其对动作空间的适应性和理解能力,如图4所示

  1. 在本研究中,作者通过整合重定向的动作数据、语言指令以及来自原始 Agibot-World 数据集的视觉观测,构建了多模态数据三元组
    即本文开头提到的 ⟨source vision, source language, target action

    这些三元组被用于对预训练的 GR00T N1.5 模型 [3] 进行二次预训练

  2. 后预训练阶段采用与[3] 中描述的后训练阶段相同的目标函数。给定一个真实动作片段A_{t} 和采样噪声\varepsilon,作者构造一个加噪动作片段:A_{t}^{\tau}=\tau A_{t}+(1-\tau) \varepsilon,其中\tau \in[0,1]表示流匹配时间步

    模型V_{\theta}\left(\phi_{t}, A_{t}^{\tau}, q_{t}\right)通过:最小化流匹配损失,预测去噪向量场\varepsilon-A_{t}定义为公式8」:

    \mathcal{L}_{\mathrm{fm}}(\theta)=\mathbb{E}_{\tau}\left[\left\|V_{\theta}\left(\phi_{t}, A_{t}^{\tau}, q_{t}\right)-\left(\varepsilon-A_{t}\right)\right\|^{2}\right]

    其中,\phi_{t}表示视觉-语言token嵌入,q_{t} 编码UnitreeG1的全身关节状态,\varepsilon为从N(0,I)采样的高斯噪声,期望值在\tau服从[0,1]的均匀分布下取

在推理过程中,作者以4 步去噪生成跨越16 个时间步、频率为20Hz 的动作片段。每个片段包含:双臂和双手的关节位置指令,以及用于P_{\text {worker }} 模块的下半身控制指令\left(v_{x}, v_{y}, v_{\text {yaw }}, h\right)使VLA 模型能够实现对人形机器人的全身控制

即如原论文中所讲的,During inference, we generate action chunks that span16 timesteps at 20Hz using 4 denoising steps.

Each chunk contains joint position commands for both arms and hands,along with lower-body control commands (vx,vy,vyaw,h) for the Pworker module, enabling the VLA model to achieve whole-body control of the humanoid.

1.2.4 后训练(即微调):先遥操采集数据(上半身VR控制、下半身遥控器控制),后微调VLA

  • 遥操作数据采集
    \rightarrow  对于下肢动作
    作者采用与P_{\text {worker }} 相同的训练方法来生成下肢动作
    然而,与分层模型H 不同,P_{\text {worker }} 的控制指令来源于人类操作员通过遥控操纵杆进行操作

    \rightarrow  对于上肢动作(包括手臂和手部动作)
    作者采用文献[34-Opentelevision] 中提出的基于Apple Vision Pro 的遥操作框架来实现运动学映射
    且使用两个手腕RGB 相机(左侧和右侧)以及一个头部RGB 相机收集视觉数据
  • 在目标人形机器人上微调VLA
    收集到的远程操作数据被用于对已预训练的VLA模型进行后续训练,通过最小化公式8中定义的流匹配损失来实现
    \mathcal{L}_{\mathrm{fm}}(\theta)=\mathbb{E}_{\tau}\left[\left\|V_{\theta}\left(\phi_{t}, A_{t}^{\tau}, q_{t}\right)-\left(\varepsilon-A_{t}\right)\right\|^{2}\right]

1.3 实验

如TrajBooster原论文所说,作者的实验设计针对4个主要问题展开:

  1. Q1:分层训练框架(结合了协调化的在线DAgger)在类人轨迹重定向任务中是如何优于基线方法的?
  2. Q2:在微调过程中,用模拟重定向动作替换动作数据,是否能加速对真实环境中类人动作空间的适应?
    言外之意,是指二次预训练是否利好或加速:“微调的效果”
  3. Q3:后预训练是否能够增强物体在分布外位置上的轨迹泛化能力?
  4. Q4:后预训练能否在真实遥操作任务中为未见过的操作技能解锁零样本能力?

1.3.1 重定向模型的评估(针对Q1)

  • 基线
    分层模型使用Harmonized Online DAgger 进行训练
    为了验证该方法在跟踪模型训练中的有效性和效率,作者与多个基线方法进行了比较:基于奖励的PPO、标准DAgger、在线学习(M = 1 且不使用DAgger)、标准在线DAgger(M = 1 且使用DAgger)
  • 实现细节
    所有实验均使用个并行环境,训练200次迭代,PPO因其额外的价值模型训练,采用800次迭代。训练与推理均在单块RTX 4090 GPU和Intel Core i9-14900K CPU上完成
  • 卓越的跟踪性能
    通过仿真评估跟踪性能,计算Unitree G1手腕轨迹与目标轨迹之间的位置平均绝对误差(MAE, 单位cm)和旋转误差(单位度)

    如表I所示

    ​作者的协调化在线DAgger在实现运动-操作跟踪能力(见图5)的同时,具备更低的存储开销和更高的学习效率

1.3.2 使用后预训练数据集在VLA上的评估:先后针对Q2、Q3、Q4

首先,对于数据集

  1. 对于Agibot-World beta 数据集中的每个任务,随机采样了10 个片段。涉及灵巧手和并联夹爪的任务分别进行采样,每种末端执行器类型各选取10 个片段。对于包含少于10 个片段的任务,纳入所有有效片段,而存在帧错误的片段则被系统性地排除

    该流程最终得到一个包含176 个不同任务和1960 个片段的数据集,约对应35小时的模拟交互
  2. 随后,采用上文“1.2.1 实际轨迹提取”「对应于原论文III-A」中描述的方法对这些数据进行了预处理

    借助Isaac Gym 的环境并行性,作者在所有片段上于数十分钟内完成了分层身体运动重定向。在这些重定向后的身体运动基础上,作者实现了末端执行器映射:Agibot-World 使用夹爪(85 % 轨迹)和手(15 %),因此将拇指/食指的张开映射到夹爪空间;对于目标末端执行器Unitree Dex-3(7 自由度手),预先收集的张开/闭合关节位置作为重定向目标
    重定向后的Unitree G1 运动替换了原始驱动命令,生成了多模态(动作、语言、视觉)数据三元组

    为了用于后续后训练-即微调,作者使用Unitree G1 人形机器人在四种不同高度配置下收集了28 个真实世界全身操作片段,如图6 所示。该数据集约包含10 分钟的操作时间​​​​​​

其次,对于baseline

作者建立未经过预训练后训练的 VLAs 作为基准:模型直接在预训练的 GR00T N1.5 上进行 3000 步和 10000 步的后训练。这些模型与作者经过 3000 步二次预训练且后训练的 VLA 进行比较

最后,对于实现细节

  • 后预训练阶段使用了重新定向的动作-视觉-语言三元组,在两块A100 80GB GPU上进行(批量大小=128,训练60K步)
  • 后训练阶段则采用了真实世界的全身操控数据,在单块A100 GPU上进行(批量大小=16,训练3K步)

同时,从GR00T N1.5检查点出发(仅使用真实世界数据)训练了两个控制模型:一个3K步版本和一个10K步版本,均在单块A100 GPU上以批量大小16进行训练

1.3.2.1 二次预训练加速适应类人动作空间(针对Q2)

与LLM和VLM不同,TrajBooster中的VLA模型在预训练后需要解决仿真到现实的差距以及视觉不一致性

为了评估他们的预训练后方法是否确实有助于加速下游微调适应,就像其在视觉语言模型(VLMs)和语言模型(LLMs)中的应用一样,作者在4个真实世界任务上对这些模型进行了评估,每个任务进行了 10 次实验

  • 结果(见表II)显示

    ​当目标物体位于域内(即与真实世界数据集中的位置一致)时,经过后预训练并仅进行3K步后训练的模型,其成功率高于仅在真实世界数据上训练10K步的模型
    说白了,就是二次预训练 + 微调的效果,好于 只单纯微调的效果
  • 值得注意的是,仅在真实世界数据上训练3K步的模型未能有效学习该任务;在执行过程中,该模型仅在目标附近表现出振荡行为,并未表现出抓取物体的意图
1.3.2.2 二次预训练可增强轨迹泛化能力、避免过度拟合(针对Q3)

虽然上一节(对应于原论文第IV-B1节)展示了预训练后可以加速下游后训练的收敛速度,但作者还进一步探究了其是否提升了模型对目标人形动作空间的理解能力,从而改善轨迹泛化表现

为此,作者通过重新定位目标物体来增加任务难度。在Pick Mickey Mouse任务中,作者将米老鼠放置在遥操作过程中未曾出现过的位置,并进行了10次实验

未进行二次预训练的模型成功率下降这一观察结果表明,该模型倾向于过度拟合在后训练期间遇到的特定轨迹

  1. 为验证这一假设,作者记录了在执行Pick Mickey Mouse任务时,右臂的联合轨迹,这些轨迹分别由“经过预训练+3K步后训练模型”和“仅在真实环境下训练10K步的模型”生成。采用FastDTW算法[35]计算这些生成轨迹与相应真实遥操作数据之间的相似性
  2. 未经过预训练的模型表现出较小的DTW距离,如表III所示

    表明其对记忆的遥操作轨迹的复现更为接近。这种记忆偏向解释了其对空间变化的鲁棒性较差
    对Unitree G1执行过程的定性分析(见图7)进一步证实了这一解释

1.3.2.3 二次预训练是否能提升泛化能力:解锁零样本技能泛化(针对Q4)

除了提升动作空间理解能力外,作者还研究了后预训练阶段是否能够提升任务泛化能力,使模型能够执行在遥操作数据集中未出现过的技能

  1. 模型在Pass the Water 任务上进行了评估,该任务包含在后预训练阶段,但未包含在真实世界的遥操作数据集中
  2. 值得注意的是,如图8所示,模型在 Unitree G1机器人上以零样本方式成功完成了该任务,展现了所获得的泛化能力​

1.4 结论与局限

本文针对在训练用于双足人形机器人全身操作的视觉-语言-动作(VLA)模型时数据稀缺的问题进行了研究。作者提出了 TrajBooster,这是一种以末端执行器轨迹为驱动的真实-仿真-真实流程,旨在提升跨形态VLA 的性能

  1. 通过整合统一的在线 DAgger,他们的方法结合了特权仿真器信息和启发式方法,有效地训练了一个分层模型,实现了大规模异构机器人数据的重定向
  2. 得益于二次预训练,使得在后期训练阶段,仅需 10 分钟的远程操作数据,TrajBooster 即可实现对新动作空间的快速适应、强大的轨迹泛化能力,以及对未见场景的零样本迁移

当然了,作为对双足人形机器人全身操控的VLA(视觉-力觉辅助)早期研究,以下局限性凸显出未来改进的关键方向:

  1. 末端执行器的限制
    由于精度有限,Unitree Dex-3仅能完成简单的抓取和放置任务。未来的工作将采用具备触觉感知的灵巧手,以实现更高级的操作
  2. 动作与视觉的一致性
    作者的方法仅替换了动作空间,同时保留了视觉输入。未来他们将探索视觉观测中的具身对齐,以提升感知与动作的一致性
  3. 行走操作数据稀缺
    缺乏大规模的行走操作数据使作者的研究主要局限于静态任务
    未来的工作将把该框架扩展到更丰富的移动场景中
  4. 扩展性限制
    本研究的实验受到数据集规模和计算资源的限制。作者计划未来引入更多异构数据,超越Agibot G1机器人和Agibot-World数据集,以实现更广泛的迁移

第二部分 从OpenWBC:TrajBooster的前置工作

2.1 OpenWBC(组合homie + xr):让宇树G1移动抓娃娃

事实上,在TrajBooster之前,该作者/团队还做了一个工作,即OpenWBC

简言之,OpenWBC实现了对 Unitree G1 机器人的全身控制:使用 Apple Vision Pro 结合 avp_teleoperate 控制机器人上半身,然后使用 OpenHomie 算法控制下半身运动,同时支持全身数据采集功能

具体而言,如作者所说

  1. 起初是这学期具身课程有机会使用宇树G1做个project,看了很多vla工作,想搞一波人形mobile manipulation,本来想follow ailab的homie方案收数据训
    详见此文《HOMIE——遥操类似ALOHA主从臂的外骨骼驾驶舱收集数据:通过上肢模仿学习和全身控制RL训练自主策略
    但是由于没有外骨骼,于是他们便结合avp_telepelation这个上肢遥操的repo魔改,踩了各种坑终于调通
  2. 处理思路和OpenWBT 近似,但实现起来更加简洁高效,即采集数据时
    上半身通过 VR 操控(avp),下半身通过遥控器操控,avp获取的上肢动作会整合到homie里
    由于基于avp_teleoperate的环境进行开发,故支持apple vision pro, pico等vr遥操设备,同时无需原来homie的外骨骼设备,就能实现移动人形全身遥操作

对于Apple Vision Pro 控制和数据收集


PC端操作

# Start G1 (29DoF) Robot + Dex3-1 Dexterous Hand control
cd avp_teleoperate/teleop
python teleop_data_collecting.py --arm=G1_29 --hand=dex3 --record

参数说明:

  • arm=G1_29:机械臂类型(默认值,可省略)
  • hand=dex3:灵巧手型
  • record:启用数据记录功能

OpenWBC已修改 AVP 以支持完整的全身数据收集

  • 📹视觉数据:多角度摄像机采集
  • 🎯动作数据:完整的关节角度和末端执行器位置
  • 🤖状态数据:机器人姿势、速度、扭矩等
  • 🕐时间同步:所有数据流的精确时间同步

总之,其支持用这个采集的数据训个GR00T N1.5尝试做mobile manipulation 🙋

  • Data Format Conversion: Convert collected data to LeRobot format (Available in OpenWBC_to_Lerobot submodule)
    即将收集的数据转换为LeRobot格式,详见:OpenWBC_to_Lerobot/blob/main/README.md
    cd OpenWBC_to_Lerobot
    
    # Basic conversion
    python convert_to_lerobot.py \
        --input_dir /path/to/openwbc/dataset \
        --output_dir ./lerobot_dataset \
        --dataset_name "pick_cola" \
        --robot_type "g1" \
        --fps 30
    
    # Or use the installed command
    wbc-convert --input_dir /path/to/dataset --output_dir ./output
    ————
    可能有的同学会疑问,这个项目 为何要做:convert_to_lerobot,感觉 没有啥意义啊,不做影响整个项目的跑通么?
    原因很简单,如果想微调GR00T,那么GR00T需要lerobot格式(视频)的数据,而宇树avp/XR采集的数据是图片且非lerobot格式,所以才需要执行convert_to_lerobot
  • VLA Training Integration: Support training NVIDIA GR00T N1.5 (Available in gr00t_modified_for_OpenWBC submodule)
    即支持训练(微调)NVIDIA GR00T N1.5

其基于的项目包括且不限于

  • 🛠️ any4lerobot: Collection of utilities for LeRobot, supporting multiple data format conversions
  • OpenHomie: Robot deployment code based on OpenHomie

最终,整个OpenWBC项目包含如下几大块

  1. avp_teleoperate
  2. OpenWBC_to_Lerobot
  3. Gr00t_Deploy
    gr00t_modified_for_OpenWBC,下文《3.2.2 Isaac-GR00T for OpenWBC的微调指南》会详述
  4. OpenHomie
    包含了
    \rightarrow  HomieDeploy

    \rightarrow  HomieHardware
    \rightarrow  HomieRL,如HOMIE一文此节《1.2.2.2 遥操作系统:可在现实世界和仿真中遥操机器人(含G1的部署源码Walk these ways)》中所说的,他们G1的部署代码源自[52-Walk these ways: Tuning robot control for generalization with multiplicity of behavior],对应的GitHub为:leggedrobotics/rsl_rl

    \rightarrow  MujocoDeploy

2.2 OpenWBC的部署

2.2.1 系统要求

OpenWBC的GitHub所说,第一步,先看系统要求

硬件要求

  1. Unitree G1机器人
  2. Dex-3 灵巧手(可选)
  3. Apple Vision Pro
  4. 开发主机(推荐 Linux,支持 CUDA)

软件要求

  1. Python 3.8+
  2. CMake 3.16+
  3. 支持 C++14 的 GCC/G++
  4. Unitree SDK2——Unitree SDK2 是 Unitree 官方提供的 C++ 库,用于与机器人硬件进行 实时、低延迟 的通信。它是连接高层控制逻辑(Python)和硬件执行器的最底层桥梁
  5. LeRobot(用于数据转换和训练)

2.2.2 安装步骤

第二步,是安装步骤

  1. 编译Unitree SDK2
    对于机器人控制,需要编译g1_control.cpp(Unitree G1)和hand_control.cpp(Dex-3)
    cd unitree_sdk2
    rm -rf build
    mkdir build && cd build
    cmake ..
    make
    编译后,可执行文件将位于unitree_sdk2/build/bin
  2. 安装 g1_gym_deploy—— HomieDeploy 中负责将RL训练的运动策略部署到真实 Unitree G1 机器人 的核心模块
    cd g1_gym_deploy && pip install -e .
  3. 安装LeRobot(可选,用于数据转换和训练)
    pip install lerobot
  4. 初始化数据转换子模块
    对于数据格式转换功能:
    # Initialize and update submodule
    git submodule update --init --recursive
    
    # Install the data converter
    cd OpenWBC_to_Lerobot
    pip install -e .

2.2.3 网络配置

第三步,是网络配置

  1. 确定 IP 地址
    在机器人和PC上运行以下命令来获取IP地址:
    ifconfig | grep inet
  2. 配置网络地址
    请将代码中的IP地址设置为正确的值,以确保机器人和PC之间能够正常通信

2.2.4 部署流程

第四步,便可以直接部署了

  1. 准备步骤
    ⚠️ 重要提示:部署前,请按顺序执行以下操作,关闭G1的初始控制进程:
    L1 + A
    L2 + R2
    L2 + A(成功后机器人会举起手臂)
    L2 + B(成功后机器人将失去原力控制)
  2. 机器人端操作
    终端1:启动机器人控制程序
    cd unitree_sdk2/build/bin && ./g1_control eth0
    # If eth0 doesn't work, try eth1
    终端 2:启动策略推理线程
    python g1_gym_deploy/scripts/deploy_policy.py
    终端3:启动图像服务器(AVP模式)
    cd avp_teleoperate/teleop/image_server
    python image_server.py

机器人操作

  1. 将机器人放在地面上
  2. 按下R2控制器上的按钮,让机器人站立
  3. 再次按下R2即可开始控制

第三部分 TrajBooster的部署

通过上文的解读

可知 TrajBooster的整个流程如下所示

1. 硬件准备 (Hardware)
   └→ 安装相机支架

2. 数据收集 (avp_teleoperate)
   └→ VR 遥操作收集演示数据

3. 数据转换 (OpenWBC_to_Lerobot)
   └→ 转换为 LeRobot 格式

4. 轨迹重定向 (retargeting_model)
 关于retargeting_model的训练说明,请参见:retargeting_model/README.md

当然,如果是我司来尝试这个项目的话,可能不一定用智元轮式数据做二次预训练,如果不做二次预训练,则不需要这个重定向模型 做重定向
   ├→ Manager: 生成高层指令
   └→ Worker: 执行低层控制

5. VLA 训练 (VLA_model)
   ├→ Post-Pre-Training: 使用重定向数据做二次预训练,作者也提供了直接二次预训练好的模型(权重)
   └→ Fine-tuning: 使用真实数据

6. 实际部署 (HomieDeploy)
   └→ 机器人自主执行任务

3.1 第一阶段:远程操作和数据收集

这一部分的项目结构如下

g1_deploy/
│
├── avp_teleoperation/    # Upper-body control & image transmission
│
├── Hardware/            # Wrist camera hardware specs (optional)
│
└── HomieDeploy/         # Lower-body locomotion control

其次,如TrajBooster的GitHub所述,如下设置

  1. 📷腕部摄像头设置(推荐)
    硬件:相机规格和 3D 打印安装文件可在g1_deploy/Hardware/
    优点:显著提高 VLA 深度感知和操作精度
  2. 🦵 下半身控制配置
    部署g1_deploy/HomieDeploy/,至Unitree G1机载电脑
    按照设置说明进行操作g1_deploy/HomieDeploy/README.md
    结果:实现基于遥控器的远程操作
  3. 🖐️ 上身控制设置
    \rightarrow  配置 AVP 远程操作avp_teleoperation:按照g1_deploy/avp_teleoperate/README.md中的说明进行设置。配置tv conda 环境并设置所需的证书

    \rightarrow  双重部署:在本地 PC(图像客户端)和 G1 机器人(图像服务器)上部署系统

    在 Unitree 机器人终端上,运行:
    cd avp_teleoperate/teleop/
    python image_server/image_server.py

    在电脑上,运行:
    cd avp_teleoperate/teleop/
    python image_server/image_client.py

    如果能正常观看视频,则表示设置正确。然后可以关闭程序image_client并继续进行以下操作

    \rightarrow  收集遥控数据(在电脑上)
    (tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_data_collecting.py --arm=G1_29 --hand=dex3  --task_dir='./utils/data'  --record 

    按照g1_deploy/avp_teleoperate/README.md中描述的交互方法,让操作员使用 Apple Vision Pro 耳机进行相应的交互

✅ 验证清单
 操作员 1:Apple Vision Pro 中的实时第一人称机器人视图
 操作员 1:通过 AVP 界面平稳控制手臂和手部
 操作员 2:响应式运动控制(行走、下蹲)


📊 数据处理
按照设置说明进行操作OpenWBC_to_Lerobot/README.md

将收集到的遥操作数据转换为LeRobot格式:

python convert_3views_to_lerobot.py \
    --input_dir /path/to/input \
    --output_dir ./lerobot_dataset \
    --dataset_name "YOUR_TASK" \
    --robot_type "g1" \
    --fps 30

3.2 第二阶段 VLA 模型后训练:先二次预训练后微调

3.2.1 通过智元轮式数据做二次预训练得到的模型为:PPTmodel4UnitreeG1

作者把他们通过智元轮式数据做二次预训练的模型命名为:PPTmodel4UnitreeG1

  • 如此链接:huggingface.co/l2aggle/PPTmodel4UnitreeG1 所说,该模型-PPTmodel4UnitreeG1是专为Unitree G1机器人应用设计的后预训练模型
  • 该模型已使用Agibot2UnitreeG1Retarget数据集——该数据集包含专为 Unitree G1 精心挑选的运动重定向数据,进行了微调,以增强其在机器人全身操控方面的表现

PPTmodel4UnitreeG1由以下文件组成

  • config.json- 模型配置
  • model.safetensors.index.json- SafeTensors索引文件
  • model-00001-of-00002.safetensors- 模型权重(第 1 部分)
  • model-00002-of-00002.safetensors- 模型权重(第 2 部分)
  • trainer_state.json- 训练状态信息
  • training_args.bin- 训练论点
  • experiment_cfg/- 实验配置文件

那如何下载和使用呢

  1. 方法 1:使用 Hugging Face Hub
    from transformers import AutoModel, AutoTokenizer
    
    # Download and load the model
    model = AutoModel.from_pretrained("l2aggle/PPTmodel4UnitreeG1")
    tokenizer = AutoTokenizer.from_pretrained("l2aggle/PPTmodel4UnitreeG1")
  2. 方法 2:使用 Git LFS
    # Clone the repository
    git clone https://huggingface.co/l2aggle/PPTmodel4UnitreeG1
    
    # Navigate to the model directory
    cd PPTmodel4UnitreeG1
  3. 方法3:直接下载
    可以直接从Hugging Face 上的模型库下载单个文件

要求

  • Python 3.7+
  • PyTorch
  • Transformers 库
  • 安全张量

安装
pip install torch transformers safetensors

3.2.2 Isaac-GR00T for OpenWBC的微调指南

利用收集和处理的远程操作数据进行模型微调:

📖详细说明:VLA_model/gr00t_modified_for_OpenWBC/README.md

该项目基于 NVIDIA 的 GR00T-N1.5-3B 模型,并结合 WBC 数据配置 ( OpenWBCDataConfig) 以实现 G1 移动端操控兼容性。此外,还对 进行了可视化增强eval_policy

第一步,先安装

  1. 按照./README_raw_gr00t.md的安装说明进行基本设置,即安装GR00T N1.5
  2. 然后继续以下步骤:
    cd Isaac-GR00T
    
    # Note: Modify pyproject.toml to remove opencv-python dependency (should already be done in this repository)
    
    # Install dependencies
    pip install -e .
    注意:如果执行过程中遇到以下错误:
    AttributeError: module 'cv2' has no attribute 'CV_8U'

    请卸载并重新安装无头版本的 OpenCV:
    pip uninstall opencv-python-headless
    pip install opencv-python-headless

第二步,做数据准备

  1. 下载模型
    将预训练的 VLA 模型下载到与 Isaac-GR00T 同一级别的目录:
    huggingface-cli download --resume-download nvidia/GR00T-N1.5-3B --local-dir ../models/GR00T-N1.5-3B/
  2. 下载 HuggingFace 测试数据集(可选:用于可乐挑选测试)
    # Login to HuggingFace
    huggingface-cli login
    
    huggingface-cli download --repo-type dataset --resume-download JimmyPeng02/pick_cola_gr00t4 \
      --cache-dir ../datasets/test/ --local-dir-use-symlinks False

第三步,做模型微调

  • 测试命令
    详细参数及使用方法请参考./README_raw_gr00t.md:
    python scripts/gr00t_finetune.py --help
    
    python scripts/gr00t_finetune.py \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ./demo_data/robot_sim.PickNPlace \
      --num-gpus 1 \
      --lora_rank 64 \
      --lora_alpha 128 \
      --batch-size 32
  • 单任务全模型微调
    结果保存到./save/(先创建保存文件夹)
    python scripts/gr00t_finetune.py \
      --output-dir ./save/pick_mickey_mouse \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ../datasets/multiobj_pick/pick_mickey_mouse \
      --num-gpus 1 \
      --batch-size 64 \
      --report-to tensorboard \
      --max_steps 20000 \
      --data-config openwbc_g1
    
    python scripts/gr00t_finetune.py \
      --output-dir ./save/pick_pink_fox \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ../datasets/multiobj_pick/pick_pink_fox \
      --num-gpus 1 \
      --batch-size 64 \
      --report-to tensorboard \
      --max_steps 20000 \
      --data-config openwbc_g1
    
    python scripts/gr00t_finetune.py \
      --output-dir ./save/pick_toy_cat \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ../datasets/multiobj_pick/pick_toy_cat \
      --num-gpus 1 \
      --batch-size 64 \
      --report-to tensorboard \
      --max_steps 20000 \
      --data-config openwbc_g1
    
    python scripts/gr00t_finetune.py \
      --output-dir ./save/pick_toy_sloth \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ../datasets/multiobj_pick/pick_toy_sloth \
      --num-gpus 1 \
      --batch-size 64 \
      --report-to tensorboard \
      --max_steps 20000 \
      --data-config openwbc_g1
  • 多任务微调
    直接运行以下命令:
    dataset_list=(
    "../datasets/multiobj_pick/pick_mickey_mouse"
    "../datasets/multiobj_pick/pick_pink_fox"
    "../datasets/multiobj_pick/pick_toy_cat"
    "../datasets/multiobj_pick/pick_toy_sloth"
    )
    
    python scripts/gr00t_finetune.py \
      --base-model-path ../models/GR00T-N1.5-3B \
      --dataset-path ${dataset_list[@]} \
      --num-gpus 1 \
      --output-dir ./save/multiobj_pick_WBC/ \
      --data-config openwbc_g1 \
      --embodiment-tag new_embodiment \
      --batch-size 128 \
      --max_steps 20000 \
      --report-to tensorboard

第四步,做数据集评估

python scripts/eval_policy.py \
  --plot \
  --model_path ./save/test/checkpoint-1000 \
  --dataset-path ../datasets/multiobj_pick/pick_mickey_mouse \
  --embodiment-tag new_embodiment \
  --data-config openwbc_g1 \
  --modality-keys base_motion left_hand right_hand

评估后,将在 Isaac-GR00T 根目录中生成可视化图像test_fig.png,显示模型预测与地面真实曲线之间的比较

第五步,做真机推理

  1. 先决条件
    首先,启动 HomieDeploy
  2. 启动图像服务器
    cd inference_deploys/image_server
    python image_server.py
  3. 启动模型服务器
    python scripts/G1_inference.py \
      --arm=G1_29 \
      --hand=dex3 \
      --model-path models/multask_pick \
      --goal pick_mickey_mouse \
      --frequency 20 \
      --vis \
      --filt

成功操作的重要注意事项:

  1. Unitree G1 人形机器人的初始姿态不应与远程操作数据偏差太大
  2. 20Hz 操作频率可获得最佳效果

3.3 第三阶段 自主 VLA 部署

3.3.1 步骤1:初始化图像服务器

# Terminal 1 (on Unitree G1)
cd avp_teleoperate/teleop/image_server
python image_server.py
🔍 验证:在本地电脑上使用 测试图像流python image_client.py,然后关闭再继续

3.3.2 步骤2:激活下肢控制

  1. A.一个⚠️ - 系统重置
    Execute: L1+A → L2+R2 → L2+A → L2+B
    Expected: Arms hang (L2+A) → Arms down (L2+B)
  2. B.初始化机器人控制
    # Terminal 2 (on Unitree G1)
    cd unitree_sdk2/build/bin
    ./g1_control eth0  # or eth1 depending on network configuration
  3. C. 启动策略推断
    # Terminal 3 (on Unitree G1) 
    python g1_gym_deploy/scripts/deploy_policy_infer.py
  4. D. 腿部激活
    1 将机器人放置在地面上
    2 压机R2(机器人支架)
    3 再次按下R2(激活自主模式)
    ⚠️安全须知:部署前请确保完全了解所有系统组件。使用不当可能会导致硬件损坏或安全隐患
  5. E. 启动 VLA 模型服务器
    python scripts/G1_inference.py \
      --arm=G1_29 \
      --hand=dex3 \
      --model-path YOUR_MODEL_PATH \
      --goal YOUR_TASK \
      --frequency 20 \
      --vis \
      --filt

// 待更

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v_JULY_v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值