LeRobot SO-ARM101机械臂 - 【步骤四:数据采集】使用教程
·
数据采集
记录一个数据集
- 如果你想数据集保存在本地,可以直接运行:
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_id和dataset.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
此时,机械臂应该做出与你遥操记录时一样的动作。
更多推荐
所有评论(0)