1.Push-T
很好兄弟,你问得很关键:你给我的三段代码其实是一套完整的推理+录像 pipeline,它们之间既有独立功能,又有顺序依赖关系。我来帮你分段解释,每段是什么功能、三段之间怎么配合,让你彻底搞明白。
🧩 三段代码作用总览
段落 | 功能定位 | 是否录像 | 是否推理 | 输出 |
---|---|---|---|---|
第一段(构建 env) | 构造 Push-T 环境 + 包装视频录制器 + 多步 wrapper | ✅ | ❌ | 设置好环境、准备录像 |
第二段(① 单次推理) | 使用种子 10 进行一次推理并录像 | ✅ | ✅ | 1 个 demo 视频(路径自动生成) |
第三段(② 批量推理) | 遍历种子 1~100,每次都推理并保存视频 | ✅ | ✅ | 100 个 demo 视频(输出为 1.mp4~100.mp4) |
🔍 一段一段解释 & 联系:
✅ 第一段:构造环境 + 视频录制配置
env = MultiStepWrapper(VideoRecordingWrapper(PushTImageEnv(render_size=256),video_recoder=VideoRecorder.create_h264(...),file_path=None,steps_per_render=1
),
n_obs_steps=cfg.policy.n_obs_steps,
n_action_steps=cfg.policy.n_action_steps,
max_episode_steps=200)env.env.video_recoder.stop()
✅ 做了什么?
-
构建
PushTImageEnv
,也就是你要跑的模拟环境; -
包了一层
VideoRecordingWrapper
,让它可以自动录视频; -
包了
MultiStepWrapper
,允许做多步观测 → 多步动作(比如 Transformer 用 sliding window); -
暂时不指定输出文件(
file_path=None
),等你后面代码指定; -
调用
stop()
,清空之前录像器状态,防止写入冲突。
✅ 输出结果?
准备好了一个可以推理、可以录像的强化学习环境 env
。
✅ 第二段(①):用种子 10 推理一次并录像
env.seed(10)
obs = env.reset()arp_policy.eval()
done = False
while not done:action_dict = arp_policy.predict_action(prepare_obs(obs))obs, reward, done, info = env.step(...)obs = env.reset()
"demonstration is saved to ", env.env.file_path
✅ 做了什么?
-
设置种子
10
→ 保证可复现; -
开始推理一个 episode → 每步都执行推理、环境 step;
-
环境会自动调用
VideoRecorder.render()
,每步录视频; -
推理结束后,保存为
file_path
指定路径的.mp4
文件。
✅ 和第一段的联系?
-
用的是第一段构建好的环境;
-
使用未指定路径的录像器 → 所以你需要后续给它
env.env.file_path = filename
,否则视频不会保存; -
实际上这一段视频路径会在别处(如默认临时路径)或失效。
✅ 第三段(②):推理 100 次并每次保存视频
for s in trange(1, 101):env.seed(s)env.env.file_path = f'./outputs/demo/media/{s}.mp4'obs = env.reset()while not done:action = arp_policy.predict_action(...)obs, reward, done, info = env.step(...)
✅ 做了什么?
-
使用种子 1 到 100;
-
每轮推理并录像,并将结果保存为
1.mp4
,2.mp4
, ...,100.mp4
; -
每次都手动设置
env.env.file_path
→ 录像器就知道要保存在哪个文件; -
这就是一个 批量生成高质量 demo 的过程。
✅ 和前两段的联系?
-
用第一段构建好的环境;
-
和第二段代码基本一致,只不过是循环版本;
-
手动设置每次录像输出路径;
-
一次性生成一堆轨迹数据,后续可以用于 imitation learning、diffusion 训练、评估等。
✅ 最终总结图示(结构思维图)
第一段:构造环境
│
├── env = MultiStepWrapper(...)
│
└── VideoRecorder 包住环境(尚未指定 file_path)第二段(①):单条推理
│
├── env.seed(10)
├── env.reset()
├── 推理 + step + 渲染录像
└── 生成一个 demo(自动路径 或 file_path 外部设置)第三段(②):循环推理
│
├── for seed in 1~100:
│ ├── env.seed(seed)
│ ├── 设置 file_path = ./outputs/demo/media/{seed}.mp4
│ ├── 推理 + step + 渲染录像
│ └── 保存为对应视频
└── 最终输出 100 个视频
如果你想要下一步比如:
-
用这些
.mp4
转.npz
训练 diffusion policy、BC、CoL; -
评估这些 policy 表现(如 success rate);
-
把推理结果上传 HuggingFace Hub 展示;
我可以帮你接着写下去。
2.AloHa
这里有两个主流的 ALOHA 环境链接,你可以根据需求选择使用:
1. gym-aloha
(由 Hugging Face 提供,可与 Gymnasium 接口直接交互)
✅ 支持两个任务:
-
AlohaInsertion-v0
(插入任务) -
AlohaTransferCube-v0
(搬运方块任务)
快速示例:
import gymnasium as gym
import gym_alohaenv = gym.make("gym_aloha/AlohaInsertion-v0", obs_type="pixels", render_mode="rgb_array")
obs, info = env.reset()
for _ in range(1000):action = env.action_space.sample()obs, reward, terminated, truncated, info = env.step(action)img = env.render()
(github.com)
📦 安装方式:
pip install gym-aloha
2. aloha_sim
(由 Google DeepMind 开发,基于 MuJoCo,可以做桌面任务)
提供多种任务(如 Banana handover、Marker lid removal 等),支持交互和评估脚本,适合 MuJoCo 用户。
安装和使用示例如下:
pip install aloha_sim
export MUJOCO_GL='egl'
python aloha_sim/viewer.py --task_name=HandOverBanana
python aloha_sim/run_eval.py # 批量生成视频 / 测试指标
(github.com)
🎯 总结与建议
环境 | 接口类型 | 支持任务 | 推荐理由 |
---|---|---|---|
gym-aloha | Gymnasium 接口 | 插入、搬运方块任务 | 简洁易用,适合快速上手和训练管道 |
aloha_sim | MuJoCo + Python | 多桌面操控任务 | 适合需要复杂交互、真实感更强的模拟 |
🧭 探索 & 推荐
-
想用 LeRobot Pipeline 吗?:安装
pip install -e ".[aloha]"
后,就可以直接使用--env.type=aloha
运行lerobot/scripts/train.py
,一键训练 ALOHA 任务 (github.com)。 -
**想看代码、任务定义、讨论搭建?**gym-aloha 的 GitHub 上有具体说明 (github.com)。
-
**想用 MuJoCo 更加真实的行为配置?**可试试
aloha_sim
,它的评估与交互脚本对研究更友好 (github.com)。
如果你想用 LeRobot 框架跑 ALOHA 的训练 demo 或者想获取相关代码示例,我也可以帮你提供完整使用流程!