Lerobot s101机械臂数据采集,模型训练,自主推理

发布时间:2026/10/14 3:17:04
Lerobot s101机械臂数据采集,模型训练,自主推理
一.Lerobot s101机械臂数据采集命令命令行lerobot-find-cameras,会显示两个采集相机的信息一个机械臂的相机一个是固定相机但是实际笔记本自带的相机也会检测到也就是检测到0,2,4三个相机但是后续在数据采集时其实只有笔记本0和从臂相机2可以检测到固定相机4检测不到原因是:USB带宽抢占问题‌参考资料12明确提到同一USB总线挂载多个UVC摄像头时未压缩的YUY2原始流会快速耗尽USB2.0的480Mbps带宽。你现在同时开3个可用摄像头0/2/4如果索引4的相机默认走YUY2编码640x48030fps的原始流单路就占18MB/s三路叠加很容易超出USB总线的带宽上限最后优先级最低的索引4设备会被挤掉无法正常输出画面。所以只能选择index_or_path: 0,和index_or_path: 2,最后我先用单相机采集只选择了index_or_path: 2进行数据采集.export HF_USERmylinuxlerobot-record–robot.typeso101_follower–robot.port/dev/ttySO101_Follower–robot.idfollower–robot.cameras‘{“handeye”: {“type”: “opencv”, “index_or_path”: 2, “width”: 640, “height”: 360, “fps”: 30}}’–teleop.typeso101_leader–teleop.port/dev/ttySO101_Leader–teleop.idleader–display_datatrue–dataset.repo_idmy_so101_dataset–dataset.single_task“pick and place object”–dataset.num_episodes5–dataset.push_to_hubfalse根据终端信息从你贴出的完整日志可以确认‌你的程序已经自动进入了正式录制状态现在已经在采集第0号回合的数据了‌完全不需要再手动按任何启动键。关键日志标识说明你最后一行打印的 Recording episode 0 就是系统正在写入数据的核心证据结合前面的关键日志状态完全确认所有硬件已经完成全部初始化主臂、从臂、索引2的机械臂相机全部成功连接无报错。 键盘监听服务已经后台启动支持快捷键操作。 程序自动跳过了等待环节直接启动了第0个回合的录制当前你的所有遥操作动作、相机画面都已经被实时同步写入数据集文件中。第二步:当前你可以直接执行的操作,正常完成示教任务‌现在直接缓慢平滑地操作主臂完成你预设的抓取/放置等完整任务即可系统会全程自动记录所有关节数据和视频帧不需要额外操作。‌用快捷键控制录制流程‌ 日志里明确标注了支持的所有快捷按键可以按需直接使用Right 方向键 / n 键‌正常结束当前回合自动保存数据并开始下一个新回合的录制。‌Left 方向键 / r 键‌丢弃当前正在录制的片段重新从头开始录制这个回合适合中途操作失误的情况。‌Esc 键 / q 键‌直接结束全部录制流程安全退出程序自动整理已保存的所有有效数据。‌可选优化提速‌ 日志提示当前流式编码未开启如果你的电脑硬件支持后续可以启动带流式编码参数的命令大幅加快单回合录制结束后的保存速度 在原命令末尾追加参数即可 --dataset.streaming_encodingtrue --dataset.encoder_threads2二. 双相机,断点续续录假设您需要继续录制export HF_USERmylinuxlerobot-record–robot.disable_torque_on_disconnecttrue–robot.typeso101_follower–robot.port/dev/ttySO101_Follower–robot.idfollower–robot.cameras‘{“handeye”: {“type”: “opencv”, “index_or_path”: 0, “width”: 640, “height”: 360, “fps”: 30}, “fixed”: {“type”: “opencv”, “index_or_path”: 2, “width”: 640, “height”: 360, “fps”: 30}}’–teleop.typeso101_leader–teleop.port/dev/ttySO101_Leader–teleop.idleader–display_datatrue–dataset.repo_id${HF_USER}/so101_test_dual_cam–dataset.num_episodes10–dataset.episode_time_s20–dataset.single_task“Grab the black cube”三. 修正后的 ‌单摄像头‌ lerobot.teleoperate 命令(这个命令只是看界面不会录制数据的)lerobot-teleoperate–robot.typeso101_follower–robot.port/dev/ttySO101_Follower–robot.idfollower–robot.cameras‘{“handeye”: {“type”: “opencv”, “index_or_path”: 2, “width”: 640, “height”: 360, “fps”: 30}}’–teleop.typeso101_leader–teleop.port/dev/ttySO101_Leader–teleop.idleader–display_datatrue使用lerobot record启动数据采集看到你的程序已经自动进入了正式录制状态现在已经在采集第0号回合的数据了‌完全不需要再手动按任何启动键注意报错:解决方式拔掉电源重新上电即可,看到以下信息表示数据采集和保存已经成功如何最终验证数据?为了 100% 确认数据可用请执行以下检查‌查看文件是否存在‌ 打开终端进入数据集保存目录默认通常在 ~/.cache/huggingface/lerobot/你的数据集名称/cd ~/.cache/huggingface/lerobot/my_so101_dataset_20260927_135142/datals -lh本地执行以下命令二次核验数据集完整性# 进入最新的数据集目录cd ~/.cache/huggingface/lerobot/LATEST_DATASET$(ls -td my_so101_dataset_* | head -1)echo “最新数据集: $LATEST_DATASET”cd $LATEST_DATASET# 检查所有核心文件echo -e “\n 文件结构检查 find . -type f | sortecho -e \n 文件大小检查 ”du -sh ./* ./videos/observation.images.handeye/chunk-000/*.mp4只要能看到data/、meta/、videos/三个目录且file-000.mp4文件大小不为0就证明数据采集完全成功可以直接用于后续可视化和模型训练。二. 模型训练根据之前的操作记录最新采集的数据集完整 ID 为my_so101_dataset_20260927_135142‌,以下是验证数据质量以及开始模型训练的完整步骤和命令。第一步验证数据集完整性与质量在开始训练前建议先通过可视化确认视频画面与动作数据是否同步且内容符合预期。保存文件后再次运行可视化命令:python -m lerobot.scripts.lerobot_dataset_viz–repo-id my_so101_dataset_20260927_135142–episode-index 0python -m lerobot.scripts.lerobot_dataset_viz–repo-id my_so101_dataset_20260927_135142–episode-index 0就可以看到rerun viewer界面了第二步:模型训练:请添加 ‌–policy.repo_id‌ 参数lerobot-train–policy.typeact–policy.repo_idmy_local_act_policy–dataset.repo_idmy_so101_dataset_20260927_135142–output_diroutput/act_my_so101_v1–batch_size8–steps2000–save_checkpoint_to_hubfalse训练时终端可以看到接下来你就可以安心等模型跑完,小数据集训练会很快,等训练结束后直接用 lerobot-eval 命令加载你刚训好的模型就能在真实的 SO101 机械臂上跑推理复现你之前录的动作了哦三.自主推理命令lerobot-record --robot.typeso101_follower --robot.port/dev/so101_follower --robot.idmy_so101_follower --teleop.typeso101_leader --teleop.port/dev/so101_leader --teleop.idmy_so101_leader --robot.disable_torque_on_disconnecttrue --robot.cameras“{handeye: {type: opencv, index_or_path: 2, width: 640, height: 360, fps: 30}}” --display_datatrue --dataset.single_task“Put lego brick into the transparent box” --policy.path/home/mylinux/lerobot/output/act_my_so101_vs/checkpoints/last/pretrained_model --policy.devicecuda --dataset.repo_idmy_user/eval_so101_run_06 --dataset.push_to_hubfalse注意有时得清除缓存文件,再运行命令:rm -rf ~/.cache/huggingface/lerobot/my_user/eval_so101_run_0N或者重命名 --dataset.repo_idmy_user/eval_so101_run_01等