czc20033/piper_dual_act
Piper 双臂机械臂数据集 · 摞杯子任务 Bimanual manipulation dataset collected on 4× AgileX Piper 6-DoF arms (leader–follower teleoperation) with 3 cameras, in LeRobot v3.0 format. Ready for ACT and VLA training out of the box. 配套代码、环境配置与实测调参结论见 GitHub 仓库(见页面底部)。 快速开始 · Quick start from lerobot.datasets import LeRobotDataset ds = LeRobotDataset("czc20033/piper_dual_act") print(ds.meta.total_episodes, ds.meta.total_frames, ds.meta.fps) s = ds[0] s["observation.state"]… See the full description on the dataset page: https://huggingface.co/datasets/czc20033/piper_dual_act.
Piper 双臂机械臂数据集 · 摞杯子任务
Bimanual manipulation dataset collected on 4× AgileX Piper 6-DoF arms (leader–follower teleoperation) with 3 cameras, in LeRobot v3.0 format. Ready for ACT and VLA training out of the box.
配套代码、环境配置与实测调参结论见 GitHub 仓库(见页面底部)。
快速开始 · Quick start
from lerobot.datasets import LeRobotDataset
ds = LeRobotDataset("czc20033/piper_dual_act")
print(ds.meta.total_episodes, ds.meta.total_frames, ds.meta.fps)
s = ds[0]
s["observation.state"] # (14,) float32 从臂实际关节角
s["action"] # (14,) float32 主臂关节角(人的意图)
s["observation.images.top"] # (3, 480, 640) float32, 0~1
s["task"] # "把三个杯子摞起来"训练 ACT:
lerobot-train \
--dataset.repo_id=czc20033/piper_dual_act \
--policy.type=act --policy.device=cuda --policy.push_to_hub=false \
--batch_size=8 --steps=30000 \
--dataset.eval_split=0.1 --eval_steps=2500 \
--output_dir=./outputs/act_piper --job_name=act_piperRTX 5090 上约 14.4 步/秒,3 万步约 35 分钟,显存约 8 GB。
⚠️ --dataset.eval_split 必须配合 `--eval_steps=N`, 只写 evalsplit 的话验证永远不会执行(`evalsteps` 默认为 0)。数据概览 · Overview
特征 · Features
14 维向量顺序
[0..5] 左臂 J1~J6 [7..12] 右臂 J1~J6
[6] 左夹爪 [13] 右夹爪单位统一为度(degree),夹爪也是开合角度。 LeRobot 训练时会按每维统计量自动归一化,单位本身不影响训练。
关于 action 与 state 的差值
两者含义对齐,差值即主从跟随误差。实测:
- 12 个关节:平均误差 0.06° ~ 2.24°,跟随很准
- 夹爪:误差较大(右夹爪均值约 38°)。这是正常的物理现象 —— 夹住物体时主臂被人手捏到底、从臂被物体挡住合不拢,差值即握力信息。 松开物体后跟随立即恢复。
⚠️ 数据多样性说明(请务必阅读)
我们量化了 50 段之间的相似度:
单段内关节的平均运动幅度 57.7°
任意两段之间的平均逐点差 9.4°
比值 16%各段起始姿态的标准差仅 5.9° —— 这 50 段本质上是同一条轨迹加了抖动, 每次杯子摆放位置和起始姿态都很接近。
这意味着:用这份数据训出的策略,在训练时见过的杯子位置附近表现尚可, 换到明显不同的位置容易失效。它更适合作为流程验证 / 基线复现的素材, 而非位置泛化能力的评测集。
我们主动公开这个数字,是为了让你对结果有正确预期。
采集方式 · Collection
关节空间主从遥操作:左主臂 → 左从臂,右主臂 → 右从臂。 人手拖动主臂(主臂不使能、开重力补偿),从臂复现其关节角。
采集程序的要点:
- 主从对齐后自动接入:把主臂掰到从臂附近,六关节全进容差即自动开始跟随
- 速率限幅:限幅器从"从臂当前实际位姿"起步,接入瞬间绝不突跳
- 通信看门狗:任一路主臂数据静默即两侧同时急停
- 人工判定:每段结束由人点「成功」或「丢弃」,只有成功的段落进数据集
硬件 · Hardware
实测调参结论 · Findings
在这份数据上真机验证过,部分结论与直觉相反:
- 当前推荐配置:ResNet-18(默认 backbone)+
chunk_size=100+ 训练 15 万步, 部署时执行满整个 chunk。这是真机实测的最佳组合。
- 评估模型前,先确认部署链路是对的。 我们一开始测出「3 万步 > 5 万步 > 15 万步」, 差点得出"训久了会过拟合"的结论。后来发现那轮测试的速率限幅是错的 (关节限在 30°/s,而演示数据实际最高 284°/s;夹爪又完全不限速), 手臂被拖慢、夹爪提前闭合,所有模型都抓不准,排名自然失真。 改成合理值后重测,15 万步反而最好。
- 训练 loss 和验证 loss 都不足以选模型。 训练 loss 从 0.091 单调降到 0.043 毫无反弹; 划 10% 做的验证 loss 在 2~4 万步后也走平,分辨不出 3 万和 15 万的差别 —— 因为验证集和训练集的杯子位置太像。这份数据上最终必须靠真机测试。
- 推理时执行满整个 chunk 最好。
n_action_steps=100(每 3.3 秒才看一眼相机) 直觉上像缺陷,但实测优于每 10 步重规划和时序集成。 原因:训练损失是对整 100 步一起算的,且n_obs_steps=1模型无记忆, 频繁重规划会让它反复改主意。
- 部署时速率限幅要按演示数据定。 本数据集实测关节最高 284°/s、 夹爪最高 738°/s。限幅设低了会拖慢手臂而夹爪照常瞬发 → 抓空。
- 视觉 backbone:验证 loss 上 CLIP ViT-B/16 冻结 (0.186) < CLIP 微调 (0.201) < ResNet-18 (0.213),冻结优于微调符合"参数多 + 数据少 = 过拟合"的预期。 但真机实测下来我们最终仍采用原版 ResNet-18 —— 这再次说明验证 loss 在这份数据上分辨力有限。
不同 chunk_size 之间的验证 loss 不可直接比较 —— 预测 20 步只需猜对 0.67 秒,预测 100 步要猜对 3.3 秒,后者天然更难。隐私 · Privacy
发布前抽取 544 帧跑过人脸检测,18 处检出经人工逐帧核对全部为误报 (红框落在桌面、铝型材、传感器外壳上)。视频中未发现人物出镜。
画面中可见实验室环境:桌椅、显示器(均黑屏)、另一台机械臂、设备箱, 无可辨认文字。
注:采样率约 0.8%,且 Haar 检测器对侧脸/小脸不敏感,不能保证 100%。 如发现问题请提 issue,我们会处理。
许可 · License
数据以 CC BY 4.0 发布。使用请注明来源。 配套代码以 MIT 发布。
引用 · Citation
@misc{piper_dual_act_2026,
title = {Piper Dual-Arm ACT Dataset: Cup Stacking},
author = {czc20033},
year = {2026},
howpublished = {\url{https://huggingface.co/datasets/czc20033/piper_dual_act}}
}