SO-ARM100/101 录制数据集

来自Waveshare Wiki
跳转至: 导航搜索

添加摄像头

本教程使用的摄像头是 IMX335 5MP USB Camera (B)

• 以 Jetson Orin nano 为例,如果有两个摄像头,加上两个机械臂,至少需要四个 USB 接口。如果 USB 接口不足,可以将两个机械臂的 USB 线接在 USB Hub 上,将两个摄像头的 USB 线接在 Jetson Orin nano 上。
• 注意:最好不要把摄像头接在 USB Hub上,否则它的带宽索引不够,可能导致两个摄像头只有一个能用。

要查找连接到您系统的摄像头的摄像头索引,请运行以下脚本:

lerobot-find-cameras opencv

终端会打印相关摄像头信息。如:
SO-ARM10X lerobot-find-cameras.png

• 上图中系统识别到的摄像头 ID 是 /dev/video0 和 /dev/video2 。
• 您可以在 ~/lerobot/outputs/captured_images 目录中找到每台摄像头拍摄的图片。


之后,运行以下代码,您可以在遥控操作时显示摄像头画面。

lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM1 \
    --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/ttyACM0 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true

• 请注意 index_or_path 的格式,它由 lerobot-find-cameras opencv 命令输出的摄像头 ID 的最后一位数字决定。如:摄像头设备的 ID 是 /dev/video0 ,那么摄像头在系统中的设备索引是 index_or_path: 0
fourcc: "MJPG" 格式图像是经过压缩后的图像,你可以尝试更高分辨率,当然你可以尝试 YUYV 格式图像,但是这会导致图像的分辨率和FPS降低导致机械臂运行卡顿。目前 MJPG 格式下可支持3个摄像头1920*1080分辨率并且保持 30FPS , 但是依然不推荐2个摄像头通过同一个 USB HUB 接入电脑。


如果只有一个摄像头,可以运行以下代码:

lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM1 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM0 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true

如果您有更多摄像头,可以通过更改 --robot.cameras 参数来添加。

数据集制作采集

如果你想数据集保存在本地,可以直接运行:

lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM1 \
    --robot.id=my_awesome_follower_arm \
    --robot.cameras="{ front1: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30, fourcc: "MJPG"}, side1: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30, fourcc: "MJPG"}}" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM0 \
    --teleop.id=my_awesome_leader_arm \
    --display_data=true \
    --dataset.repo_id=waveshare/test \
    --dataset.num_episodes=3 \
    --dataset.single_task="Grab the black cube" \
    --dataset.push_to_hub=false \
    --dataset.episode_time_s=30 \
    --dataset.reset_time_s=30

其中 repo_id 可以自定义修改,push_to_hub=false,最后数据集会保存在主目录的 ~/.cache/huggingface/lerobot 下 会创建上述 waveshare/test 文件夹。

记录功能
record 功能提供了一套工具,用于在机器人运行期间捕获和管理数据。
1. 数据存储
• 数据以 LeRobotDataset 格式存储,并在记录过程中保存到磁盘中。
• 默认情况下,数据集在记录完成后会推送到你的 Hugging Face 页面。
• 若要禁用上传,请使用:--dataset.push_to_hub=False。
2. 检查点与恢复
• 在记录过程中会自动创建检查点。
• 如果记录过程中断,可以通过重新运行相同的命令并添加 --resume=true 来恢复记录。
⚠️ 重要提示:在恢复时,需将 --dataset.num_episodes 设置为要额外记录的剧集数量(而不是数据集中目标的总剧集数量)。
• 若要从头开始记录,请手动删除数据集目录。
3. 记录参数
通过命令行参数设置数据记录的流程:

参数 描述 默认值
--dataset.episode_time_s 每个数据集剧的持续时间(秒) 60
--dataset.reset_time_s 每个剧集后环境重置时间(秒) 60
--dataset.num_episodes 要记录的总剧集数量 50


可视化数据集

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

lerobot-dataset-viz \
    --repo-id waveshare/test \
    --episode-index 0

回放一个数据集

尝试在机械臂上重播第一个数据集:

lerobot-replay \
  --robot.type so101_follower \
  --robot.port /dev/ttyACM1 \
  --robot.id my_awesome_follower_arm \
  --dataset.repo_id waveshare/test \
  --dataset.episode 0

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