SO-ARM100/101 录制数据集
添加摄像头
本教程使用的摄像头是 IMX335 5MP USB Camera (B)
• 以 Jetson Orin nano 为例,如果有两个摄像头,加上两个机械臂,至少需要四个 USB 接口。如果 USB 接口不足,可以将两个机械臂的 USB 线接在 USB Hub 上,将两个摄像头的 USB 线接在 Jetson Orin nano 上。
• 注意:最好不要把摄像头接在 USB Hub上,否则它的带宽索引不够,可能导致两个摄像头只有一个能用。
要查找连接到您系统的摄像头的摄像头索引,请运行以下脚本:
lerobot-find-cameras opencv
• 上图中系统识别到的摄像头 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
此时,机器人应该做出与你遥操记录时一样的动作。
