如何搭建具身智能LeRobot-starai系列机械臂并完成自定义抓取任务
产品介绍
- 开源 & 便于二次开发 本系列舵机由华馨京科技提供,是一套开源、便于二次开发的6+1自由度机器臂解决方案。
- 支持 LeRobot 平台集成 专为与 LeRobot 平台 集成而设计。该平台提供 PyTorch 模型、数据集与工具,面向现实机器人任务的模仿学习(包括数据采集、仿真、训练与部署)。
- 丰富的学习资源 提供全面的开源学习资源,包括环境搭建,安装与调试与自定义夹取任务案例帮助用户快速上手并开发机器人应用。
- 兼容 Nvidia 平台 支持通过 reComputer Mini J4012 Orin NX 16GB 平台进行部署。
特点内容
- 零组装: 即刻上手|一开箱即踏入AI时代。
初始环境搭建
For Ubuntu X86:
- Ubuntu 22.04
- CUDA 12+
- Python 3.10
- Troch 2.6
安装与调试
安装LeRobot
需要根据你的 CUDA 版本安装 pytorch 和 torchvision 等环境。
-
安装 Miniconda: 对于 Jetson:
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh chmod +x Miniconda3-latest-Linux-aarch64.sh ./Miniconda3-latest-Linux-aarch64.sh source ~/.bashrc或者,对于 X86 Ubuntu 22.04:
mkdir -p ~/miniconda3 cd miniconda3 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3 rm ~/miniconda3/miniconda.sh source ~/miniconda3/bin/activate conda init --all -
创建并激活一个新的 conda 环境用于 LeRobot
conda create -y -n lerobot python=3.10 && conda activate lerobot -
克隆 LeRobot 仓库:
git clone https://github.com/servodevelop/lerobot.git -
使用 miniconda 时,在环境中安装 ffmpeg:
conda install ffmpeg -c conda-forge这通常会为你的平台安装使用 libsvtav1 编码器编译的 ffmpeg 7.X。如果不支持 libsvtav1(可以通过 ffmpeg -encoders 查看支持的编码器),你可以:
- 【适用于所有平台】显式安装 ffmpeg 7.X:
conda install ffmpeg=7.1.1 -c conda-forge -
安装LeRobot:
cd ~/lerobot && pip install -e .对于 Jetson Jetpack 设备(请确保在执行此步骤前按照此链接教程第 5 步安装了 Pytorch-gpu 和 Torchvision):
conda install -y -c conda-forge "opencv>=4.10.0.84" # 通过 conda 安装 OpenCV 和其他依赖,仅适用于 Jetson Jetpack 6.0+ conda remove opencv # 卸载 OpenCV pip3 install opencv-python==4.10.0.84 # 使用 pip3 安装指定版本 OpenCV conda install -y -c conda-forge ffmpeg conda uninstall numpy pip3 install numpy==1.26.0 # 该版本需与 torchvision 兼容 -
安装电机依赖:
pip install lerobot_teleoperator_pipermate #使用 pip 安装 pipermate pip install lerobot_robot_piper #使用 pip 安装 piper sudo apt update && sudo apt install can-utils ethtool -
检查 Pytorch 和 Torchvision
由于通过 pip 安装 LeRobot 环境时会卸载原有的 Pytorch 和 Torchvision 并安装 CPU 版本,因此需要在 Python 中进行检查。
import torch print(torch.cuda.is_available())如果输出结果为 False,需要根据官网教程重新安装 Pytorch 和 Torchvision。
接线
┌─────────────────┐ USB ┌─────────────────┐
│ │◄────────────────────►│ │
│ PiPER Mate │ │ 计算机 │
│ 机械臂 │ │ (Ubuntu 22.04) │
└─────────────────┘ └────────┬────────┘
│
USB
│
┌─────────────────┐ CAN ┌────────┴────────┐
│ │◄────────────────────►│ │
│ Piper │ │ CAN转USB适配器 │
│ 机械臂 │ │ │
└─────────────────┘ └─────────────────┘
手臂端口设置
在终端输入以下指令来找到两个机械臂对应的端口号:
lerobot-find-port
例如:
- 识别Leader时端口的示例输出(例如,在 Mac 上为
/dev/tty.usbmodem575E0031751,或在 Linux 上可能为/dev/ttyUSB0)
Note
如果识别不到ttyUSB0串口信息。尝试以下方法。 因为brltty在占用该USB设备号,移除掉就可以了
sudo apt remove brltty
最后,赋予权限
sudo chmod 777 /dev/ttyUSB*
配置CAN设备
Tip
将follower连接到can0
# 1. 查找所有CAN端口
bash find_all_can_port.sh
# 2. 激活can0接口(波特率1000000)
bash can_activate.sh can0 1000000
预期输出:
Both ethtool and can-utils are installed.
Interface can0 is connected to USB port 3-9.4:1.0
-------------------START-----------------------
Both ethtool and can-utils are installed.
Expected to configure a single CAN module, detected interface can0 with corresponding USB address 3-9.4:1.0.
Interface can0 is already activated with a bitrate of 1000000.
The interface name is already can0.
-------------------OVER------------------------
遥操作
您已准备好遥操作您的机器人(不包括摄像头)!运行以下简单脚本:
lerobot-teleoperate \
--robot.type=lerobot_robot_piper \
--robot.can_name=can0 \
--robot.id=my_awesome_piper_arm \
--teleop.type=lerobot_teleoperator_pipermate \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_awesome_pipermate_arm
远程操作命令将自动检测下列参数:
- 识别任何缺失的校准并启动校准程序。
- 连接机器人和远程操作设备并开始远程操作。
程序启动后,悬停按钮依旧生效。
添加摄像头
在插入您的两个 USB 摄像头后,运行以下脚本以检查摄像头的端口号,切记摄像头避免插在USB Hub上,USB Hub速率太慢会导致读不到图像数据。
lerobot-find-cameras opencv # or realsense for Intel Realsense cameras
终端将打印出以下信息。以我的笔记本为例,笔记本摄像头为Camera0和Camera1,index_or_path分别为2和4。
--- Detected Cameras ---
Camera #0:
Name: OpenCV Camera @ /dev/video2
Type: OpenCV
Id: /dev/video2
Backend api: V4L2
Default stream profile:
Format: 0.0
Width: 640
Height: 480
Fps: 30.0
--------------------
Camera #1:
Name: OpenCV Camera @ /dev/video4
Type: OpenCV
Id: /dev/video4
Backend api: V4L2
Default stream profile:
Format: 0.0
Width: 640
Height: 360
Fps: 30.0
--------------------
Finalizing image saving...
Image capture finished. Images saved to outputs/captured_images
确认外接摄像头后,将摄像头信息替换下方cameras信息您将能够在遥操作时在计算机上显示摄像头:
lerobot-teleoperate \
--robot.type=lerobot_robot_piper \
--robot.can_name=can0 \
--robot.id=my_awesome_piper_arm \
--robot.cameras="{ front: {type: opencv, index_or_path: 2, width: 640, height: 480, fps: 30}}" \
--teleop.type=lerobot_teleoperator_pipermate \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_awesome_pipermate_arm \
--display_data=true
数据集制作采集
一旦您熟悉了遥操作,您就可以开始您的第一个数据集。
记录 10 个回合:
lerobot-record \
--robot.type=lerobot_robot_piper \
--robot.can_name=can0 \
--robot.id=my_awesome_piper_arm \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video0, width: 640, height: 480, fps: 30},front: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30}}" \
--teleop.type=lerobot_teleoperator_pipermate \
--teleop.port=/dev/ttyUSB0 \
--teleop.id=my_awesome_pipermate_arm \
--display_data=true \
--dataset.repo_id=starai/record-test \
--dataset.episode_time_s=30 \
--dataset.reset_time_s=30 \
--dataset.num_episodes=10 \
--dataset.push_to_hub=False \
--dataset.single_task="Grab the black cube"
记录功能
- record提供了一套用于在机器人操作过程中捕获和管理数据的工具:
1.数据存储
- 数据使用
LeRobotDataset格式存储,并在录制过程中存储在磁盘上。
2.检查点和恢复
- 记录期间会自动创建检查点。
- 如果出现问题,可以通过使用 重新运行相同的命令来恢复。恢复录制时,必须设置为要录制的额外剧集数,而不是数据集中的目标总剧集数!
--resume=true--dataset.num_episodes - 要从头开始录制,请手动删除数据集目录。
3.记录参数
使用命令行参数设置数据记录流:
--dataset.episode_time_s=60每个数据记录插曲的持续时间(默认值:60秒)。 --dataset.reset_time_s=60每集后重置环境的持续时间(默认:60秒)。 --dataset.num_episodes=50记录的总集数(默认值:50秒)。
4.录制期间的键盘控制
使用键盘快捷键控制数据记录流:
- 按右方向键(→) : 提前停止当前情节或重置时间,然后移动到下一个。
- 按左方向键(←) :取消当前插曲并重新录制。
- 按ESC:立即停止会话,编码视频并上传数据集。
Tip
在 Linux 上,如果左右箭头键和转义键在数据记录过程中没有任何效果,请确保已设置$DISPLAY环境变量。参见 pynput 限制。
一旦你熟悉了数据记录,你就可以创建一个更大的数据集进行训练。一个好的开始任务是抓住一个物体在不同的位置,并把它放在一个垃圾箱。我们建议录制至少50集,每个地点10集。保持相机固定,并在整个录音中保持一致的抓握行为。还要确保你操纵的对象在相机上可见。一个好的经验法则是,你应该能够只看相机图像自己完成任务。
重播一个回合
播放已经录制好的动作,可以借此测试机器人动作的重复性。
lerobot-replay \
--robot.type=lerobot_robot_piper \
--robot.can_name=can0 \
--robot.id=my_awesome_piper_arm \
--dataset.repo_id=starai/record-test \
--dataset.episode=1 # choose the episode you want to replay
训练
要训练一个控制您机器人策略,以下是一个示例命令:
lerobot-train \
--dataset.repo_id=starai/record-test \
--policy.type=act \
--output_dir=outputs/train/act_piper_test \
--job_name=act_piper_test \
--policy.device=cuda \
--wandb.enable=False \
--policy.repo_id=starai/my_policy
- 我们提供了数据集作为参数。
dataset.repo_id=starai/record-test - 我们为 .这将从
configuration_act.py加载配置。重要的是,此策略将自动适应机器人的电机状态、电机动作和相机的数量已保存在您的数据集中。policy.type=actlaptopphone - 我们提供了使用权重和偏差来可视化训练图。这是可选的,但如果您使用它,请确保您已通过运行 登录。
wandb.enable=truewandb login
要从某个检查点恢复训练。
lerobot-train \
--config_path=outputs/train/act_piper_test/checkpoints/last/pretrained_model/train_config.json \
--resume=true
运行推理并评估
运行以下命令记录 10 个评估回合:
lerobot-record \
--robot.type=lerobot_robot_piper \
--robot.can_name=can0 \
--robot.id=my_awesome_piper_arm \
--robot.cameras="{ up: {type: opencv, index_or_path: /dev/video2, width: 640, height: 480, fps: 30},front: {type: opencv, index_or_path: /dev/video4, width: 640, height: 480, fps: 30}}" \
--display_data=false \
--dataset.repo_id=starai/eval_record-test \
--dataset.single_task="Put lego brick into the transparent box" \
--policy.path=outputs/train/act_piper_test/checkpoints/last/pretrained_model
# <- Teleop optional if you want to teleoperate in between episodes \
# --teleop.type=lerobot_teleoperator_violin \
# --teleop.port=/dev/ttyUSB0 \
# --teleop.id=my_awesome_leader_arm \
FAQ
-
如果使用本文档教程,请git clone本文档推荐的github仓库
https://github.com/servodevelop/lerobot.git。 -
如果遥操作正常,而带Camera的遥操作无法显示图像界面,请参考这里
-
如果在数据集遥操作过程中出现libtiff的问题,请更新libtiff版本。
conda install libtiff==4.5.0 #for Ubuntu 22.04 is libtiff==4.5.1
-
执行完安装LeRobot可能会自动卸载gpu版本的pytorch,所以需要在手动安装torch-gpu。
-
对于Jetson,请先安装Pytorch和Torchvsion再执行
conda install -y -c conda-forge ffmpeg,否则编译torchvision的时候会出现ffmpeg版本不匹配的问题。 -
在3060的8G笔记本上训练ACT的50组数据的时间大概为6小时,在4090和A100的电脑上训练50组数据时间大概为2~3小时。
-
数据采集过程中要确保摄像头位置和角度和环境光线的稳定,并且减少摄像头采集到过多的不稳定背景和行人,否则部署的环境变化过大会导致机械臂无法正常抓取。
-
数据采集命令的num-episodes要确保采集数据足够,不可中途手动暂停,因为在数据采集结束后才会计算数据的均值和方差,这在训练中是必要的数据。
-
如果程序提示无法读取USB摄像头图像数据,请确保USB摄像头不是接在Hub上的,USB摄像头必须直接接入设备,确保图像传输速率快。
参考文档
矽递科技英文Wiki文档:How to use the SO10xArm robotic arm in Lerobot | Seeed Studio Wiki
Huggingface Project:Lerobot
Huggingface:LeRobot
ACT or ALOHA:Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware
VQ-BeT:VQ-BeT: Behavior Generation with Latent Actions
Diffusion Policy:Diffusion Policy
TD-MPC:TD-MPC