0. 引言:从sim2real难题到全身遥操突破
人形机器人要真正融入人类的工作空间,面临着一个核心挑战:如何让机器人拥有与人类相匹配的大范围工作空间?传统的机器人控制往往局限于上半身操作,这就像是"让机器人只能站直不动",其作业空间甚至不如一台扫地机器人。
近日,银河通用机器人携手清华大学发布的OpenWBT(Open Whole-Body Teleoperation)系统,基于其最新的R²S²(Real-world-Ready Skill Space)技术框架,彻底解决了这一问题。这不仅是技术上的突破,更是人形机器人走向实用化的关键一步。项目地址:GitHub,论文地址:arXiv:2505.10918

图1:(a)该类人机器人展示了多种适用于现实世界的基本技能,包括运动和身体姿态调整。(b)该类人机器人触碰不同高度和距离的点。(c)该类人机器人用手拾起一个盒子。
1. R²S²:构建真实世界就绪的技能空间
R²S²技术的核心思想是将复杂的全身控制问题分解为可管理的原子技能,然后通过层次化架构重新组合。正如论文中所描述的,人类拥有巨大的三维工作空间,能够与不同高度和距离的物体进行交互。要让人形机器人达到这种能力,需要同时掌握多种技能:基座定位与重定向、高度与身体姿态调整、以及末端执行器姿态控制。
传统的端到端强化学习方法在这种多技能场景下面临两大挑战:
- 优化困难:同时学习多种技能导致训练不稳定
- sim2real迁移性差:仿真到真实环境的迁移存在巨大差异
R²S²通过三个关键步骤解决了这些问题:
1.1 第一步:构建真实世界稳定的原子技能库
系统将人形机器人的全身控制分解为三种基础原子技能:
- Locomotion(移动):负责机器人的行走控制
- Body-pose-adjustment(身体姿态调整):支持机器人的蹲起和俯仰动作
- Hand-reaching(手部到达):实现精确的手部位置控制
每个技能都有专门设计的奖励函数来确保其在真实世界中的稳定性。例如,针对locomotion技能,系统使用步态引导来产生稳定的行走动作;对于body-pose-adjustment,则通过鼓励运动学和动力学对称性来实现稳定控制。
1.2 第二步:技能融合与编码
分离训练虽然保证了各个原子技能的稳定性,但无法支撑真正的全身控制,因为这需要技能间的协同与切换。R²S²采用了创新的IL+RL(Imitation Learning + Reinforcement Learning)融合策略:
- 模仿学习:学生策略从教师策略(原子技能)中继承真实世界就绪的技能先验
- 强化学习:进一步增强学生策略在技能协调和过渡方面的能力
通过条件变分自编码器,系统将所有技能编码到一个结构化的潜在空间中,形成了真正的"技能空间"。
1.3 第三步:高层规划与任务执行
有了结构化的技能空间后,高层规划策略只需从该空间中采样特定的技能组合,就能实现稳定的全身控制。这大大简化了任务执行的复杂度,使机器人可以根据任务需求灵活选择和组合不同的技能。
2. OpenWBT系统架构解析
2.1 整体架构设计
OpenWBT系统采用模块化设计,主要包含以下核心组件:
python
# OpenWBT/deploy/run_teleoperation_real.py
from deploy.config import Config
from deploy.controllers.controller import Runner_online_real_dexhand, Runner_handle_mujoco
import time
import cv2
from multiprocessing import shared_memory, Process
import threading
from datetime import datetime
import os
from deploy.teleop.open_television.tv_wrapper import TeleVisionWrapper
from deploy.teleop.robot_control.robot_arm_ik import G1_29_ArmIK
from deploy.teleop.image_server.image_client import ImageClient
import numpy as np
import torch
torch.set_printoptions(precision=3)
np.set_printoptions(precision=3)
tv_img_shape = (480, 1280, 3)
tv_img_dtype = np.uint8
tv_img_shm = shared_memory.SharedMemory(create=True, size=np.prod(tv_img_shape) * np.uint8().itemsize)
tv_img_array = np.ndarray(tv_img_shape, dtype=tv_img_dtype, buffer=tv_img_shm.buf)
从代码中可以看出系统采用了高度工程化的设计思维。首先,系统使用Python的shared_memory模块创建了一块共享内存区域来存储图像数据,这样避免了频繁的数据拷贝操作,大大提高了图像传输的效率。同时,通过多线程架构将图像接收处理独立成一个后台守护线程,确保了主控制循环不会被图像处理阻塞,保证了实时性要求。整个系统采用模块化设计,遥操作模块、机器人控制模块、图像处理模块之间完全解耦,这种设计使得系统具有良好的可维护性和可扩展性。
OpenWBT系统的核心在于其精巧的分层控制架构。系统将控制逻辑分为三个层次:Runner层 (任务协调)、Controller层 (技能控制)和Policy层 (底层执行)。

图2:我们展示了现实世界准备技能空间(Real-world-Ready Skill Space, R 2 S 2 R^2S^2 R2S2),这是一个涵盖并编码各种适用于现实世界的运动技能的技能空间。1)我们将复杂的WBC运动技能分解为一系列原始技能,每个技能都经过单独调优并进行了仿真到现实的评估。2)我们将多个原始技能集成到一个具有变分信息瓶颈的学生策略中。3)我们训练高层次的规划策略。
2.2 Runner层:任务协调与状态管理
python
# OpenWBT/deploy/controllers/controller.py
class Runner:
def __init__(self, config: Config, args) -> None:
self.config = config
self.default_controller = Controller(config, args)
if hasattr(config, "squat_config"):
squat_config = Config(f"deploy/configs/{config.squat_config}")
self.squat_controller = Controller_squat(squat_config, args)
if hasattr(config, "loco_config"):
loco_config = Config(f"deploy/configs/{config.loco_config}")
self.loco_controller = Controller_loco(loco_config, args)
self.transfer_to_loco = False
self.transfer_to_squat = False
def locoable(self):
return self.squat_controller.squat_cmd[0] > 0.72 and self.squat_controller.squat_cmd[1] < 0.05
def stopable(self):
return abs(self.loco_controller.loco_cmd[0]) < 0.1 and self.loco_controller.loco_cmd[1] < 0.1