跳到主要内容宇树 G1 人形机器人 VR 遥操作与 LeRobot 数据训练指南 | 极客日志PythonAI算法
宇树 G1 人形机器人 VR 遥操作与 LeRobot 数据训练指南
宇树 G1 人形机器人支持通过 Apple Vision Pro 或 Meta Quest 等设备进行 VR 遥操作。教程涵盖 avp_teleoperate 及升级版 xr_teleoperate 的环境配置、硬件清单(含深度相机)、图像服务启动及真机部署流程。结合 unitree_IL_lerobot 框架,实现采集数据的格式转换(JSON 转 LeRobot)及策略模型(pi0、diffusion policy、ACT)的训练与真机测试,完成从数据采集到模仿学习的全链路开发。
性能调优14 浏览 前言
在具身智能领域,人形机器人的动作策略开发常涉及开源库与自研代码的结合。本文解读基于宇树 G1 的 manipulation 开发流程,涵盖从遥操程序 xr_teleoperate 到 unitree_IL_lerobot 的数据采集与模型训练。
对于人形开发的订单,背后的机器人多半基于宇树、智元、傅利叶等厂商。例如,傅利叶将 idp3 封装进了 Lerobot,而宇树通过开源库 unitree_IL_lerobot 集成了 Lerobot 及π0 策略。
无论使用哪种集成的 Lerobot,都可以用宇树开源的摇操代码 avp_teleoperate(后升级为 xr_teleoperate)去收集数据。
第一部分 基于宇树开源的 avp(xr 以前的版本) 摇操程序:让苹果 VR 摇操机器人
1.1 Ubuntu、双臂 inverse kinematics 环境配置、unitree_dds_wrapper 配置
- 操作系统:Ubuntu 20.04 和 Ubuntu 22.04。
- 通信库:原 h1_2 分支中的临时版本 unitree_dds_wrapper 已更新为 Python 版控制通信库 unitree_sdk2_python。
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip install -e .
- 逆运动学环境:用于配置人形机器人 H1 双臂(共 14 个自由度)的末端位姿逆运动学求解相关的软件库。Apple Vision Pro 获取左右两个手腕位姿后,使用 pinocchio 和 CasADi 库加载 URDF 并进行逆运动学计算。
conda create -n tv python=3.8
conda activate tv
conda install pinocchio -c conda-forge
pip install meshcat
pip install casadi
注意:使用 pip 安装的 pinocchio 有可能不是最新版本 3.1.0,本环境需要使用 3.1.0 版本,请仔细检查。
1.2 TeleVision 环境配置和 Apple Vision Pro 通信配置
1.2.1 基本环境配置和 Isaac Gym 安装
cd ~
git clone https://github.com/unitreerobotics/avp_teleoperate.git
cd avp_teleoperate
pip install -r requirements.txt
之后,在 Isaac Gym 下载页面下载 Isaac Gym 安装包并解压,然后到 IsaacGym_Preview_4_Package/isaacgym/python 目录下执行下面命令:
pip install -e .
1.2.2 证书生成相关配置
由于苹果不允许在非 HTTPS 连接上使用 WebXR。要在本地测试应用程序,需要创建一个自签名证书并在客户端上安装它。
- 安装 mkcert:使用 brew 安装 mkcert。
brew install mkcert
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
apt-get install build-essential procps curl file git
sudo
生成证书:
mkcert -CAROOT
mkcert -install && mkcert -cert-file cert.pem -key-file key.pem 192.168.123.2 localhost 127.0.0.1
cp cert.pem key.pem ~/avp_teleoperate/teleop/
防火墙设置:
sudo ufw allow 8012
1.2.3 启用 Apple Vision Pro 的 WebXR 相关功能、进入 VR
设置 >> Apps >> Safari 浏览器 >> 高级 >> 功能标志 >> 启用 WebXR 相关功能。
在新版本 Vision OS 2 系统中,该步骤有所不同:将证书通过 AirDrop 复制到 Apple Vision Pro 设备后,将会在设置 APP 中左上角账户栏的下方出现证书相关信息栏,点击进去即可启用对该证书的信任。
cd ~/avp_teleoperate/teleop
python teleop_hand.py
打开 Apple Vision Pro 的浏览器输入 https://192.168.123.2:8012?ws=wss://192.168.123.2:8012,点击 "Enter VR" 并且允许跟踪。
1.3 硬件清单:涉及 VR、头部的双目相机、手腕上的深度相机 D405
1.3.1 VR 和头部的双目相机
| 物品名称 | 数量 | 说明 |
|---|
| Apple Vision Pro | 1 | 参考 Apple 官方网址 |
| 计算机 | 1 | x86_64 架构 |
| 人形机器人 H1 | 1 | 具体型号为 H1_2 |
| 灵巧手 | 1 | H1 可搭载 Inspire Robotics (RH56DFX) 的仿人五指灵巧手 |
| 头部双目相机 | 1 | 普通 USB 免驱动双目相机,推荐使用 FOV 较大的相机 |
| 头部相机支架 | 1 | 参考 GitHub 仓库硬件设计文件 |
1.3.2 手腕上的深度相机 D405
| 物品名称 | 数量 | 说明 |
|---|
| RealSense D405 相机 | 2 | 深度相机 |
| 腕部相机环形支架 | 2 | 参考 GitHub 仓库硬件设计文件 |
| 左腕/右腕相机支架 | 各 1 | 参考 GitHub 仓库硬件设计文件 |
1.4 启动程序
在执行遥操作的程序前,需要预先启动一些服务支撑的程序。
1.4.1 开启灵巧手服务
可以参考《RH56DFX 灵巧手开发》配置相关环境和编译控制程序。
- 下载灵巧手控制接口程序,并将之拷贝到 机器人 Unitree H1_2 的 PC2 中。
- 在 PC2 中解压完成后,使用下述命令进行编译:
sudo apt install libboost-all-dev libspdlog-dev
mkdir build & cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
sudo ./inspire_hand -s /dev/ttyUSB0
./h1_hand_example
1.4.2 开启图像推流服务 image_server
把 avp_teleoperate/teleop/image_server 目录中的 image_server.py 拷贝到机器人 Unitree G1/H1/H1_2 的 开发计算单元 PC2 中,并在 PC2 内执行下面命令:
注意:这里需要检查 OpenCV 读取图像时的参数是否与双目相机硬件匹配,以及对于推流使用的默认 5555 端口是否可用。
1.4.3 启动遥操作程序
在需要使用 SDK 进行开发调试时,请务必确保 G1 已经进入调试模式「阻尼:① 长按 L2 + 单击 B,或零力矩:长按 L2 + 单击 Y 模式下,遥控器长按 L2 + 单击 R2 进入调试模式」。
- 操作员 B:修改
~/avp_teleoperate/teleop/teleop_hand_and_arm.py 中 if name == 'main': 代码下方的 img_config 图像客户端配置。
- 操作员 A:戴上 Apple Vision Pro 设备。在 Apple Vision Pro 上打开 Safari,访问对应 IP 地址。
- 启动:操作员 B 在终端中按下 r 键以启动远程操作程序。
python teleop_hand_and_arm.py --arm=G1_29 --hand=dex3
python teleop_hand_and_arm.py
python teleop_hand_and_arm.py --arm=G1_23
python teleop_hand_and_arm.py --arm=G1_23 --record
1.5 avp_teleoperate 与 OpenTeleVision 的差异对比
1.5.1 核心架构的差异对比
| 项目 | avp_teleoperate | OpenTeleVision |
|---|
| 项目定位 | 由 Unitree Robotics 开发,专注于使用 Apple Vision Pro 控制 Unitree 系列机器人 | 学术研究项目,有 CoRL 2024 论文支持,更通用的远程操作框架 |
| 核心架构 | 分层设计——image_server, open_television, robot_control | 功能模块化:act(模仿学习) 和 teleop(远程操作) |
| 技术实现 | 图像处理使用专门的 image_server、image_client 架构 | 通用 VR 交互,使用 WebRTC 实现跨设备通信 |
1.5.2 代码结构上的差异对比
avp_teleoperate 的代码结构整体结构与 TeleVision 保持一致,以下是与 Unitree Robot 相关的文件目录:
avp_teleoperate/
├── act 存放模仿学习策略相关文件
├── assets 存放机器人 URDF 相关文件
├── scripts 存放一些工具类文件
└── teleop 存放遥操作主要文件
├── image_server/ 图像推流服务端与客户端相关代码
├── robot_control/ 存放 IK 解算、手臂控制相关文件
└── utils/ 工具函数
第二部分 xr_teleoperate:avp_teleoperate 的升级版
2.1 安装
xr 整个系统的示意图和原来 avp 的差不太多。系统依然是 Ubuntu 20.04 或 Ubuntu 22.04。
2.1.1 基础环境
conda create -n tv python=3.10 pinocchio=3.1.0 numpy=1.26.4 -c conda-forge
conda activate tv
git clone https://github.com/unitreerobotics/xr_teleoperate.git
cd xr_teleoperate
git submodule update --init --depth 1
cd teleop/televuer
pip install -e .
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
cd ../robot_control/dex-retargeting/
pip install -e .
cd ../../../
pip install -r requirements.txt
2.1.2 unitree_sdk2_python
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip install -e .
注意:在 xr_teleoperate >= v1.1 版本中,unitree_sdk2_python 仓库的 commit 必须是等于或高于特定版本。
2.2 仿真部署
2.2.1 环境配置
首先,请安装 unitree_sim_isaaclab。其次,启动 unitree_sim_isaaclab 仿真环境。假设使用 G1(29 DoF) 和 Dex3 灵巧手配置进行仿真:
conda activate unitree_sim_env
cd ~/unitree_sim_isaaclab
python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex3-Joint --enable_dex3_dds --robot_type g129
2.2.2 启动遥操
| ⚙️ 参数 | 📜 说明 |
|---|
--record | 【启用数据录制模式】按 r 键进入遥操后,按 s 键可开启数据录制 |
--motion | 【启用运动控制模式】可在机器人运控程序运行下进行遥操作 |
--headless | 【启用无图形界面模式】适用于无显示器情况 |
--sim | 【启用仿真模式】 |
根据上述参数说明以及仿真环境配置,我们假设选择手势跟踪来控制 G1(29 DoF) + Dex3 灵巧手设备,同时开启仿真模式和数据录制模式:
python teleop_hand_and_arm.py --xr-mode=hand --arm=G1_29 --ee=dex3 --sim --record
程序正常启动后,戴上 XR 头显设备,连接对应的 WiFi 热点。在终端中按下 r 键后,正式开启遥操作程序。
2.3 真机部署
实际部署与仿真部署步骤基本相似,下面将重点指出不同的要点。
2.3.1 图像服务
将 xr_teleoperate/teleop/image_server 目录中的 image_server.py 复制到宇树机器人(G1/H1/H1_2 等)的开发计算单元 PC2,并在 PC2 上执行以下命令:
在图像服务启动后,可以在主机终端上使用 image_client.py 测试通信是否成功。
2.3.2 BrainCo 手部服务
请参考官方文档。安装完毕后,请手动启动两个巧手的服务:
sudo ./brainco_hand --id 126 --serial /dev/ttyUSB1
sudo ./brainco_hand --id 127 --serial /dev/ttyUSB2
2.3.3 启动遥操
- 在没有开启运动控制模式(--motion)时,请务必确保机器人已经进入调试模式(L2+R2),停止向运动控制程序发送指令。
- 如果要开启运动控制模式遥操作,请提前使用 R3 遥控确保机器人进入主运控模式。
- 开启运动控制模式(--motion)时,右手柄按钮 A 为遥操作退出功能按钮;左手柄和右手柄的两个摇杆按键同时按下为软急停按键。
第三部分 unitree_IL_lerobot 的安装与运行
依据宇树官方的 Github:unitreerobotics/unitree_IL_lerobot,按照下述这一系列步骤,逐一执行即可。
3.1 环境安装与数据采集、转换
3.1.1 环境安装:LeRobot 环境安装、unitree_sdk2_python
其次是 unitree_sdk2_python,而针对 Unitree 机器人 dds 通讯需要安装一些依赖:
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python && pip install -e .
本项的目的是使用 LeRobot 开源框架训练并测试基于 Unitree 机器人采集的数据。所以首先需要安装 LeRobot 相关依赖:
git clone --recurse-submodules https://github.com/unitreerobotics/unitree_IL_lerobot.git
git submodule update --init --recursive
conda create -y -n unitree_lerobot python=3.10
conda activate unitree_lerobot
cd lerobot && pip install -e .
cd .. && pip install -e .
3.1.2 数据采集:可以用已经录制好的 (lerobot 格式),也可以用 avp/xr 现采的 (json)
- 数据采集:通过 avp/xr 现采
想录制自己的数据集,可以使用上面第一部分介绍的 avp_teleoperate,或上面第二部分介绍的 xr_teleoperate,对 Unitree G1 人形机器人进行数据采集。
如果你想加载已经录制好的数据集,你可以从 huggingface 上加载 unitreerobotics/G1_ToastedBread_Dataset 数据集。
from lerobot.common.datasets.lerobot_dataset import LeRobotDataset
import tqdm
episode_index = 1
dataset = LeRobotDataset(repo_id="unitreerobotics/G1_ToastedBread_Dataset")
from_idx = dataset.episode_data_index["from"][episode_index].item()
to_idx = dataset.episode_data_index["to"][episode_index].item()
for step_idx in tqdm.tqdm(range(from_idx, to_idx)):
step = dataset[step_idx]
cd unitree_lerobot/lerobot
python lerobot/scripts/visualize_dataset.py \
--repo-id unitreerobotics/G1_ToastedBread_Dataset \
--episode-index 0
3.1.3 针对 avp/xr 现采数据的数据转换:json 格式转换到 lerobot 格式
如果是使用『avp_teleoperate/xr_teleoperate』现场现采的数据,其采用 JSON 格式进行存储,需要做下数据格式上的转换。
假如采集的数据存放在:$HOME/datasets/g1_grabcube_double_hand 目录中,格式如下:
g1_grabcube_double_hand/
├── episode_0001
│ ├──audios/
│ ├──colors/
│ ├──depths/
│ └──data.json
├── episode_0002
└── ...
转换 json 格式到 lerobot 格式——通过 convert_unitree_json_to_lerobot 函数,你可以根据 ROBOT_CONFIGS 去定义自己的 robot_type:
python unitree_lerobot/utils/convert_unitree_json_to_lerobot.py \
--raw-dir $HOME/datasets/g1_grabcube_double_hand \
--repo-id your_name/g1_grabcube_double_hand \
--robot_type Unitree_G1_Dex3 \
--push_to_hub true
排序和重命名:生成 lerobot 的数据集时,最好保证数据的 episode_0 命名是从 0 开始且是连续的,使用下面脚本对数据进行排序处理:
python unitree_lerobot/utils/sort_and_rename_folders.py \
--data_dir $HOME/datasets/g1_grabcube_double_hand
3.2 训练与测试
3.2.1 训练
cd unitree_lerobot/lerobot
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=pi0
cd unitree_lerobot/lerobot
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=diffusion
cd unitree_lerobot/lerobot
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=act
3.2.2 真机测试
在打开 image_server 之后,然后执行以下程序:
python unitree_lerobot/eval_robot/eval_g1/eval_g1.py \
--policy.path=unitree_lerobot/lerobot/outputs/train/2025-03-25/22-11-16_diffusion/checkpoints/100000/pretrained_model \
--repo_id=unitreerobotics/G1_ToastedBread_Dataset
如果你想验证模型在数据集上的表现,使用下面去测试:
python unitree_lerobot/eval_robot/eval_g1/eval_g1_dataset.py \
--policy.path=unitree_lerobot/lerobot/outputs/train/2025-03-25/22-11-16_diffusion/checkpoints/100000/pretrained_model \
--repo_id=unitreerobotics/G1_ToastedBread_Dataset
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online