跳到主要内容
宇树 G1 人形机器人 VR 遥操作及 LeRobot 集成开发指南 | 极客日志
Python AI 算法
宇树 G1 人形机器人 VR 遥操作及 LeRobot 集成开发指南 综述由AI生成 宇树 G1 人形机器人支持通过 Apple Vision Pro 或 Meta Quest 等 XR 设备进行 VR 遥操作。文章对比了 avp_teleoperate 与升级版 xr_teleoperate 架构差异,涵盖环境配置、硬件清单(深度相机、灵巧手)、图像推流及服务启动流程。同时介绍了如何将采集的遥操作数据转换为 LeRobot 格式,利用 pi0、Diffusion Policy 或 ACT 策略进行模型训练与真机测试,实现从数据采集到策略部署的完整开发链路。
心动瞬间 发布于 2026/4/8 更新于 2026/5/21 18 浏览前言
本文介绍基于宇树 G1 人形机器人的 VR 遥操作与 LeRobot 数据训练流程。通过整合开源库 unitree_IL_lerobot,可实现从数据采集到策略部署的完整开发链路。
第一部分 基于宇树开源的 avp(xr 以前的版本) 摇操程序:让苹果 VR 摇操机器人
本部分基于教程《Apple Vision Pro 遥操作示例》进行说明。
avp 基于 Open-TeleVision 改造,对应 GitHub 地址为:github.com/unitreerobotics/avp_teleoperate
详细介绍如何使用 Apple Vision Pro 进行遥操作,以控制宇树科技的 Unitree H1_2 或 G1 手臂的示例程序。
开发者只需佩戴 Vision Pro,即可通过摄像头进行手势追踪以操作机器人。
以下是网络拓扑图,以 G1 机器人为例。
1.1 Ubuntu、双臂 inverse kinematics 环境配置、unitree_dds_wrapper 配置
Ubuntu 20.04 和 Ubuntu 22.04 操作系统下进行测试
注意,原来 h1_2 分支中的临时版本:unitree_dds_wrapper 配置
该部分用于配置计算机主机与人形机器人的 unitree_dds_wrapper ,可以使用 python 实现主机和机器人之间的通信、控制。请执行下面命令进行安装
git clone https://github.com/unitreerobotics/unitree_dds_wrapper.git
cd unitree_dds_wrapper/python
pip3 install -e .
但后来宇树更新为了 Python 版控制通信库:unitree_sdk2_python
故用下面这个即可
unitree@Host:~$ git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
(tv) unitree@Host:~$ cd unitree_sdk2_python
(tv) unitree@Host:~$ pip install -e .
双臂 inverse kinematics 环境配置
该部分用于配置人形机器人 H1 双臂(共 14 个自由度)的末端位姿逆运动学求解相关的软件库
Apple Vision Pro 获取左右两个手腕位姿后,使用 pinocchio 和 CasADi 库加载 URDF 并进行逆运动学计算,求解出到达该位姿的关节电机角度值
meshcat 库则用于调试时在 Web 端进行可视化显示
unitree@Host:~$ conda create -n tv python=3.8
unitree@Host:~$ conda activate tv
(tv) unitree@Host:~$ conda install pinocchio -c conda-forge
(tv) unitree@Host:~$ pip install meshcat
(tv) unitree@Host:~$ pip install casadi
注意
使用 pip 安装的 pinocchio 有可能不是最新版本 3.1.0,本环境需要使用 3.1.0 版本,请仔细检查
必须先安装 pinocchio 并确保安装成功,然后再进行 TeleVision 的环境配置。安装顺序颠倒可能导致会安装好的 TeleVision 环境出错
下文所有终端命令都应该在 conda 的 tv 环境内执行,除非另有说明
1.2 TeleVision 环境配置和 Apple Vision Pro 通信配置
本例程在 TeleVision 开源项目基础上修改完成,下述部分配置也可参考该项目的 README 及相关页面。在此,Isaac Gym 仿真环境用于测试配置正确性
1.2.1 基本环境配置和 Isaac Gym 安装 使用 git 克隆本项目「avp_teleoperate」至本地后,进入到项目路径下,安装基本功能库:
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 目录下执行下面命令:
1.2.2 证书生成相关配置 由于苹果不允许在非 HTTPS 连接上使用 WebXR。要在本地测试应用程序,需要创建一个自签名证书并在客户端上安装它。您需要一台 Ubuntu 机器和一个路由器。将 Apple Vision Pro 和 Ubuntu 主机 连接到同一个路由器
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
上面命令可以获取到 rootCA.pem 的路径。然后通过苹果的隔空投送功能把 rootCA.pem 文件发送到 Apple Vision Pro
假设本机 IP 地址是 192.168.123.2
创建证书
mkcert -install && mkcert -cert-file cert.pem -key-file key.pem 192.168.123.2 localhost 127.0.0.1
把生成的 cert.pem 和 key.pem 两个文件拷贝到项目的 teleop 目录下:
cp cert.pem key.pem ~/avp_teleoperate/teleop/
(tv) unitree@Host:~/avp_teleoperate$ ifconfig | grep inet
注意:Apple Vision Pro 接收文件前需要启动文件接收功能,方法是:设置 >> 通用 >> 隔空投送 >> 所有人 (10 分钟)
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
如 avp 官方 GitHub 所说
已经尝试在 PICO 4 Ultra Enterprise 和 Meta-Quest 3 上使用手部追踪进行遥操作。
更多配置步骤信息,您可以查看该 issue
1.3 硬件清单:涉及 VR、头部的双目相机、手腕上的深度相机 D405
1.3.1 VR 和头部的双目相机 Q: 双目相机可以换为其他型号吗?
A: 任意型号 USB 免驱动双目相机均可(推荐使用 FOV 较大的相机,保证操作时充足的视野)。新相机可通过 teleop/image_server/ 下的客户端 image_client.py 和服务端 image_server.py 程序进行测试
1.3.2 手腕上的深度相机 D405
1.4 启动程序 在执行遥操作的程序前,需要预先启动一些服务支撑的程序
1.4.1 开启灵巧手服务
首先到 该网址 下载灵巧手控制接口程序,并将之拷贝到 机器人 Unitree H1_2 的 PC2 中
其次,在 PC2 中解压完成后,使用下述命令进行编译
unitree@PC2:~$ sudo apt install libboost-all-dev libspdlog-dev
unitree@PC2:~$ cd h1_inspire_service & mkdir build & cd build
unitree@PC2:~/h1_inspire_service/build$ cmake .. -DCMAKE_BUILD_TYPE=Release
unitree@PC2:~/h1_inspire_service/build$ make
unitree@PC2:~/h1_inspire_service/build$ sudo ./inspire_hand -s /dev/ttyUSB0
unitree@PC2:~/h1_inspire_service/build$ ./h1_hand_example
如果发现左右灵巧手所有手指不断循环张开、闭合动作则表示成功。确认成功后,关闭 Terminal 2 中的 ./h1_hand_example 程序即可
1.4.2 开启图像推流服务 image_server 图像推流服务开启以后,可以在主机终端使用 image_client.py 测试通信是否成功(测试成功后记得关闭该程序):
(tv) unitree@Host:~/avp_teleoperate/teleop/image_server$ python image_client.py
把 avp_teleoperate/teleop/image_server 目录中的 image_server.py 拷贝到机器人 Unitree G1/H1/H1_2 的 开发计算单元 PC2 中,并在 PC2 内执行下面命令:
(tv) unitree@Host:~$ ssh [email protected] "mkdir -p ~/image_server"
(tv) unitree@Host:~$ scp ~/avp_teleoperate/teleop/image_server/image_server.py [email protected] :~/image_server/
unitree@PC2:~/image_server$ python image_server.py
注意:这里需要检查 OpenCV 读取图像时的参数是否与双目相机硬件匹配,以及对于推流使用的默认 5555 端口是否可用
特别提醒:本地代码运行前,g1 上的 image_serve(视频流) 要开启
1.4.3 启动遥操作程序
在需要使用 SDK 进行开发调试时,请务必确保 G1 已经进入调试模式 「阻尼:① 长按 L2 + 单击 B,或零力矩:长按 L2 + 单击 Y 模式下,遥控器 长按 L2 + 单击 R2 进入调试模式 」,以停止运动控制程序发送指令,这样可以避免潜在的指令冲突问题。可按下 L2+A 来确认是否进入了调试模式
最好有两名操作员来运行此程序,称为 操作员 A 和 操作员 B
首先,操作员 B 需要执行以下步骤:修改 ~/avp_teleoperate/teleop/teleop_hand_and_arm.py 中 if name == 'main ': 代码下方的 img_config 图像客户端配置,它应该与 上面的「1.3.2 开启图像推流服务」节中,你在 PC2 配置的图像服务器参数相同程序如果正常启动,终端最后一行将停留在 'Please enter the start signal (enter 'r' to start the subsequent program):' 的字符串输出
点击 Enter VR 并选择 Allow 以启动 VR 会话你将会在 Apple Vision Pro 中看到机器人的第一人称视野
接下来,操作员 B 可以在终端中按下 r 键以启动远程操作程序
此时,操作员 A 可以远程控制机器人的手臂(和灵巧手)
如果使用了--record 参数,那么操作员 B 可以在打开的'record image'窗口中按 s 键开始录制数据,再次按 s 键停止。可以根据需要重复此操作进行多次录制
注意 1:录制的数据默认存储在 avp_teleoperate/teleop/utils/data 中,使用说明见此仓库:unitree_IL_lerobot。注意 2:请在录制数据时注意您的硬盘空间大小
根据你的机器人配置选择不同的启动参数。以下是一些启动命令示例:
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=G1_29 --hand=dex3
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=G1_23
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=H1_2 --hand=inspire1
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=H1
(tv) unitree@Host:~/avp_teleoperate/teleop$ python teleop_hand_and_arm.py --arm=G1_23 --record
最后,特别提醒下,每次重新遥操时,需要重启 Quest3,确保是先启动 python 程序,后进入 VR
1.5 avp_teleoperate 与 OpenTeleVision 的差异对比
1.5.1 核心架构的差异对比 avp_teleoperate OpenTeleVision 项目定位与目标 由 Unitree Robotics 开发,专注于使用 Apple Vision Pro 控制 Unitree 系列机器人 明确支持多种 Unitree 机型:G1 (29DoF/23DoF)、H1 (4DoF)、H1_2 (7DoF) 等 基于 OpenTeleVision 等开源项目构建,但进行了针对性优化 学术研究项目,有 CoRL 2024 论文支持 更通用的远程操作框架,支持多种 VR 设备 除了远程操作,还包含模仿学习功能 核心架构差异 分层设计 ——明确分为三大模块:
image_server(图像传输)
open_television(姿态获取), 将 OpenTeleVision 作为组件集成,通过 tv_wrapper 进行封装
robot_control(机器人控制)机器人特化 :为特定机器人型号设计了专用控制器和逆运动学计算
- 针对 G1、H1_2 等不同型号实现了专用控制器 - 对 Dex3 和 Inspire 手部实现了专用控制 - 使用Pinocchio 库进行精确的逆运动学计算入口程序 :单一的 teleop_hand_and_arm.py 作为主入口,集成了所有功能
功能模块化:act(模仿学习) 和 teleop(远程操作) 两大功能模块 网络通信:更复杂的 WebRTC 通信架构,支持多种设备 研究工具:包含完整的数据收集、处理和训练流程 多入口设计:有 teleop_hand.py 和 teleop_active_cam.py 等不同功能入口技术实现差异 图像处理 - 使用专门的 image_server、image_client 架构 - 支持多相机同步(头部和手腕相机)
通用 VR 交互 - 使用 WebRTC 实现跨设备通信 - 支持本地和网络流式传输 学习功能 - 包含完整的模仿学习管线 - 使用 ACT 和 DETR 等深度学习模型
模拟环境 - 与 Isaac Gym 等模拟器集成 - 提供模拟测试环境
源码依赖与复用 - 在 LICENSE 中明确指出基于 OpenTeleVision 构建 - 复用了 OpenTeleVision 的远程操作接口,但进行了重组织 - 添加了大量针对 Unitree 机器人的专有代码 - 作为原始项目,提供了基础架构 - 更通用的实现,但缺少针对特定机器人的优化
架构组织不同
avp_teleoperate 更关注控制层次,分为图像、姿态获取、机器人控制等层
OpenTeleVision 更关注功能模块,分为远程操作和模仿学习等功能
代码复用关系
avp_teleoperate 是在 OpenTeleVision 基础上的应用和扩展
保留了核心远程操作理念,但重新组织了代码结构以适应特定机器人
技术选择
avp_teleoperate 更注重工业级控制和精确的机器人运动学
OpenTeleVision 更注重通用性、研究功能和跨平台支持
1.5.2 代码结构上的差异对比 ├── LICENSE
├── README.md
├── requirements.txt
├── assets/
│ ├── g1/
│ ├── h1_2/
│ ├── inspire_hand/
│ └── unitree_hand/
├── hardware/
├── img/
└── teleop/
├── teleop_hand_and_arm.py
├── image_server/
│ ├── image_client.py
│ └── image_server.py
├── open_television/
│ ├── constants.py
│ ├── television.py
│ └── tv_wrapper.py
├── robot_control/
│ ├── hand_retargeting.py
│ ├── robot_arm_ik.py
│ ├── robot_arm.py
│ ├── robot_hand_inspire.py
│ ├── robot_hand_unitree.py
│ └── dex_retargeting/
└── utils/
├── episode_writer.py
├── mat_tool.py
├── rerun_visualizer.py
└── weighted_moving_filter.py
├── LICENSE
├── README.md
├── requirements.txt
├── act/
│ └── detr/
├── assets/
├── img/
├── scripts/
│ ├── post_process.py
│ ├── replay_demo.py
│ └── deploy_sim.py
└── teleop/
├── dynamixel/
├── webrtc/
├── TeleVision.py
├── Preprocessor.py
├── constants_vuer.py
├── motion_utils.py
├── teleop_active_cam.py
└── teleop_hand.py
可以看出,avp_teleoperate 代码的整体结构与 TeleVision 保持一致,以下是与 Unitree Robot 相关的文件目录
avp_teleoperate/
├── act # 存放模仿学习策略相关文件
├── assets # 存放机器人 URDF 相关文件
├── scripts # 存放一些工具类文件
├── teleop # 存放遥操作主要文件
│ ├── image_server/ # 图像推流服务端与客户端相关代码
│ │ ├── image_client.py # 客户端(仅用于测试 Unitree H1_2 上的图像推流服务是否正常)
│ │ └── image_server.py # 服务端(捕获相机的图像并通过网络对外发送,该代码在 Unitree H1_2 上运行)
│ ├── robot_control/ # 存放 IK 解算、手臂控制相关文件
│ │ ├── robot_arm_ik.py # 双臂 IK 解算代码
│ │ ├── robot_arm.py # 双臂控制代码
│ │ ├── robot_hand.py # 机械手控制代码
│ │ ├── teleop_hand_and_arm.py# 遥操作的启动程序代码
│ │ └── teleop_hand.py # 可用于测试环境配置
第二部分 xr_teleoperate:avp_teleoperate 的升级版 25 年 7 月 17 日,为了搞人形机器人的另一个方向——灵巧操作,对比过市面上好几款灵巧手,考虑到最终总得选择一款,故暂时先下单买了一支强脑二代灵巧手
因为长沙分部的同事此前没搞过灵巧手,故在我司上海同事、强脑技术支持、宇树技术支持的联合指导下,快速摸索,3 天即进入了灵巧手的二次开发状态 ,这三天中,最深刻的就是其中的一惊一喜
惊的是 ,7.18 日下午,我们准备把 G1 的假手换成强脑灵巧手时,拆盖的时候,最后一个螺丝打滑了,就因为这个螺丝打滑的问题,把我们折腾的够呛
最后在 LEBA.Cui 的建议下,吉云的帮助下,找到了长沙一汽修厂的鄢总,通过一专业工具 瞬间搞定
喜的是 ,7.19 日上午,我们发现宇树此前开源的 avp_teleoperate 升级为了 xr_teleoperate ,然后刚好支持了强脑二代手『你就说巧不巧吧,可能我们也无形中催促了他们一把,嗯,可能 』,且 XR 设备支持模式扩展为手部跟踪和控制器跟踪两种
最终于 7.19 日晚上,我们搞定了 VR 遥操强脑灵巧手 (单只右手)
2.1 安装 至于系统依然是 Ubuntu 20.04 或 Ubuntu 22.04
2.1.1 基础环境
(base) unitree@Host:~$ conda create -n tv python=3.10 pinocchio=3.1.0 numpy=1.26.4 -c conda-forge
(base) unitree@Host:~$ conda activate tv
(tv) unitree@Host:~$ git clone https://github.com/unitreerobotics/xr_teleoperate.git
(tv) unitree@Host:~$ cd xr_teleoperate
(tv) unitree@Host:~/xr_teleoperate$ git submodule update --init --depth 1
(tv) unitree@Host:~/xr_teleoperate$ cd teleop/televuer
(tv) unitree@Host:~/xr_teleoperate/teleop/televuer$ pip install -e .
(tv) unitree@Host:~/xr_teleoperate/teleop/televuer$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem
(tv) unitree@Host:~/xr_teleoperate/teleop/televuer$ cd ../robot_control/dex-retargeting/
(tv) unitree@Host:~/xr_teleoperate/teleop/robot_control/dex-retargeting$ pip install -e .
(tv) unitree@Host:~/xr_teleoperate/teleop/robot_control/dex-retargeting$ cd ../../../
(tv) unitree@Host:~/xr_teleoperate$ pip install -r requirements.txt
2.1.2 unitree_sdk2_python
(tv) unitree@Host:~$ git clone https://github.com/unitreerobotics/unitree_sdk2_python.git
(tv) unitree@Host:~$ cd unitree_sdk2_python
(tv) unitree@Host:~/unitree_sdk2_python$ pip install -e .
注意 1:在 xr_teleoperate >= v1.1 版本中,unitree_sdk2_python 仓库的 commit 必须是等于或高于 404fe44d76f705c002c97e773276f2a8fefb57e4 版本
注意 2:原 h1_2 分支中的 unitree_dds_wrapper 为临时版本,现已全面转换到上述正式的 Python 版控制通信库:unitree_sdk2_python
注意 3:命令前面的所有标识符是为了提示:该命令应该在哪个设备和目录下执行。
2.2 仿真部署
2.2.1 环境配置 其次,启动 unitree_sim_isaaclab 仿真环境。假设使用 G1(29 DoF) 和 Dex3 灵巧手配置进行仿真,则启动命令示例如下
(base) unitree@Host:~$ conda activate unitree_sim_env
(unitree_sim_env) unitree@Host:~$ cd ~/unitree_sim_isaaclab
(unitree_sim_env) unitree@Host:~/unitree_sim_isaaclab$ python sim_main.py --device cpu --enable_cameras --task Isaac-PickPlace-Cylinder-G129-Dex3-Joint --enable_dex3_dds --robot_type g129
仿真环境启动后,使用鼠标左键在窗口内点击一次以激活仿真运行状态。此时,终端内输出 controller started, start main loop...。
2.2.2 启动遥操 本程序支持通过 XR 设备(比如手势或手柄)来控制实际机器人动作,也支持在虚拟仿真中运行。你可以根据需要,通过命令行参数来配置运行方式。
⚙️ 参数 📜 说明 --record【启用数据录制 模式】 按 r 键进入遥操后,按 s 键可开启数据录制,再次按 s 键可结束录制并保存本次 episode 数据。 继续按下 s 键可重复前述过程。 --motion【启用运动控制 模式】 开启本模式后,可在机器人运控程序运行下进行遥操作程序。手势跟踪 模式下,可使用 R3 遥控器 控制机器人正常行走;手柄跟踪 模式下,也可使用 手柄摇杆控制机器人行走 。 --headless【启用无图形界面 模式】 适用于本程序部署在开发计算单元(PC2)等无显示器情况 --sim【启用 仿真模式 】
⚙️ 参数 📜 说明 🔘 目前可选值 📌 默认值 --xr-mode选择 XR 输入模式(通过什么方式控制机器人) hand(手势跟踪 )controller(手柄跟踪 )hand--arm选择机器人设备类型(可参考 0. 📖 介绍) G1_29G1_23H1_2H1G1_29--ee选择手臂的末端执行器设备类型(可参考 0. 📖 介绍) dex1dex3inspire1brainco无默认值模式开关参数
根据上述参数说明以及仿真环境配置,我们假设选择手势跟踪来控制 G1(29 DoF) + Dex3 灵巧手设备,同时开启仿真模式和数据录制模式
(tv) unitree@Host:~$ cd ~/xr_teleoperate/teleop/
(tv) unitree@Host:~/xr_teleoperate/teleop/$ python teleop_hand_and_arm.py --xr-mode=hand --arm=G1_29 --ee=dex3 --sim --record
(tv) unitree@Host:~/xr_teleoperate/teleop/$ python teleop_hand_and_arm.py --ee=dex3 --sim --record
戴上您的 XR 头显设备(比如 apple Vision pro 或 pico4 ultra enterprise 等)
连接对应的 WiFi 热点
最后,在终端中按下 r 键后,正式开启遥操作程序。此时,可以远程控制机器人的手臂(和灵巧手)
在遥操过程中,按 s 键可开启数据录制,再次按 s 键可结束录制并保存数据(该过程可重复)
数据录制流程示意图如下:
注意 1:记录的数据默认存储在 xr_teleoperate/teleop/utils/data 中。数据使用说明见此仓库:unitree_IL_lerobot
注意 2:请在记录数据时注意您的硬盘空间大小
然后,将手臂形状支架到与机器人初始姿势相接近的姿势。这一步是为了避免在实际部署时,初始姿势偏差过大导致机器人产生过大的摆动
机器人初始定位地图如下
与此同时,您将在 XR 头显设备中看到机器人的第一人称视野。同时,终端打印出链接建立的信息:
websocket is connected. id :dbb8537d-a58c-4c57-b49d-cbb91bd25b90 default socket worker is up, adding clientEvents Uplink task running. id :dbb8537d-a58c-4c57-b49d-cbb91bd25b90
进入 Vuer 网页界面允许后,点击 Virtual Reality 按钮。在后续的所有对话框后,启动 VR 会话。界面如下图所示
注意 1:此 IP 地址应与您的主机 IP 地址匹配。该地址可以使用 ifconfig 等类似命令查询
注意 2:此时可能会弹出下图所示的警告信息。请点击 Advanced 按钮后,继续点击 Proceed to ip (unsafe) 按钮,使用非安全方式继续登录服务器
如果要退出程序,可以在终端窗口(或'记录图像'窗口)中按 q 键
2.3 真机部署 实际部署与仿真部署步骤基本相似,下面将重点指出不同的要点
2.3.1 图像服务 仿真环境中已经自动开启了图像服务。效果部署时,需要针对自身相机硬件类型,手动开启图像服务。步骤如下:
将 xr_teleoperate/teleop/image_server 目录中的 image_server.py 复制到宇树机器人(G1/H1/H1_2 等)的开发计算单元 PC2
(tv) unitree@Host:~$ ssh [email protected] "mkdir -p ~/image_server"
(tv) unitree@Host:~$ scp ~/xr_teleoperate/teleop/image_server/image_server.py [email protected] :~/image_server/
unitree@PC2:~/image_server$ python image_server.py
在图像服务启动后,可以在主机终端上使用 image_client.py 测试通信是否成功:
(tv) unitree@Host:~/xr_teleoperate/teleop/image_server$ python 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 的安装与运行
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 相关依赖
安装步骤如下,也可以参考 LeRobot 官方进行安装
git clone --recurse-submodules https://github.com/unitreerobotics/unitree_IL_lerobot.git
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 人形机器人进行数据采集
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
├── episode_...
└── episode_xxx
转换
转换 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
目录
前言 第一部分 基于宇树开源的 avp(xr 以前的版本) 摇操程序:让苹果 VR 摇操机器人 1.1 Ubuntu、双臂 inverse kinematics 环境配置、unitreeddswrapper 配置 安装 python 版本的 unitreeddswrapper 安装 unitreesdk2python 库 (tv) 如果您使用 pip install,请确保 pinocchio 版本为 3.1.0 1.2 TeleVision 环境配置和 Apple Vision Pro 通信配置 1.2.1 基本环境配置和 Isaac Gym 安装 1.2.2 证书生成相关配置 1.2.3 启用 Apple Vision Pro 的 WebXR 相关功能、进入 VR 1.3 硬件清单:涉及 VR、头部的双目相机、手腕上的深度相机 D405 1.3.1 VR 和头部的双目相机 1.3.2 手腕上的深度相机 D405 1.4 启动程序 1.4.1 开启灵巧手服务 构建项目 终端 1. 运行 h1 inspire 手部服务 终端 2. 运行示例 1.4.2 开启图像推流服务 image_server 提醒 1:可以通过 scp 命令将 image_server.py 传输到 PC2,然后使用 ssh 远程登录 PC2 后执行它。 假设开发计算单元 PC2 的 ip 地址为 192.168.123.164,那么传输过程示例如下: 先 ssh 登录 PC2,创建图像服务器的文件夹 将本地的 imageserver.py 拷贝至 PC2 的~/imageserver 目录下 提醒 2:目前该图像传输程序支持 OpenCV 和 Realsense SDK 两种读取图像的方式,请阅读 image_server.py 的 ImageServer 类的注释以便您根据自己的相机硬件来配置自己的图像传输服务 现在位于宇树机器人 PC2 终端 您可以看到终端输出如下: {'fps': 30, 'headcameratype': 'opencv', 'headcameraimageshape': [480, 1280], 'headcameraidnumbers': [0]} [Image Server] Head camera 0 resolution: 480.0 x 1280.0 [Image Server] Image server has started, waiting for client connections... 1.4.3 启动遥操作程序 1. G1(29DoF) 机器人 + Dex3-1 灵巧手 (实际上,G1_29 是--arm 的默认参数,可以选择不填写) 2. 仅 G1(29DoF) 机器人 3. G1 (23DoF) 机器人 4. H1_2 机器人 + 一代 Inspire 灵巧手 5. H1 机器人 6. 如果您想开启数据可视化 + 录制,还可以追加 --record 选项 1.5 avp_teleoperate 与 OpenTeleVision 的差异对比 1.5.1 核心架构的差异对比 1.5.2 代码结构上的差异对比 第二部分 xrteleoperate:avpteleoperate 的升级版 2.1 安装 2.1.1 基础环境 创建 conda 基础环境 克隆本仓库 浅克隆子模块 安装 televuer 模块 生成 televuer 模块所需的证书文件 安装 dex-retargeting 模块 安装本仓库所需的其他依赖库 2.1.2 unitreesdk2python 安装 unitreesdk2python 库,该库负责开发设备与机器人之间的通信控制功能 2.2 仿真部署 2.2.1 环境配置 2.2.2 启动遥操 实际上,由于一些参数存在默认值,该命令也可简化为: 2.3 真机部署 2.3.1 图像服务 提醒:可以通过 scp 命令将 image_server.py 传输到 PC2,然后使用 ssh 远程登录 PC2 后执行它。 假设开发计算单元 PC2 的 ip 地址为 192.168.123.164,那么传输过程示例如下: 先 ssh 登录 PC2,创建图像服务器的文件夹 将本地的 imageserver.py 拷贝至 PC2 的~/imageserver 目录下 提醒:目前该图像传输程序支持 OpenCV 和 Realsense SDK 两种读取图像的方式,请阅读 image_server.py 的 ImageServer 类的注释以便您根据自己的相机硬件来配置自己的图像传输服务。 现在位于宇树机器人 PC2 终端 您可以看到终端输出如下: {'fps': 30, 'headcameratype': 'opencv', 'headcameraimageshape': [480, 1280], 'headcameraidnumbers': [0]} [Image Server] Head camera 0 resolution: 480.0 x 1280.0 [Image Server] Image server has started, waiting for client connections... 2.3.2 BrainCo 手部服务 Terminal 1. Terminal 2. 2.3.3 启动遥操 第三部分 unitreeILlerobot 的安装与运行 3.1 环境安装与数据采集、转换 3.1.1 环境安装:LeRobot 环境安装、unitreesdk2python 下载源码 已经下载:git submodule update --init --recursive 创建 conda 环境 安装 LeRobot 安装 unitree_lerobot 3.1.2 数据采集:可以用已经录制好的 (lerobot 格式),也可以用 avp/xr 现采的 (json) 3.1.3 针对 avp/xr 现采数据的数据转换:json 格式转换到 lerobot 格式 --raw-dir 对应 json 的数据集目录 --repo-id 对应自己的 repo-id --pushtohub 是否上传到云端 --robot_type 对应的机器人类型 3.2 训练与测试 3.2.1 训练 3.2.2 真机测试 --policy.path 训练保存模型路径 --repo_id 训练加载的数据集 (为什么要用?加载数据集中第一帧状态做为起始动作) 如果你想验证模型在数据集上的表现 使用下面去测试 相关免费在线工具 加密/解密文本 使用加密算法(如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