前言
本文介绍如何基于宇树 G1 人形机器人进行 Manipulation 开发,涵盖从遥操程序 xr_teleoperate 到 unitree_IL_lerobot 的集成流程。无论使用傅利叶集成的 Lerobot(idp3)还是宇树集成的 Lerobot(π0),均可使用宇树开源的遥操代码(如 avp_teleoperate 或升级后的 xr_teleoperate)收集数据。
第一部分 基于宇树开源的 avp(xr 以前的版本) 摇操程序
通过教程《Apple Vision Pro 遥操作示例》,介绍如何使用 Apple Vision Pro 进行遥操作,以控制 Unitree H1_2 或 G1 手臂的示例程序。

开发者只需佩戴 Vision Pro,即可通过摄像头进行手势追踪以操作机器人。
以下是网络拓扑图,以 G1 机器人为例:

1.1 Ubuntu、双臂 inverse kinematics 环境配置、unitree_sdk2_python 配置
- 操作系统:Ubuntu 20.04 和 Ubuntu 22.04。
- 通信库:原
unitree_dds_wrapper已更新为 Python 版控制通信库unitree_sdk2_python。
# 安装 unitree_sdk2_python 库
git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
cd unitree_sdk2_python
pip install -e .
- 双臂逆运动学环境配置:用于求解末端位姿逆运动学相关的软件库。使用 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 安装包并解压,执行:
pip install -e .
1.2.2 证书生成相关配置
由于苹果不允许在非 HTTPS 连接上使用 WebXR,需要创建自签名证书。
- 安装 mkcert:
brew install mkcert eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" sudo apt-get install build-essential procps curl file git cd ~ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> $HOME/.bash_profile - 生成证书:
mkcert -CAROOT # 将 rootCA.pem 发送到 Apple Vision Pro sudo ufw allow 8012 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/
1.2.3 启用 Apple Vision Pro 的 WebXR 相关功能
设置 >> Apps >> Safari 浏览器 >> 高级 >> 功能标志 >> 启用 WebXR 相关功能。
进入 VR:
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 硬件清单
1.3.1 VR 和头部的双目相机
| 物品名称 | 数量 | 说明 |
|---|---|---|
| Apple Vision Pro | 1 | 参考 Apple 官方网址 |
| 计算机 | 1 | x86_64 架构 |
| 人形机器人 H1/G1 | 1 | 具体型号需匹配 |
| 灵巧手 | 1 | 如 Inspire Robotics (RH56DFX) |
| 头部双目相机 | 1 | 普通 USB 免驱动双目相机 |
| 头部相机支架 | 1 | 参考 GitHub 硬件设计文件 |
1.3.2 手腕上的深度相机 D405
| 戴机器人手腕上的英特尔 RealSense D405 相机 | 2 | 深度相机 |
| 腕部相机环形支架 | 2 | 参考 GitHub 硬件设计文件 |
| 左腕相机支架 | 1 | 参考 GitHub 硬件设计文件 |
| 右腕相机支架 | 1 | 参考 GitHub 硬件设计文件 |
1.4 启动程序
1.4.1 开启灵巧手服务
参考官方文档配置环境和编译控制程序。H1 通信建立在 DDS 框架之上,宇树提供将串口收发的数据转为 DDS 消息的示例程序。
- 下载灵巧手控制接口程序并拷贝到机器人 PC2 中。
- 编译项目:
sudo apt install libboost-all-dev libspdlog-dev
cd h1_inspire_service & mkdir build & cd build cmake .. -DCMAKE_BUILD_TYPE=Release make
3. 运行手部服务:
```bash
sudo ./inspire_hand -s /dev/ttyUSB0
./h1_hand_example
```
#### 1.4.2 开启图像推流服务 image_server
将 `image_server.py` 拷贝到机器人 PC2 中,并在 PC2 内执行:
```bash
python image_server.py
注意检查 OpenCV 读取图像时的参数是否与双目相机硬件匹配,以及默认 5555 端口是否可用。
1.4.3 启动遥操作程序
确保 G1 已经进入调试模式(阻尼:长按 L2 + 单击 B,或零力矩:长按 L2 + 单击 Y)。
操作员 A 戴上 XR 设备,访问主机 IP 地址;操作员 B 在终端按下 r 键启动远程操作程序。
启动命令示例:
# G1(29DoF) 机器人 + Dex3-1 灵巧手
python teleop_hand_and_arm.py --arm=G1_29 --hand=dex3
# 仅 G1(29DoF) 机器人
python teleop_hand_and_arm.py
# 开启数据可视化 + 录制
python teleop_hand_and_arm.py --arm=G1_23 --record
1.5 avp_teleoperate 与 OpenTeleVision 的差异对比
1.5.1 核心架构的差异对比
| 特性 | avp_teleoperate | OpenTeleVision |
|---|---|---|
| 项目定位 | Unitree 专用,支持多种机型 | 学术研究,通用远程操作框架 |
| 核心架构 | 分层设计(图像、姿态、控制) | 功能模块化(模仿学习、远程操作) |
| 技术实现 | 工业级控制,Pinocchio IK | WebRTC 通信,ACT/DETR 模型 |
1.5.2 代码结构上的差异对比
avp_teleoperate 的代码结构包含 teleop/ 目录下的核心代码,如 image_server/, open_television/, robot_control/ 等。
第二部分 xr_teleoperate:avp_teleoperate 的升级版
2025 年 7 月,宇树开源的 avp_teleoperate 升级为 xr_teleoperate,支持强脑二代手及更多 XR 设备模式扩展。
2.1 安装
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 并启动仿真环境:
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 | 启用数据录制模式 |
--motion | 启用运动控制模式 |
--headless | 启用无图形界面模式 |
--sim | 启用仿真模式 |
--xr-mode | hand(手势跟踪)/ controller(手柄跟踪) |
--arm | G1_29, G1_23, H1_2, H1 |
--ee | dex1, dex3, inspire1, brainco |
启动命令示例:
python teleop_hand_and_arm.py --xr-mode=hand --arm=G1_29 --ee=dex3 --sim --record
2.3 真机部署
2.3.1 图像服务
将 image_server.py 复制到机器人 PC2 并执行:
python image_server.py
2.3.2 BrainCo 手部服务
手动启动两个巧手的服务:
sudo ./brainco_hand --id 126 --serial /dev/ttyUSB1
sudo ./brainco_hand --id 127 --serial /dev/ttyUSB2
2.3.3 启动遥操
- 未开启运动控制模式时,确保机器人进入调试模式。
- 开启运动控制模式时,注意手柄按钮功能定义。
第三部分 unitree_IL_lerobot 的安装与运行
依据宇树官方 Github unitreerobotics/unitree_IL_lerobot 执行以下步骤。
3.1 环境安装与数据采集、转换
3.1.1 环境安装
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 数据采集
可以使用 avp_teleoperate 或 xr_teleoperate 现场采集数据,或从 HuggingFace 加载数据集。
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]
3.1.3 数据转换
将 JSON 格式转换为 LeRobot 格式:
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
3.2 训练与测试
3.2.1 训练
训练 pi0:
cd unitree_lerobot/lerobot
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=pi0
训练 diffusion policy:
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=diffusion
训练 ACT:
python lerobot/scripts/train.py \
--dataset.repo_id=unitreerobotics/G1_ToastedBread_Dataset \
--policy.type=act
3.2.2 真机测试
python unitree_lerobot/eval_robot/eval_g1/eval_g1.py \
--policy.path=unitree_lerobot/lerobot/outputs/train/... \
--repo_id=unitreerobotics/G1_ToastedBread_Dataset


