在前文里,我们已为大家详细介绍了 LeRobot SO-ARM101 的开箱、组装以及舵机校准等流程(LeRobot SO-ARM101升级版开箱,为您的机械臂开发省下2个月试错成本)。今天,就让我们一同开启新环节,带领大家训练一个机械臂拾取模型,机械臂要完成的动作是:拉开抽屉,拾取积木,将积木放进抽屉,最后关上抽屉。
手臂训练数据的收集过程是这样的:
训练完成后的效果是这样的:
注意:本教程基于 Linux 环境编写 ,假设⽤户已完成环境配置、机械臂组装与校准⼯作。教程中将 Leader 称为主臂 ,Follower 称为从臂。(我们出货套件里都是包含主臂和从臂)
训练环境:Ubuntu 22.10,RTX 4060 TI (16G)
准备工作
由于 LeRobot 迭代速度较快,建议切换到教程编写时的版本:
git checkout d2645cb19fc521e5b117fe03d90a84f698d3d3f6
1. 遥控操作
完成主从臂校准后,可以通过以下脚本控制主臂遥控从臂,同时显示相机画面和电机信息:
python -m lerobot.teleoperate \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM1 \
--robot.id=follower \
--robot.cameras="{ front: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM0 \
--teleop.id=leader \
--display_data=true
参数说明:
robot.id 和 teleop.id :应与校准时提供的机械臂唯⼀ ID ⼀致 ,⽤于读取校准时保存 的电机信息。
robot.cameras :相机配置信息 ,可运⾏ python -m lerobot.find_cameras opencv 查找可⽤相机。⽀持多机位配置 ,通过字典键区分和记录不同相机。
python -m lerobot.record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM1 \
--robot.id=follower \
--robot.cameras="{ front: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30}}" \
--teleop.type=so101_leader \
--teleop.port=/dev/ttyACM0 \
--teleop.id=leader \
--display_data=true \
--dataset.num_episodes=20 \
--dataset.push_to_hub=False \
--dataset.repo_id=${HF_USER}/record-test \
--dataset.single_task="Grab the black cube"
~/.cache/huggingface/lerobot/{repo-id}
HF_LEROBOT_HOME
环境变量,数据将存储在 HF_LEROBOT_HOME/repo_id
路径下收集过程中可通过键盘控制流程:
注意:该脚本使用 pynput 监听按键,因此在 SSH 或 Wayland 下可能无法工作。
如果收集过程中出错,可在原命令基础上添加 --resume=true
参数恢复。
手动上传数据到 HuggingFace:
huggingface-cli upload ${HF_USER}/record-test ~/.cache/huggingface/lerobot/{repo-id} --repo-type dataset
注意:如果不设置 --dataset.push_to_hub=False
,收集完成时默认会自动上传数据。
训练脚本会从 HF_LEROBOT_HOME/dataset.repo_id
路径下读取数据进行训练。
python -m lerobot.scripts.train \
--dataset.repo_id=${HF_USER}/record-test \
--policy.type=act \
--output_dir=outputs/train/act_so101_test \
--job_name=act_so101_test \
--policy.device=cuda \
--wandb.enable=false \
--policy.repo_id=${HF_USER}/my_policy \
--policy.push_to_hub=false \
--steps 50000 \
--batch_size 32 \
--save_freq 10000
从最新检查点恢复训练:
python -m lerobot.scripts.train \
--config_path=outputs/train/act_so101_test/checkpoints/last/pretrained_model/train_config.json \
--resume=true
使用训练好的模型进行推理,同时记录评估片段:
python -m lerobot.record \
--robot.type=so101_follower \
--robot.port=/dev/ttyACM1 \
--robot.cameras="{ front: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30}}" \
--robot.id=follower \
--display_data=true \
--dataset.repo_id=${HF_USER}/eval_so101 \
--dataset.single_task="Put lego brick into the transparent box" \
--policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model/
注意:因为 Huggingface 的 LeRobot 文档还在不断迭代更新,所以咱们的教程也会紧跟节奏,持续为大家带来最新、最实用的内容哦。