示例:人形机器人的数据生成与模仿学习#
本页介绍使用 Isaac Lab Mimic 为人形机器人(GR-1、G1)生成数据并开展模仿学习的工作流:
演示 1: 人形机器人的数据生成与策略训练(GR-1 抓取放置)
演示 2: 人形机器人的视觉运动策略(GR-1 倾倒螺母)
演示 3: 人形机器人移动操作的数据生成与策略训练(Unitree G1)
重要
本页的 Isaac Lab Mimic 工作流及 Pink IK 任务仅支持 Linux。Pink IK 及其依赖不支持 Windows。
继续以下演示之前,请先完成 使用 Isaac Lab Mimic 进行合成数据生成与模仿学习 教程,了解数据采集、标注及生成步骤。
演示 1: 人形机器人的数据生成和策略训练#
Isaac Lab Mimic 支持对多个末端执行器的机器人生成数据。在以下演示中,我们将展示如何生成数据以训练一个 Fourier GR-1 人形机器人执行拾取和放置任务。
可选: 收集和标注演示#
收集人类演示#
备注
采集 GR-1 人形机器人环境的数据需要 Apple Vision Pro 头显。如果没有该设备,可以跳过此步骤,直接进入 生成数据集 。下一步提供了预先录制并标注的数据集。
小技巧
GR1 场景将 Apple Vision Pro(AVP)提供的手腕位姿作为微分 IK 控制器(Pink-IK)的目标。要获得较好的效果,用户手腕位姿应接近机器人的初始或当前位姿。手腕快速移动可能使当前状态明显偏离目标,导致 IK 控制器无法找到最优解,出现用户手腕与机器人手腕位置不一致。可以提高所有 Pink-IK 控制器 FrameTask 的增益 ,降低跟踪 AVP 手腕位姿的延迟,但这可能使运动更不平滑。机器人的手指关节则通过 dex-retargeting 库重定向到用户的手指关节。
按照 配置 Isaac Capture 与 CloudXR 中的步骤设置 CloudXR 运行时和 Apple Vision Pro 以进行远程操作。在运行单个环境时,使用 CPU 仿真可获得更好的 XR 性能。
收集一组人类演示。成功的演示需要将物体放置在箱子中,并使机器人的右臂缩回到起始位置。
Isaac Lab Mimic Env GR-1 人形机器人被设置如下: 左手有一个子任务,而右手有两个子任务。第一个子任务是右手保持空闲,左手拾起并移动物体到右手将要抓取的位置。这种设置使得 Isaac Lab Mimic 能够通过使用物体的姿势准确地插值右手的轨迹,尤其是在数据生成过程中姿势被随机化的情况下。因此,在左手拾起物体并将其带到稳定位置时,请避免移动右手。
左: 一个演示人类动作流畅稳定的好例子。右: 一个动作生硬夸张的糟糕示范。
通过运行以下命令收集五个演示:
uv run --extra teleop,isaacsim isaaclab teleop record \
--task IsaacContrib-PickPlace-GR1T2-Abs \
--visualizer kit \
--xr \
--device cpu \
--num_demos 5 \
--dataset_file ./datasets/dataset_gr1.hdf5
备注
我们还提供了启用腰部自由度的 GR-1 抓取放置任务 IsaacContrib-PickPlace-GR1T2-WaistEnabled-Abs (可用环境及 GR1 腰部启用变体的详情,见 环境 )。可使用上述同一命令,只需将任务名改为 IsaacContrib-PickPlace-GR1T2-WaistEnabled-Abs 。
小技巧
如果在数据收集过程中演示失败,可以使用 Apple Vision Pro 上的 XR 远程操控客户端中的远程操控控制面板或通过说 "reset" 来重置环境。查看 使用 Apple Vision Pro 遥操作 以获取更多详细信息。
机器人使用简化的碰撞网格进行物理计算,该网格与仿真中显示的详细可视网格不同。由于这种差异,您可能偶尔会观察到可视图中机器人的某些部分似乎穿透其他物体或其自身,尽管在物理仿真中正常处理碰撞。
您可以通过运行以下命令重现收集的演示:
uv run --extra teleop,isaacsim isaaclab teleop replay \
--task IsaacContrib-PickPlace-GR1T2-Abs \
--visualizer kit \
--device cpu \
--dataset_file ./datasets/dataset_gr1.hdf5
备注
回放时可能出现非确定性,因为使用 env.reset 时,Isaac Lab 的物理仿真并不能保证确定性复现。
标注演示#
与 Franka 堆叠任务 不同,GR-1 抓取放置任务通过手动标注定义子任务。
拾取和放置任务有一个左臂子任务(pick)和两个右臂子任务(idle、place)。 标注表示子任务的结束。 对于拾取和放置任务,这意味着左臂子任务没有标注,右臂子任务有一个标注(最后子任务的结束始终是隐式的)。
每个演示都需要在右臂的第一个和第二个子任务之间进行一次单独的标注。此标注( "S" 按钮按下)应在右侧机器人手臂完成 "idle" 子任务并开始朝着目标物体移动时完成。下面显示了一个正确标注的示例:
通过运行以下命令标注演示:
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/annotate_demos.py \
--task Isaac-PickPlace-GR1T2-Abs-Mimic-v0 \
--visualizer kit \
--device cpu \
--input_file ./datasets/dataset_gr1.hdf5 \
--output_file ./datasets/dataset_annotated_gr1.hdf5
备注
脚本打印用于手动标注的键盘命令以及当前正在标注的子任务:
Annotating episode #0 (demo_0)
Playing the episode for subtask annotations for eef "right".
Subtask signals to annotate:
- Termination: ['idle_right']
Press "N" to begin.
Press "B" to pause.
Press "S" to annotate subtask signals.
Press "Q" to skip the episode.
小技巧
如果在标注过程中物体未放入箱子,则可以按 "N" 重新播放该事件并重新标注。或者您可以按 "Q" 跳过该事件并标注下一个。
生成数据集#
如果跳过了前面的采集与标注步骤,请下载预先录制并标注的 dataset_annotated_gr1.hdf5 : [已标注 GR1 数据集] 。将文件放到 IsaacLab/datasets 下,运行以下命令,生成包含 1000 条示范的新数据集。
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--device cpu \
--num_envs 20 \
--generation_num_trials 1000 \
--input_file ./datasets/dataset_annotated_gr1.hdf5 \
--output_file ./datasets/generated_dataset_gr1.hdf5
训练一个策略#
使用 Robomimic 为生成的数据集训练一个策略。
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/train.py \
--task IsaacContrib-PickPlace-GR1T2-Abs \
--algo bc \
--normalize_training_actions \
--dataset ./datasets/generated_dataset_gr1.hdf5
训练脚本将标准化数据集中的操作到范围[-1, 1]。标准化参数保存在模型目录下的 PATH_TO_MODEL_DIRECTORY/logs/normalization_params.txt 文件中。记录标准化参数以备后续在可视化步骤中使用。
备注
默认情况下,训练后的模型和日志保存在 IsaacLab/logs/robomimic 。
可视化结果#
通过运行以下命令,使用之前训练步骤中记录的标准化参数来可视化训练策略的结果:
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/play.py \
--task IsaacContrib-PickPlace-GR1T2-Abs \
--visualizer kit \
--device cpu \
--num_rollouts 50 \
--horizon 400 \
--norm_factor_min <NORM_FACTOR_MIN> \
--norm_factor_max <NORM_FACTOR_MAX> \
--checkpoint /PATH/TO/desired_model_checkpoint.pth
备注
将上述命令中的 NORM_FACTOR 更改为训练步骤中生成的值。
小技巧
如果您没有看到预期的性能结果: 测试来自不同检查点轮次的策略至关重要。不同轮次之间的性能可能存在显著差异,性能最佳的检查点往往不是最后一个。
在 Isaac Lab 中执行拾取和放置任务的训练策略。#
备注
GR1T2 拾取和放置任务的预期成功率和时间
数据生成的成功率取决于人类演示的质量(用户执行的好坏程度)和数据集标注质量。数据生成和下游策略成功对这些因素都很敏感,可能会出现较大差异。请参阅 Common Pitfalls when Generating Data 获取改进数据集的提示。
此任务的数据生成成功率通常为 65-80%(1000 个演示),需要 18-40 分钟,具体取决于 GPU 硬件和成功率(在 RTX ADA 6000 上成功率 80% 时为 19 分钟)。
行为克隆(BC)策略成功率通常为 75-86%(在 50 次展示中评估),基于 1000 个生成的演示训练 2000 个轮次(默认),具体取决于演示质量。在 RTX ADA 6000 上训练大约需要 29 分钟。
建议: 使用 1000 个生成的演示训练 2000 个轮次,并 评估保存在第 1000 到第 2000 个轮次之间的多个检查点 ,以选择性能最佳的策略。测试不同轮次对于找到最优性能至关重要。
演示 2:人形机器人的视觉运动策略#
下载数据集#
从 此处 下载预生成数据集,放到 IsaacLab/datasets/generated_dataset_gr1_nut_pouring.hdf5 ( 注意:数据集约为 15 GB )。其中包含人形机器人执行倾倒/放置任务的 1000 条示范,由 Isaac Lab Mimic 为 Isaac-NutPour-GR1T2-Pink-IK-Abs-Mimic-v0 任务生成。
提示
如果需要的话,可以使用与之前示例相同的命令进行数据收集、标注和生成。
机器人首先拿起红色烧杯,将内容物倒入黄色碗中。然后,它将红色烧杯放入蓝色垃圾箱中。最后,它将黄色碗放在白色天平上。请参见下面 可视化结果 部分的视频,以获取任务的视觉演示。
此任务的成功标准要求将红色烧杯放置在蓝色垃圾桶中,将绿色螺母放在黄色碗中,并将黄色碗放在白色天平上。
注意
注意,以下命令仅供参考,对本演示没有必要。
收集演示:
uv run --extra teleop,isaacsim isaaclab teleop record \
--task IsaacContrib-NutPour-GR1T2-Pink-IK-Abs \
--visualizer kit \
--device cpu \
--xr \
--num_demos 5 \
--dataset_file ./datasets/dataset_gr1_nut_pouring.hdf5
标注演示:
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/annotate_demos.py \
--task Isaac-NutPour-GR1T2-Pink-IK-Abs-Mimic-v0 \
--visualizer kit \
--device cpu \
--input_file ./datasets/dataset_gr1_nut_pouring.hdf5 \
--output_file ./datasets/dataset_annotated_gr1_nut_pouring.hdf5
警告
有多个正确的该任务的 eef 标注。相同 eef 的子任务标注不能具有相同的动作索引。确保用不同的动作索引标注正确的 eef 子任务。
生成数据集:
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--task Isaac-NutPour-GR1T2-Pink-IK-Abs-Mimic-v0 \
--visualizer kit \
--device cpu \
--generation_num_trials 1000 \
--num_envs 5 \
--input_file ./datasets/dataset_annotated_gr1_nut_pouring.hdf5 \
--output_file ./datasets/generated_dataset_gr1_nut_pouring.hdf5
训练一个策略#
使用 Robomimic 来为任务训练视觉动作 BC 智能体。
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/train.py \
--task IsaacContrib-NutPour-GR1T2-Pink-IK-Abs \
--algo bc \
--normalize_training_actions \
--dataset ./datasets/generated_dataset_gr1_nut_pouring.hdf5
训练脚本将标准化数据集中的操作到范围[-1, 1]。标准化参数保存在模型目录下的 PATH_TO_MODEL_DIRECTORY/logs/normalization_params.txt 文件中。记录标准化参数以备后续在可视化步骤中使用。
备注
默认情况下,训练后的模型和日志保存在 IsaacLab/logs/robomimic 。
您还可以后训练一个 GR00T 基础模型,为任务部署视觉-语言-动作策略。
有关更多详细信息,请参阅 IsaacLabEvalTasks 存储库。
可视化结果#
通过运行以下命令,使用之前训练步骤中记录的标准化参数来可视化训练策略的结果:
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/play.py \
--task IsaacContrib-NutPour-GR1T2-Pink-IK-Abs \
--visualizer kit \
--device cpu \
--num_rollouts 50 \
--horizon 350 \
--norm_factor_min <NORM_FACTOR_MIN> \
--norm_factor_max <NORM_FACTOR_MAX> \
--checkpoint /PATH/TO/desired_model_checkpoint.pth
备注
将上述命令中的 NORM_FACTOR 更改为训练步骤中生成的值。
小技巧
如果您没有看到预期的性能结果: 请测试来自不同检查点轮次的策略,而不仅仅是最后一个。策略性能在整个训练过程中可能存在显著差异,中间检查点往往会产生更好的结果。
经过训练的视觉运动策略在 Isaac Lab 中执行倾倒任务#
备注
视觉运动螺母倾倒 GR1T2 任务的预期成功率和时间
数据生成的成功率取决于人类演示的质量(用户执行的好坏程度)和数据集标注质量。数据生成和下游策略成功对这些因素都很敏感,可能会出现较大差异。请参阅 Common Pitfalls when Generating Data 获取改进数据集的提示。
在 RTX ADA 6000 上生成 1000 个演示大约需要 10 小时。
行为克隆(BC)策略成功率通常为 50-60%(在 50 次展示中评估),基于 1000 个生成的演示训练 600 个轮次(默认)。在 RTX ADA 6000 上训练大约需要 15 小时。
建议: 使用 1000 个生成的演示训练 600 个轮次,并 评估保存在第 300 到第 600 个轮次之间的多个检查点 ,以选择性能最佳的策略。测试不同轮次对于实现最优性能至关重要。
演示 3:Unitree G1 人形机器人移动操作的数据生成与策略训练#
在本演示中,我们展示了在单个人形机器人系统中集成运动和操作能力。这个运动操作环境能够为结合导航和物体操作的复杂任务收集数据。演示遵循多步骤过程: 首先生成类似于演示 1 的拾取和放置任务,然后引入导航组件,使用专门的脚本生成场景,其中人形机器人必须从 A 点移动到 B 点。机器人在初始位置(A 点)拾取物体,并将其放置在目标位置(B 点)。
备注
运动策略训练
本集成示例使用的运动策略通过 AGILE 框架训练。AGILE 是官方支持的人形机器人控制训练流水线,使用 Isaac Lab 基于管理器的环境,也将与 Isaac 产品中的其他评估及部署工具集成。团队可以依靠统一、持续维护的工具体系,获得策略训练所需的基础设施,并方便地导出到实机部署。AGILE 仓库包含更新的预训练策略,上半身和下半身策略分开,便于灵活使用。这些策略已通过实机验证,可直接部署。用户也可以通过 AGILE 训练自己的运动或全身控制策略。
生成操作数据集#
演示 1 的数据生成与策略训练步骤也可用于具备移动操作能力的 G1 人形机器人。本演示介绍如何训练 G1,结合全身移动与操作完成抓取放置任务。
流程与演示 1 相同,但使用 IsaacContrib-PickPlace-Locomanipulation-G1-Abs 任务环境。
沿用演示 1 的数据采集、标注及生成流程,并针对 G1 移动操作任务进行调整。
提示
如果需要,可以使用与之前示例相同的命令进行数据收集和标注以验证数据集。
具有运动操作能力的 G1 机器人结合全身运动和操作来执行拾取和放置任务。
注意,以下命令仅供参考和数据集验证之用 - 对本演示不是必需的。
收集演示:
uv run --extra teleop,isaacsim isaaclab teleop record \
--device cpu \
--xr \
--visualizer kit \
--task IsaacContrib-PickPlace-Locomanipulation-G1-Abs \
--dataset_file ./datasets/dataset_g1_locomanip.hdf5 \
--num_demos 5
备注
Apple Vision Pro 应用的初始化方式可能使操作者双手远高于或远低于 G1 的双手。出现这种情况时,可在 Isaac Lab 的 XR 选项卡中点击 Stop XR ,移动 AR Anchor prim:向下移动可降低操作者双手,向上移动可抬高。点击 Start XR 恢复遥操作。点击 Apple Vision Pro 中的 Play 前,务必使双手与机器人双手位置匹配,否则初始时会产生意外的大力。
您可以通过运行以下命令重现收集的演示:
uv run --extra teleop,isaacsim isaaclab teleop replay \
--device cpu \
--visualizer kit \
--task IsaacContrib-PickPlace-Locomanipulation-G1-Abs \
--dataset_file ./datasets/dataset_g1_locomanip.hdf5
标注演示:
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/annotate_demos.py \
--device cpu \
--visualizer kit \
--task Isaac-Locomanipulation-G1-Abs-Mimic-v0 \
--input_file ./datasets/dataset_g1_locomanip.hdf5 \
--output_file ./datasets/dataset_annotated_g1_locomanip.hdf5
如果跳过了前面的采集与标注步骤,请下载预先录制并标注的 dataset_annotated_g1_locomanip.hdf5 : [已标注 G1 数据集] 。将文件放到 IsaacLab/datasets 下,运行以下命令,生成包含 1000 条示范的新数据集。
uv run --extra isaacsim,mimic python scripts/imitation_learning/isaaclab_mimic/generate_dataset.py \
--device cpu --num_envs 20 --generation_num_trials 1000 \
--input_file ./datasets/dataset_annotated_g1_locomanip.hdf5 --output_file ./datasets/generated_dataset_g1_locomanip.hdf5
训练仅操作的策略#
此时,您可以使用生成的数据集训练一个仅执行操作任务的策略:
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/train.py \
--task IsaacContrib-PickPlace-Locomanipulation-G1-Abs --algo bc \
--normalize_training_actions \
--dataset ./datasets/generated_dataset_g1_locomanip.hdf5
可视化结果#
可视化训练策略的性能:
uv run --extra isaacsim,mimic python scripts/imitation_learning/robomimic/play.py \
--device cpu \
--visualizer kit \
--task IsaacContrib-PickPlace-Locomanipulation-G1-Abs \
--num_rollouts 50 \
--horizon 400 \
--norm_factor_min <NORM_FACTOR_MIN> \
--norm_factor_max <NORM_FACTOR_MAX> \
--checkpoint /PATH/TO/desired_model_checkpoint.pth
备注
将上述命令中的 NORM_FACTOR 更改为训练步骤中生成的值。
小技巧
如果您没有看到预期的性能结果: 请始终测试来自不同检查点轮次的策略。不同轮次可能会产生显著不同的结果,因此请评估多个检查点以找到最优模型。
在 Isaac Lab 中执行拾取和放置任务的训练策略。#
备注
运动操作拾取和放置任务的预期成功率和时间
数据生成的成功率取决于人类演示的质量(用户执行的好坏程度)和数据集标注质量。数据生成和下游策略成功对这些因素都很敏感,可能会出现较大差异。请参阅 Common Pitfalls when Generating Data 获取改进数据集的提示。
此任务的数据生成成功率通常为 65-82%(1000 个演示),需要 18-40 分钟,具体取决于 GPU 硬件和成功率(在 RTX ADA 6000 上成功率 82% 时为 18 分钟)。
行为克隆(BC)策略成功率通常为 75-85%(在 50 次展示中评估),基于 1000 个生成的演示训练 2000 个轮次(默认),具体取决于演示质量。在 RTX ADA 6000 上训练大约需要 40 分钟。
建议: 使用 1000 个生成的演示训练 2000 个轮次,并 评估保存在第 1000 到第 2000 个轮次之间的多个检查点 ,以选择性能最佳的策略。测试不同轮次对于找到最优性能至关重要。
微调用于移动操作的 GR00T N1.5 策略#
前提条件: 使用上一节命令生成移动操作数据集,如 generated_dataset_g1_locomanipulation_sdg.hdf5 。转换步骤接受包含 SDG HDF5 文件的目录,因此可将多个 generate_data.py 的输出放在一起;但目录中 只能 包含 SDG 输出,不能包含前面步骤产生的其他 HDF5 文件,如 dataset_annotated_g1_locomanip.hdf5 或 generated_dataset_g1_locomanip.hdf5 。
在独立环境中安装 GR00T(uv)#
GR00T N1.5 与 Isaac Lab 要求的 NumPy 和 Transformers 版本不兼容。仿真器应留在 Isaac Lab 环境中,数据转换、训练和策略服务则在独立的 GR00T 环境中运行。策略执行过程通过 localhost 与策略服务器通信。
从 IsaacLab 仓库根目录 开始。以下命令在相邻目录中克隆 GR00T,并保存后续步骤需要的绝对路径。请在当前 shell 中保留这些变量;打开新终端时,需要重新设置:
export ISAACLAB_ROOT="$(pwd)"
export GR00T_ROOT="$(dirname "$ISAACLAB_ROOT")/Isaac-GR00T"
export GR00T_PYTHON="$GR00T_ROOT/.venv/bin/python"
export GR00T_SCRIPTS="$ISAACLAB_ROOT/scripts/imitation_learning/locomanipulation_sdg/gr00t"
git clone https://github.com/NVIDIA/Isaac-GR00T "$GR00T_ROOT"
git -C "$GR00T_ROOT" checkout 4af2b622892f7dcb5aae5a3fb70bcb02dc217b96
该提交是本工作流程使用的 N1.5 版本。向这个新克隆的仓库复制 G1 配置,并应用一次随附的 PyTorch SDPA 补丁:
cp "$GR00T_SCRIPTS/data_config.py" "$GR00T_ROOT/gr00t/experiment/data_config.py"
git -C "$GR00T_ROOT" apply "$GR00T_SCRIPTS/no_flash_attn.patch"
创建独立的 Python 3.12 环境。下面的命令适用于 Linux x86_64,使用 CUDA 12.8 的 PyTorch wheel。其他平台需要选择与硬件匹配的 PyTorch 和 Torchvision 构建。SDPA 补丁可以避免单独编译 flash-attn。
uv venv --no-config --python 3.12 "$GR00T_ROOT/.venv"
uv pip install --no-config --python "$GR00T_PYTHON" \
--index-url https://download.pytorch.org/whl/cu128 torch==2.7.1 torchvision==0.22.1
uv pip install --no-config --python "$GR00T_PYTHON" \
-r "$GR00T_SCRIPTS/requirements.txt" -e "$GR00T_ROOT"
PYTORCH3D_NO_EXTENSION=1 uv pip install --no-config --python "$GR00T_PYTHON" \
--no-build-isolation -c "$GR00T_SCRIPTS/requirements.txt" \
'git+https://github.com/facebookresearch/pytorch3d.git@33824be3cbc87a7dd1db0f6a9a9de9ac81b2d0ba'
uv pip check --no-config --python "$GR00T_PYTHON"
decord2 发行包保留了 GR00T 使用的 decord Python 导入名,并为 x86_64 和 aarch64 系统(包括 DGX Spark)提供预编译 wheel。
重要
每条 GR00T 安装命令均明确指定 --no-config 和 --python。即使在 Isaac Lab 工作副本中安装,也能防止 Isaac Lab 的 NumPy 覆盖配置替换 GR00T 固定的版本,同时避免修改仿真器环境。依赖文件还配套固定了 Diffusers 和 Hugging Face Hub 的版本,以保持与 Transformers 兼容。向此环境添加软件包时,应继续使用同一份依赖文件作为版本约束。
按下文示例使用 uv run --no-project --python "$GR00T_PYTHON" 运行 GR00T 命令。仅使用 --no-sync 不会选择 GR00T 解释器,也不会绕过安装时的覆盖配置。如果此前共用环境的安装方式修改了 Isaac Lab 的依赖,应先用 uv sync --extra isaacsim --extra mimic 恢复环境,再执行策略。
这里有意禁用了 PyTorch3D 的编译扩展,因为 GR00T N1.5 只使用 pytorch3d.transforms 。这样可以避免编译未使用的 CUDA 渲染器,也能支持无法链接该扩展的系统,包括 aarch64 Blackwell 系统。
将数据集转换为 LeRobot 格式#
GR00T N1.5 要求 LeRobot 格式的数据。请在 IsaacLab 仓库根目录运行转换脚本。 <input_dir> 是包含一个或多个由 generate_data.py 生成的 SDG .hdf5 文件的目录,且 不能有其他 HDF5 文件 。 <output_path> 是 LeRobot 格式的输出目录,如 ./datasets/datasets_train_200_lerobot 。物体位移过小的回合会被跳过。
uv run --no-project --python "$GR00T_PYTHON" \
"$GR00T_SCRIPTS/convert_dataset.py" <input_dir> <output_path>
例如,先将 SDG 输出移到专用目录,确保转换器只读取 SDG 文件:
mkdir -p ./datasets/locomanip_sdg
mv ./datasets/generated_dataset_g1_locomanipulation_sdg.hdf5 ./datasets/locomanip_sdg/
uv run --no-project --python "$GR00T_PYTHON" \
"$GR00T_SCRIPTS/convert_dataset.py" ./datasets/locomanip_sdg ./datasets/datasets_train_200_lerobot
微调策略#
在 Isaac-GR00T 仓库根目录运行微调。将上一步的 LeRobot 格式输出路径用作 --dataset-path ,并通过 --output-dir 指定检查点目录。G1 移动操作任务必须使用 --data-config g1_locomanipulation_sdg 和 --embodiment-tag new_embodiment 。
cd "$GR00T_ROOT"
uv run --no-project --python "$GR00T_PYTHON" scripts/gr00t_finetune.py \
--dataset-path <path_to_lerobot_output> \
--output-dir <checkpoint_dir> \
--data-config g1_locomanipulation_sdg \
--embodiment-tag new_embodiment \
--num-gpus 1 \
--max-steps 10000 \
--save-steps 1000 \
--video-backend decord \
--report-to tensorboard
更多训练选项见 GR00T N1.5 仓库文档。
小技巧
跳过微调: Hugging Face 上的 nvidia/g1_locomanip_finetune 提供了本任务的 GR00T N1.5 预训练检查点。下载后可跳过微调,直接运行策略轨迹。
下载并解压检查点:
uv run --no-project --python "$GR00T_PYTHON" hf download nvidia/g1_locomanip_finetune --local-dir ./checkpoints/g1_locomanip_finetune_hf
unzip ./checkpoints/g1_locomanip_finetune_hf/*.zip -d ./checkpoints/
压缩包解压到 ./checkpoints/g1_locomanip_finetune_20260129_231610/。在下方服务器命令中,将 --model_path 设为 ./checkpoints/g1_locomanip_finetune_20260129_231610/checkpoint-20000。此检查点要求策略执行客户端设置 --policy_quat_format wxyz。
在 Isaac Lab 中运行策略轨迹#
在 GR00T 环境 中启动策略服务器,并提供微调后检查点的绝对路径。等待出现 Server is ready and listening 后,再开始执行策略:
uv run --no-project --python "$GR00T_PYTHON" \
"$GR00T_SCRIPTS/serve_policy.py" \
--model_path <absolute_checkpoint_directory> --embodiment_tag new_embodiment
在 第二个终端 中,从 IsaacLab 仓库根目录 运行仿真器,指定用于场景和演示初始化的静态操作数据集及任务名称。两个 --with 选项仅提供轻量级通信依赖;仿真器不会通过策略客户端导入 GR00T、Transformers 或 GR00T 的数据集 schema:
uv run --extra isaacsim --extra mimic --with msgpack==1.2.3 --with pyzmq==27.2.0 \
python scripts/imitation_learning/locomanipulation_sdg/gr00t/rollout_policy.py \
--policy_host 127.0.0.1 \
--dataset ./datasets/generated_dataset_g1_locomanip.hdf5 \
--demo demo_0 \
--output_file ./datasets/rollout_output.hdf5 \
--task Isaac-G1-SteeringWheel-Locomanipulation \
--device cpu \
--visualizer kit
可选参数包括 --randomize_placement 和 --policy_quat_format wxyz;检查点以 wxyz 四元数格式训练时,应使用后者。可用 --max_steps 32 进行有限步数的试运行。--policy_port 默认为 5555,--policy_timeout_ms 默认为 15000。超时会抛出错误,避免仿真器一直等待。完成后用 Ctrl-C 停止服务器。服务器默认绑定 localhost,其协议用于可信的本地连接。
旧版策略执行选项 --model_path 仍可用于自定义的兼容环境,但标准 Isaac Lab 环境需要采用服务器/客户端工作流程。
针对运动操作微调的 GR00T N1.5 策略的模拟展示。#
上面显示的策略使用相机图像、手部姿态、手部关节位置、物体姿态和基础目标姿态作为输入。模型的输出是接下来几个时间步的目标基础速度、手部姿态和手部关节位置。
将 3D 高斯泼溅集成到 SDG#
本节扩展 移动操作 SDG ,用 3D 高斯泼溅(NuRec)场景替换合成背景。工作流以操作数据集为输入,生成包含导航与操作的 HDF5 数据集。导航在神经重建环境中回放,由第一视角相机采集结果,得到更逼真的训练数据。Isaac Sim 中 NuRec 渲染的更多信息,见 神经体渲染 。
备注
本节介绍带 3DGS 背景的数据生成。使用生成数据训练策略的方法,见 微调用于移动操作的 GR00T N1.5 策略 。
备注
移动操作 SDG 流水线目前只运行单个环境,尚不支持并行环境。
准备:下载示例资产#
我们在 Hugging Face 提供示例资产 hand_hold-voyager-babyboom 。
登录 Hugging Face:
hf auth login --token <your_huggingface_access_token>
下载所需的 USDZ 舞台文件及占据地图:
hf download nvidia/PhysicalAI-Robotics-NuRec \
hand_hold-voyager-babyboom/particle_sh_optimized.usdz \
hand_hold-voyager-babyboom/occupancy_map.png \
hand_hold-voyager-babyboom/occupancy_map.yaml \
--repo-type dataset \
--local-dir <PATH_TO_USD_ASSET>
资产要求#
自定义 3D 高斯资产需满足以下要求,才能兼容 SDG 流水线:
场景留有足够的自由空间(如 5 m × 5 m),用于放置资产和机器人导航。
地面与 z=0 平面对齐,因为流水线按这一高度放置物体。
提供用于路径规划的占据地图。
生成数据集#
继续之前,请确保已生成操作数据集,或下载 生成操作数据集 一节提供的示例数据集。
运行时,脚本会在场景的 z=0 处添加地面,然后执行四个阶段:
抓取 :机器人回放操作轨迹,在起始位置抓起物体。
--lift_step标记此阶段的结束,即刚完成抓取的时刻。导航 :机器人利用占据地图进行路径规划,并通过运动策略前往目标位置。
--navigate_step标记此阶段的结束,即机器人已到位、准备放下物体的时刻。放置 :机器人在目标位置放下物体,完成轨迹。
记录 :将关节状态、位姿及第一视角视频保存到
--output_file指定的 HDF5 文件。
运行生成命令:
uv run --extra isaacsim,mimic python scripts/imitation_learning/locomanipulation_sdg/generate_data.py \
--device cpu \
--kit_args="--enable isaacsim.replicator.experimental.mobility_gen" \
--task="Isaac-G1-SteeringWheel-Locomanipulation" \
--dataset <DATASET_FOLDER>/dataset_annotated_g1_locomanip.hdf5 \
--num_runs 1 \
--lift_step 60 \
--navigate_step 130 \
--output_file <DATASET_FOLDER>/generated_dataset_g1_locomanipulation_sdg_nurec.hdf5 \
--background_usd_path <PATH_TO_USD_ASSET>/hand_hold-voyager-babyboom/particle_sh_optimized.usdz \
--background_occupancy_yaml_file <PATH_TO_USD_ASSET>/hand_hold-voyager-babyboom/occupancy_map.yaml \
--high_res_video
要在图形界面中查看运行情况,添加 --viz kit ;可调整透视相机,或将视口切换为机器人相机视图,以便更清楚地观察。
主要参数如下:
--background_usd_path:3D 高斯 NuRec USD 资产的路径。--background_occupancy_yaml_file:NuRec 占据地图文件的路径。使用 NuRec 场景时,会自动启用放置位置随机化。
--high_res_video:以 512×320 分辨率采集第一视角相机画面,替代默认的 256×160。
运行成功后,会生成包含相机观测的 HDF5 数据集。安装支持 FFmpeg 的 OpenCV,再将第一视角相机画面转换为 MP4:
uv pip install opencv-python
uv run --extra mimic python scripts/tools/hdf5_to_mp4.py \
--input_file <DATASET_FOLDER>/generated_dataset_g1_locomanipulation_sdg_nurec.hdf5 \
--output_dir <DATASET_FOLDER>/ \
--input_keys robot_pov_cam \
--video_width 512 \
--video_height 320
将 --video_width 和 --video_height 设为数据生成时的分辨率:使用 --high_res_video 时为 512×320,否则为 256×160。
上图展示了机器人在 3D 高斯背景中回放抓取放置轨迹并导航到目标位置时,录制的第一视角相机画面。

