数据收集

OpenArm 被设计为一个数据原生平台。 本指南涵盖了从连接摄像机到以 LeRobot 格式录制剧集的所有内容,并在每个阶段进行质量检查。

录音前

用于录音的硬件连接

数据收集需要比基本手臂控制更多的硬件。 本节介绍启动 LeRobot 之前要连接的内容和位置。

📷

腕式相机

将 USB 网络摄像头或英特尔实感 D435i 安装到末端执行器法兰。 通过 USB 3.0 连接,帧率超过 30 fps。 核实: ls /dev/video*

📖

俯视/工作区摄像机

将相机固定在工作区上方以获取全局视图。 安装在桌子上方约 60 厘米处,向下倾斜 30°。 第二个 USB 3.0 端口。

🔌

CAN总线(手臂控制)

已从设置连接。 核实: ip link show can0。 启动乐机器人之前,CAN 接口必须已启动。

👤

遥控设备

3D SpaceMouse、第二个 OpenArm 作为引导臂或游戏手柄。 带有两个 OpenArms 的领导者-跟随者提供了最高质量的演示。

相机同步注意事项: 乐机器人在主机 PC 级别为所有流添加时间戳。 对于多相机设置,请使用 USB 3.0 集线器(而不是 USB 2.0 集线器)来最大限度地减少相机帧和联合状态读数之间的延迟偏差。 目标:流之间的偏差 < 5 毫秒。

录音工作流程

分步录制工作流程

对于每个录制会话,请执行以下步骤。 每个步骤都建立在最后一个步骤的基础上 - 不要跳过步骤。

1

会前安全检查

清理工作空间(1 m 半径),验证手臂自由到达起始位置,在记录前测试急停。 看 安全页面.

2

打开CAN接口和ROS2

sudo ip link set up can0
source /opt/ros/humble/setup.bash
source ~/openarm_ws/install/setup.bash
ros2 launch openarm_ros2 openarm.launch.py use_fake_hardware:=false can_interface:=can0
3

手臂回家

在每次会话之前运行归位例程以设置参考位置。 手臂必须在末端执行器上没有负载的情况下到达其原始位置。

python3 -m openarm_can.scripts.home --interface can0
4

验证摄像头信息

在启动 LeRobot 之前检查所有摄像头是否正在直播。 如果 LeRobot 不报告,丢失的摄像头将悄悄损坏您的数据集。

# Quick camera check (press Q to exit)
python3 -c "
import cv2
for i in range(4):
    cap = cv2.VideoCapture(i)
    if cap.isOpened():
        print(f'Camera {i}: OK')
    cap.release()
"
5

设置任务场景

将物体放置在一致的起始位置。 一致的场景初始化对于策略泛化至关重要。 拍摄或标记起始配置。

6

开始乐机器人录音

source ~/.venvs/openarm/bin/activate
python -m lerobot.scripts.control_robot \
  --robot.type=openarm \
  --control.type=record \
  --control.fps=30 \
  --control.repo_id=your-username/openarm-pick-place-v1 \
  --control.num_episodes=50 \
  --control.single_task="Pick up the red cube and place it in the bin" \
  --control.warmup_time_s=5 \
  --control.reset_time_s=10

乐机器人会在每集开始前提示您。 在录制开始之前,使用 Warmup_time_s 准备好 Teleop 位置。

7

回顾并重播剧集

记录后,在最终确定数据集之前重播可疑事件。 立即删除质量差的剧集。

python -m lerobot.scripts.visualize_dataset \
  --repo_id=your-username/openarm-pick-place-v1 \
  --episode_index=0
8

推送至 HuggingFace Hub

huggingface-cli login
python -m lerobot.scripts.push_dataset_to_hub \
  --repo_id=your-username/openarm-pick-place-v1
数据集格式

乐机器人数据集格式

乐机器人以 HuggingFace 数据集格式存储数据集,使用 Parquet 文件存储表格数据,使用 MP4/PNG 文件存储图像流。 每个情节都是一系列带时间戳的观察和行动。

目录结构

