跳到主要内容

Pico 4 VR 真机遥操作

Pico Sim2Sim 跑通后,使用本教程把同一条实时 Pico 输入路径部署到 真实 Unitree G1。

Pico 头显 -> Teleopit host -> retarget -> RL policy -> g1_bridge_sdk -> G1

有两种部署方式:

部署方式Teleopit 运行位置主要区别
Wired PC-to-G1外部工作站或笔记本real_robot.network_interface 设置为 PC 上连接 G1 的以太网接口
OnboardG1 onboard 计算机在 onboard 计算机安装 Teleopit;通常使用 eth0

两种方式都使用 Pico4InputProvider 和进程内 pico-bridge receiver。不存在单独的 onboard Pico 输入模式。

1. 安装运行时依赖

在运行 Teleopit 的机器上安装 Pico 和 sim2real 依赖:

pip install -e '.[pico4]'
git submodule update --init --recursive
bash scripts/setup/setup_g1_bridge.sh

验证 Pico receiver 导入:

python -c "from pico_bridge import PicoBridge; print('OK')"

2. 选择网络接口

real_robot.network_interface 是用于 Unitree DDS 通信的 Linux 网卡接口。

对于 wired PC-to-G1 部署:

  1. 用网线连接 PC 和 G1。
  2. 在 PC 上运行 ifconfig
  3. 使用连接到机器人的以太网接口,例如 enp130s0
  4. 确保 Pico 头显所在网络可以访问运行 Teleopit 的 PC。

对于 onboard 部署:

  1. 在机器人 onboard 计算机上运行 Teleopit。
  2. 确保 Pico 头显所在网络可以访问 onboard 计算机。
  3. 除非机器人网络不同,否则使用 real_robot.network_interface=eth0
  4. 如果 Pico discovery 广播了错误地址,设置 input.bridge_advertise_ip=<host-ip>

Arm Onboard 的 RealSense 配置

pico-bridge PC receiver 在所需 Python 依赖可用时支持 Arm 机器。对于需要 RealSense 预览的 Arm onboard 计算机,应在当前 Conda 环境中从 conda-forge 安装 pyrealsense2, 不要依赖 pip 包:

pip uninstall pyrealsense2
conda install -c conda-forge pyrealsense2

这只影响可选的 RealSense 预览路径(input.video.enabled=true)。Pico 追踪和机器人控制 本身不需要 RealSense。

3. 运行控制器

Wired PC 示例:

python scripts/run/run_sim2real.py \
--config-name pico4_sim2real \
controller.policy_path=track.onnx \
real_robot.network_interface=enp130s0

Onboard 示例:

python scripts/run/run_sim2real.py \
--config-name pico4_sim2real \
controller.policy_path=track.onnx \
real_robot.network_interface=eth0

操作流程

始终把 Unitree 遥控器拿在手里。L1+R1 是进入 DAMPING 的急停路径。

控制动作
Unitree remote Start进入 STANDING
Unitree remote Y进入 MOCAP
Pico/controller A暂停 / 恢复实时动捕
Unitree remote X返回 STANDING
Unitree remote L1+R1急停(DAMPING

只在 Pico 追踪稳定后进入 MOCAP。Teleopit 会在切换前验证连续动捕帧;验证失败时, 机器人会保持在 STANDING

运行时行为

Pico sim2real 使用共享的实时参考时间线:

Pico body frames -> retarget -> reference buffer -> observation -> policy -> G1 joints

进入 STANDING 时,Teleopit 会释放当前 Unitree 模式,进入 debug/low-level 控制, 短暂锁住当前关节,重置 policy 状态,并通过 Kp ramp 减少启动冲击。

进入 MOCAP 时,Teleopit 会重置 policy/reference 状态,并将参考从当前机器人状态平滑过渡到 实时 mocap 命令。

暂停 / 恢复

Pico 暂停/恢复是 mocap-session control event。

  • ACTIVE:暂停键冻结当前参考姿态。
  • PAUSED:再次按下会清空 policy/reference 状态,预热实时 buffer,重新居中 yaw/XY 对齐, 并从实时 mocap 恢复。
注意

恢复时请保持静止,并尽量接近暂停时的姿态。这样可以减少实时追踪恢复时的参考突变。

可选 RealSense 预览

将 G1 RealSense 彩色相机推送回 Pico 头显:

python scripts/run/run_sim2real.py \
--config-name pico4_sim2real \
controller.policy_path=track.onnx \
real_robot.network_interface=enp130s0 \
input.video.enabled=true \
input.video.device=<optional-realsense-serial>

如果视频失败,控制会继续运行,除非设置了 input.video.fail_on_error=true

常用参数

# G1 DDS 网卡接口
real_robot.network_interface=enp130s0

# Pico 超时时间
input.pico4_timeout=30

# 覆盖 Pico discovery 广播 IP
input.bridge_advertise_ip=192.168.1.20

# 进入 MOCAP 前要求的连续有效动捕帧数
mocap_switch.check_frames=10

# 平滑过渡到 mocap 参考
transition_duration=2.0

# 恢复前采集的实时帧数
pause_resume_warmup_steps=2

# 更换 Pico 暂停键
input.pause_button=right_axis_click

# 开启头显视频预览
input.video.enabled=true

故障排查

现象可能原因解决方法
没有收到 LowState网卡错误或 G1 网络未连接检查网线和 real_robot.network_interface
TimeoutError: No Pico4 body data头显未连接或追踪未激活检查头显 app、网络和 input.pico4_timeout
无法进入 debug modeUnitree mode 释放失败停止其他机器人模式后再次按 Start
机器人进入 STANDING 但不进入 MOCAP动捕验证失败保持追踪稳定,查看 mocap_switch.check_frames 日志
Pico 暂停没有返回 STANDING这是预期行为Pico 暂停只冻结 mocap;按遥控器 X 返回 STANDING
视频预览不可用RealSense 或视频源失败检查相机权限、input.video.source 和日志