数据采集

记录一个数据集

  • 如果你想数据集保存在本地,可以直接运行:
lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=juxi/test \
    --dataset.num_episodes=5 \
    --dataset.single_task="Put the blue cube on the black box" \
    --dataset.push_to_hub=false \
    --dataset.episode_time_s=30 \
    --dataset.reset_time_s=30 

其中dateset.repo_iddataset.single_task可以自定义修改,push_to_hub=false,最后数据集会保存在主目录的~/.cache/huggingface/lerobot下会创建上述juxi/test文件夹,若使用RealSense深度相机,可自行修改运行命令

  • 如果您想使用 Hugging Face Hub 的功能来上传您的数据集,并且您之前尚未这样做,请确保您已使用具有写入权限的令牌登录,该令牌可以从 Hugging Face 设置 中生成:
hf auth login

将您的 Hugging Face 仓库名称存储在一个变量中,以运行以下命令:

hf auth whoami

记录 5 个回合并将您的数据集上传到 Hub:

lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.num_episodes=5 \
    --dataset.single_task="Put the blue cube on the black box" \
    --dataset.push_to_hub=true \
    --dataset.episode_time_s=30 \
    --dataset.reset_time_s=30 

你会看到类似如下数据:

INFO 2024-08-10 15:02:58 ol_robot.py:219 dt:33.34 (30.0hz) dtRlead: 5.06 (197.5hz) dtWfoll: 0.25 (3963.7hz) dtRfoll: 6.22 (160.7hz) dtRlaptop: 32.57 (30.7hz) dtRphone: 33.84 (29.5hz)

参数说明

  • episode_time_s: 表示每次收集数据的时间。
  • reset_time_s: 是每次数据收集之间的准备时间。
  • num_episodes: 表示预期收集多少组数据。
  • push_to_hub: 决定是否将数据上传到 HuggingFace Hub。
按键动作
右箭头 →提前终止当前剧集/重置;进入下一个
左箭头 ←取消当前剧集;重新录制
ESC立即停止会话,编码视频,并上传数据集

数据收集技巧

  • 任务建议:在不同位置抓取物体并将其放入箱子中。
  • 规模:记录 ≥50 个剧集(每个位置 10 个剧集)。
  • 一致性:
    - 保持摄像头固定。
    - 保持相同的抓取行为。
    - 确保操作的物体在摄像头画面中可见。
  • 逐步推进:
    - 先从可靠的抓取开始,然后再增加变化(新位置、抓取技巧、摄像头调整)。
    - 避免复杂性急剧增加,以防止失败。
    💡 经验法则:仅使用摄像头画面作为指导,只根据屏幕反馈的视频图像,来控制机械臂完成任务。
    如果你想要深入了解这个重要主题,可以查看我们撰写的关于什么是好的数据集的博客文章
  • 在接下来的章节中,你将训练你的神经网络。在实现可靠的抓取性能后,你可以在数据收集过程中引入更多变化,例如增加抓取位置、不同的抓取技巧以及改变相机位置。
  • 避免快速添加过多变化,因为这可能会阻碍您的结果。
  • “如果你希望将数据保存在本地 (--dataset.push_to_hub=false),请将 --dataset.repo_id=${HF_USER}/so101_test 替换为一个自定义的本地文件夹名称,例如 --dataset.repo_id=juxi/so101_test。数据将存储在系统主目录下的 ~/.cache/huggingface/lerobot
  • 如果你通过 --dataset.push_to_hub=true 将数据集上传到了 Hugging Face Hub,可以通过 在线可视化你的数据集,只需复制粘贴你的 repo id。
  • 在回合记录过程中任何时候按下右箭头 → 可提前停止并进入重置状态。重置过程中同样,可提前停止并进入下一个回合记录。
  • 在录制或重置到早期阶段时,随时按左箭头 ← 可提前停止当前剧集,并重新录制。
  • 在录制过程中随时按 ESCAPE ESC 可提前结束会话,直接进入视频编码和数据集上传。
  • 可以通过重新运行相同的命令并添加 --resume=true 来恢复录制。⚠️ 重要提示:在恢复时,需将 --dataset.num_episodes 设置为要额外记录的剧集数量(而不是数据集中目标的总剧集数量)。如果要从头开始录制,请手动删除数据集目录。
  • 在 Linux 上,如果在数据记录期间左右箭头键和 Esc 键没有效果,请确保您已设置 $DISPLAY 环境变量。参见 pynput 限制
    如果你的键盘按下后没有反应,可能你需要降低你pynput的版本,例如安装个1.6.8版本的。
    pip install pynput==1.6.8

可视化一个数据集(可跳过,可尝试)

echo ${HF_USER}/so101_test  

如果您没有使用 --dataset.push_to_hub=false ,并上传了数据,您也可以在本地通过以下命令进行可视化:

lerobot-dataset-viz \
  --repo-id ${HF_USER}/so101_test \

如果您使用了 --dataset.push_to_hub=false ,没有上传数据,您也可以通过以下命令在本地进行可视化:

lerobot-dataset-viz \
  --repo-id juxi/test \

这里,juxi 是数据收集时自定义的 repo_id 名称。
在这里插入图片描述

回放一个片段(可跳过,可尝试)

现在,尝试在您的机器人上重播第一个数据集:

lerobot-replay \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_awesome_follower_arm \
    --dataset.repo_id=${HF_USER}/record-test \
    --dataset.episode=0

此时,机械臂应该做出与你遥操记录时一样的动作。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