your-username/openarm-pick-place-v1/
├── meta/
│   ├── info.json          # Dataset metadata, fps, shapes
│   ├── episodes.jsonl     # Per-episode metadata (task, length, outcome)
│   └── stats.json         # Min/max/mean/std for all fields
├── data/
│   └── chunk-000/
│       ├── episode_000000.parquet
│       ├── episode_000001.parquet
│       └── ...
└── videos/
    └── chunk-000/
        ├── observation.images.wrist_cam/
        │   ├── episode_000000.mp4
        │   └── ...
        └── observation.images.overhead_cam/
            └── ...

剧集数据架构

每集 Parquet 文件中的字段
观察状态 浮点数32[8] 以弧度表示的关节位置 (8 DOF)
观察速度 浮点数32[8] 关节速度(rad/s)
观察努力 浮点数32[8] 关节扭矩(Nm)
观察.图像.* 视频路径 参考 MP4 视频文件中的帧
行动 浮点数32[8] 来自远程操作设备的目标关节位置
时间戳 浮动64 Unix 时间戳(以秒为单位)
帧索引 整型64 剧集内的帧数
剧集索引 整型64 数据集中的集数
下一步完成 布尔值 剧集最后一帧为真
任务索引 整型64 任务描述查找表的索引

失败事件作为数据

OpenArm 旨在安全地记录失败的尝试,而不仅仅是成功的记录。 失败轨迹——滑移、误判、碰撞、恢复尝试——是对稳健政策泛化至关重要的一流数据。 不要自动删除故障事件。 相反,用 success 字段元数据并让训练框架决定是否使用它们。

品质保证

收集数据的质量检查表

在每次录制会话之后和推送到集线器之前,请运行此清单。 低质量的数据比低事件数对政策绩效的影响更大。

  • 1
    剧集长度一致 同一任务的所有剧集应在中位长度的 ±30% 范围内。 异常值通常表明操作员暂停、错过抓握或记录被中断。
  • 2
    没有丢失相机帧 检查每集的每个流的帧数是否达到预期。 跑步 lerobot.scripts.visualize_dataset 3-5 集来验证视频质量。
  • 3
    联合位置在安全范围内 核实 observation.state 永远不会超过联合限制 规格。 高速尖峰表明 CAN 丢失或控制故障 - 删除这些事件。
  • 4
    任务场景在剧集之间重置 每个情节必须以对象处于相同的初始位置开始。 如果您跳过重置,策略将从不一致的初始条件中学习,并且泛化能力很差。
  • 5
    相机覆盖完成 腕式摄像头应始终显示末端执行器和被操纵的物体。 头顶摄像头应显示完整的工作空间。 如果对象在剧集中离开画面,请重新调整安装座。
  • 6
    演示风格一致 所有操作员应使用相同的接近路径和抓握方式。 混合策略使政策培训变得混乱。 每个任务版本使用单个操作员,或按操作员标记情节。
  • 7
    数据集统计看起来合理 查看 meta/stats.json 录制后。 验证动作均值接近零(未卡在关节限制处),并且动作标准差足够大以显示各事件之间的变化。
  • 8
    成功率有记录 记录采集过程中的人工成功率。 对于接触丰富的任务,成功率通常为 60-70%。 成功率较低可能表明任务太艰巨; 较高可能意味着任务太容易而无法提供有用的训练信号。
下一步

从您的数据集训练策略

一旦您的数据集通过质量检查表,您就可以直接使用 LeRobot 训练 ACT 或扩散策略。

火车 ACT

python -m lerobot.scripts.train \
  --policy.type=act \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --policy.chunk_size=100 \
  --training.num_epochs=5000 \
  --output_dir=outputs/act-pick-place

列车扩散政策

python -m lerobot.scripts.train \
  --policy.type=diffusion \
  --dataset.repo_id=your-username/openarm-pick-place-v1 \
  --training.num_epochs=8000 \
  --output_dir=outputs/diffusion-pick-place

更深入: 阅读全文 数据收集管道概述 在机器人库中,可对情节结构、数据集版本控制、模拟与真实对齐以及多任务数据集组合进行彻底处理。

数据集准备好了吗? 开始训练。

将您的数据集推送到 HuggingFace 并开始训练 ACT 或扩散策略。