🤗 LeRobot: Making AI for Robotics more accessible with end-to-end learning
安装环境 以下是 Jetson Nano Orin 的安装:
1 2 3 4 5 6 7 8 9 10 11 12 git clone https://github.com/huggingface/lerobot.gitcd lerobotsudo install ffmpeg python3 -m venv venvsource venv/bin/activate pip install --upgrade pip pip install pymunk pip install ".[feetech]"
以下是windows 安装:
1 2 3 4 conda create -y -n lerobot python=3.10 conda activate lerobot conda install ffmpeg=7.1.1 -c conda-forgecd lerobot && pip install -e ".[feetech]"
注意,Windows torch cuda 版本安装参考,需要先安装 windows 版本的 cuda 12.8 。 1 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128
插拔检查端口 确认主臂(人实际操控的手臂)和从臂(自主运动带夹爪的臂)的端口:
1 2 3 4 5 6 python lerobot/scripts/find_motors_bus_port.pysudo chmod 666 /dev/ttyACM0sudo chmod 666 /dev/ttyACM1
注意,windows的端口是 COMx
。
更新 config 找到 SO101RobotConfig ,替换为上述端口。
电机配置 (跳过),出厂已设置
校准 运行:
1 python lerobot/scripts/control_robot.py --robot.type=so101 --robot.cameras='{}' --control.type=calibrate --control.arms='["main_follower"]'
实际会同时校准从臂和主臂。一共四个位置,八次调试:
最终创建校准文件在 .cache 中。
遇到如下bug:
环境出现了问题,重新运行编译一次环境:
1 pip install ".[feetech]"
测试主臂操控从臂 无相机连接:
1 python lerobot/scripts/control_robot.py --robot.type=so101 --robot.cameras='{}' --control.type=teleoperate
设置相机 目前有三个相机,数据集采集先使用前两个:
WebCamera,在顶部
WebCamera,在侧边
眼在手上,可以跟随夹爪运动
运行:
1 python lerobot/common/robot_devices/cameras/opencv.py --images-dir outputs/images_from_opencv_cameras
会返回有效的 /dev/video* 节点,并保存一些图片到入 outputs/images_from_opencv_cameras 文件夹。
1 2 3 4 [...] Camera found at index 0 Camera found at index 2 [...]
通过相机控制
Jetson 下内存不足,打不开 rerun.io 窗口。
Windows 下:
1 python lerobot/scripts/control_robot.py --robot.type=so101 --control.type=teleoperate --control.display_data=true
录取数据集 获取 Hugging Face token: https://huggingface.co/settings/tokens
1 2 3 huggingface-cli login --token ${HUGGINGFACE_TOKEN} --add-to-git-credential HF_USER=$(huggingface-cli whoami | head -n 1)echo $HF_USER
在网络不好的情况下,使用 HF mirror,参考:https://hf-mirror.com/
1 2 pip install -U huggingface_hubexport HF_ENDPOINT=https://hf-mirror.com
获取到 HF_USER
之后,就可以开始录制数据集了,每个动作录取 10 次,共 50 次。
1 2 python lerobot/scripts/control_robot.py --robot.type=so101 --control.type=record --control.fps=30 --control.single_task="Grasp a charger and put it in the cup." --control.repo_id=${HF_USER} /so101_test --control.tags='[\"so101\",\"tutorial\"]' --control.warmup_time_s=5 --control.episode_time_s=30 --control.reset_time_s=12 --control.num_episodes=50 --control.display_data=true --control.push_to_hub=true
注:Jetson 中,将SO101 configs中的相机 camera_index 改为 0 and 2。如果运行时出现和上述校准时一样的configs无法覆写的问题,重新安装编译环境。
每次录制时,需要删除 cache 中的缓存,windows 在 C:/Users//.cache/huggingface/lerobot/{repo-id} 下。
Windows 下,会弹出 rerun.io 窗口,同时会有语音提示,按键操作如下:
右箭头:结束这次录制或重置操作
左箭头:撤销此次录制
ESC:结束所有录制并上传
录制画面:
本地数据集查看 注意管理员身份运行 conda powershell terminal:
1 2 3 4 5 6 7 8 python lerobot/scripts/visualize_dataset_html.py --repo-id ${HF_USER} /so101_test WARNING:root:'torchcodec' is not available in your platform, falling back to 'pyav' as a default decoder Resolving data files: 100%|████████████████████████████████████████████████████████████████████| 50/50 [00:00<?, ?it/s] * Serving Flask app 'visualize_dataset_html' * Debug mode: off INFO 2025-05-21 22:26:42 _internal.py:97 WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:9090
在线查看数据集 线上地址:https://huggingface.co/spaces/lerobot/visualize_dataset
输入 repo_id: ${HF_USER}/so101_test
查询。
重播 replay 重复录制的视频中的一集。会将动作重复一遍。
1 python lerobot/scripts/control_robot.py --robot.type=so101 --control.type=replay --control.fps=30 --control.repo_id=${HF_USER} /so101_test --control.episode=0
训练 1 python lerobot/scripts/train.py --dataset.repo_id=${HF_USER} /so101_test --policy.type=act --output_dir=outputs/train/act_so101_test --job_name=act_so101_test --policy.device=cuda
训练完成后,模型在:lerobot/outputs/train/act_so101_test/checkpoints/last
推理 1 python lerobot/scripts/control_robot.py --robot.type=so101 --control.type=record --control.fps=30 --control.single_task="Grasp a charger into the glass." --control.repo_id=${HF_USER} /eval_act_so101_test --control.tags='[\"tutorial\"]' --control.warmup_time_s=5 --control.episode_time_s=30 --control.reset_time_s=12 --control.num_episodes=50 --control.display_data=true --control.push_to_hub=true --control.policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model
视频保存在:${HF_USER}/eval_act_so101_test
推理路径:--control.policy.path=outputs/train/act_so101_test/checkpoints/last/pretrained_model
第三方视角:
眼上视角:
失败视角: