本文章核心不是让机器人自主寻找一条路径,而是:

采集人体动作 → 将人体动作转换为机器人可执行动作 → 通过网络实时发送 → 机器人控制器保持平衡并跟踪动作。

这类系统通常称为:

  • 人形机器人动作捕捉遥操作;

  • 全身运动重定向;

  • 人到人形机器人运动模仿;

  • 示教数据采集与模仿学习。

宇树官方目前提供了面向 G1/H1 的 XR 遥操作、Kinect 遥操作、SDK2、ROS 2、MuJoCo 和 Isaac Lab 等工具。SDK2/ROS 2 的上层通信主要基于 Cyclone DDS,而 DDS 底层可运行在 UDP/IP 网络上。因此,“你们使用 UDP 和 Wi-Fi”与“官方接口使用 DDS”并不矛盾:Wi-Fi 是无线链路,UDP/IP 是传输方式,DDS 是更上层的机器人消息通信机制。


一、系统的准确定位

1. 实时遥操作模式

人穿着动作捕捉服做动作,机器人近实时模仿:

人体动作→动作捕捉数据→动作重定向→机器人目标动作→机器人执行

这一模式的目标是:

  • 低延迟;

  • 动作对应准确;

  • 网络短暂波动时机器人仍然稳定;

  • 人体动作不能让机器人超出关节和稳定性限制。

这里不一定涉及“训练”。如果动作捕捉数据经过算法转换后直接控制机器人,这属于遥操作或在线动作重定向


2. 数据采集与模仿学习模式

先让操作员完成大量动作,记录人和机器人的状态,再训练策略:

示教数据→数据清洗和对齐→策略训练→仿真验证→部署到机器人

训练完成以后,机器人可以:

  • 根据当前状态复现某个动作;

  • 根据指令完成任务;

  • 根据视觉或传感器输入自主执行动作;

  • 不再要求人始终穿动作捕捉服。

宇树官方的 unitree_lerobot 项目明确把遥操作作为 G1 数据采集方式;官方仿真项目也支持动作数据采集、回放、策略验证以及使用与真机一致的 DDS 通信接口。 

unitreerobotics/unitree_lerobot: The unitree_il_lerobot open-source project is a modification of the LeRobot open-source training framework, enabling the training and testing of data collected using the dual-arm dexterous hands of Unitree's G1 robot.

利用人体动作捕捉或机器人遥操作产生示教数据,训练动作跟踪策略、模仿学习策略或强化学习策略,再将训练得到的神经网络模型部署到机器人计算平台。

模型并不是直接“训练进电机”,而是部署到机器人上位机或机载计算机,由它实时输出关节目标或控制指令。


二、完整系统数据链路

人体操作员
   ↓
动作捕捉服及其惯性传感器
   ↓
人体骨骼姿态解算
   ↓
UDP/Wi-Fi数据接收
   ↓
坐标转换、滤波和时间同步
   ↓
人体—机器人动作重定向
   ↓
机器人运动控制与平衡控制
   ↓
DDS/UDP/IP/Wi-Fi或有线网络
   ↓
宇树机器人执行器
   ↓
机器人状态反馈
   └────────返回控制电脑

这里真正的技术难点通常不是 UDP 本身,而是以下四项:

  1. 人体姿态是否测得准确;

  2. 人体动作如何映射到机器人;

  3. 机器人如何保持平衡;

  4. 网络抖动或丢包时如何保证安全。


三、动作捕捉服如何采集人体动作

动作捕捉服通常使用多个 IMU,安装于:

  • 骨盆;

  • 胸部;

  • 头部;

  • 上臂;

  • 前臂;

  • 手部;

  • 大腿;

  • 小腿;

  • 足部。

一个 IMU 通常包含:

  • 三轴加速度计;

  • 三轴陀螺仪;

  • 有些还包含三轴磁力计。

1. 加速度计

静止或低动态时,加速度计能够感知重力方向,可以估计传感器的俯仰角和横滚角。

但在人运动时,它测到的是:

ameas​=amotion​+g+ba​+na​

其中还包含运动加速度、偏置和噪声,因此不能只用加速度计恢复稳定姿态。

2. 陀螺仪

陀螺仪测量角速度,通过积分可估计姿态:

Rk+1​=Rk​Exp([ωk​Δt]×​)

优点是短时间响应快,缺点是积分后会产生漂移。

3. 磁力计

磁力计可以提供航向参考,减小偏航漂移,但容易受到:

  • 电机;

  • 钢结构;

  • 磁铁;

  • 室内电气设备;

  • 机器人自身磁场

影响。

所以在机器人实验环境中,磁力计航向可能并不可靠。

4. 多传感器融合

动作捕捉服内部通常会使用:

  • 互补滤波;

  • 扩展卡尔曼滤波;

  • 无迹卡尔曼滤波;

  • 梯度下降姿态解算;

  • 厂商自研融合算法

将传感器数据融合成每个身体骨段的姿态。

输出一般不是原始加速度,而是:

  • 四元数;

  • 旋转矩阵;

  • 欧拉角;

  • 骨骼关节角;

  • 骨骼位置。

推荐使用四元数或旋转矩阵传输,不宜将欧拉角作为主要内部表示,因为欧拉角存在:

  • 万向锁;

  • 角度跳变;

  • 插值不自然;

  • 坐标顺序容易混淆。


四、动作捕捉数据的典型格式

每一帧数据通常类似:

Hk​={tk​,proot​,Rroot​,R1​,…,RM​}

其中:

  • (t_k):时间戳;

  • p_root:人体根节点位置;

  • R_root:骨盆或根节点姿态;

  • R_i:第 (i) 个人体骨段姿态;

  • (M):被跟踪骨段数量。

一个 UDP 数据包还应包含:

magic/version
session_id
sequence_number
capture_timestamp
body_count
joint_count
root_position
joint_quaternions
optional confidence values
CRC/checksum

这里特别重要的是:

  • sequence_number 用于发现丢包和乱序;

  • timestamp 用于估计延迟和做时间同步;

  • confidence 用于判断某个关节数据是否可信;

  • version 用于防止发送端和接收端数据结构不一致。


五、人体动作不能直接发送给机器人

这是整个系统中最核心的一点。

人的身体结构和宇树机器人的结构不完全相同:

  • 连杆长度不同;

  • 关节数量不同;

  • 关节轴方向不同;

  • 关节活动范围不同;

  • 质量分布不同;

  • 足底尺寸不同;

  • 腰部自由度不同;

  • 手部自由度不同;

  • 人可以轻松保持的姿态,机器人未必稳定。

因此不能简单执行:

qrobot​=qhuman​

必须经过动作重定向


六、人体—机器人动作重定向

动作重定向的目标是:让机器人的动作在视觉和任务意义上接近人体动作,同时满足机器人的物理约束。

可以写成一个优化问题,其中代价函数可以包含:

J=wp​Jposition​+wR​Jorientation​+wq​Jposture​+ws​Jsmooth​+wc​Jcollision​+wb​Jbalance​

1. 关节角直接映射

最简单的方法是建立人体关节与机器人关节的对应关系:

人体左肩 → 机器人左肩
人体左肘 → 机器人左肘
人体右髋 → 机器人右髋
人体右膝 → 机器人右膝

然后进行:

qr,j​=sj​qh,i​+bj​

其中:

  • (s_j):比例或方向修正;

  • (b_j):零位偏置。

优点

  • 简单;

  • 延迟低;

  • 容易实现。

问题

  • 人和机器人关节轴通常不同;

  • 某个机器人关节可能没有直接的人体对应;

  • 肩部、腰部和腕部误差比较明显;

  • 容易触发关节限位;

  • 不能保证末端位置准确;

  • 不能自动保证平衡。

这种方法更适合初步调试或单关节动作,不适合高质量全身动作。


2. 末端位姿映射

把人体的手、脚、头和骨盆姿态转换成机器人期望末端位姿,然后通过逆运动学求机器人关节角:

这种方式比直接复制关节角更加合理,因为它强调:

  • 手的位置;

  • 手的方向;

  • 脚的位置;

  • 头部朝向;

  • 骨盆姿态。


3. 比例缩放

由于人与机器人连杆尺寸不同,不能直接复制绝对位置。

例如人体手相对肩部的位置,可以按照臂长比例转换,但实际系统通常不是简单等比例缩放,而会分别处理:

  • 上臂;

  • 前臂;

  • 躯干;

  • 大腿;

  • 小腿;

  • 双臂间距。


4. 坐标系转换

动作捕捉系统、电脑程序和宇树机器人可能使用不同坐标定义:

  • (x) 向前还是向右;

  • (y) 向左还是向前;

  • (z) 向上还是向下;

  • 左手坐标系还是右手坐标系;

  • 四元数顺序是 (wxyz) 还是 (xyzw)。

正确转换通常为:

RTJ​=RTM​MTJ​

其中:

  • (M):动作捕捉坐标系;

  • (R):机器人坐标系;

  • (J):人体关节或骨段。

姿态转换应使用:

RRJ​=RRM​MRJ​JRoffset​

七、初始化和人体标定

每次穿戴动作捕捉服后,通常都要进行标定。

1. 传感器零偏标定

操作员保持静止,用于估计:

  • 陀螺仪偏置;

  • 初始重力方向;

  • 初始航向;

  • 各 IMU 的安装姿态。

2. T-pose 或 A-pose 标定

操作者站在标准姿态中,建立:

Roffset,i​=Rrobot,i0​(Rhuman,i0​)−1

后续人体姿态乘上这个偏置,才能得到机器人对应的目标方向。

3. 身体尺寸标定

应至少记录:

  • 身高;

  • 肩宽;

  • 臂长;

  • 前臂长度;

  • 躯干长度;

  • 腿长;

  • 髋宽。

不做尺寸标定会使末端位置映射失真。


八、机器人平衡控制不能由动作服替代

对于宇树 G1 或 H1,人做出的动作不一定满足机器人稳定条件。

例如人向一侧大幅倾斜时,可以通过脚踝肌肉、脚趾和快速迈步恢复平衡,但机器人的:

  • 足底面积;

  • 脚踝能力;

  • 关节速度;

  • 电机力矩;

  • 控制延迟

都与人不同。

因此,全身动作重定向必须加入稳定性约束。


1. 支撑多边形

机器人站立时,足底接触区域构成支撑多边形。

简单静态条件下,质心投影应位于支撑多边形内,如果人体动作映射后使机器人质心投影超出支撑区域,机器人可能倾倒。


2. 动态稳定

机器人运动时不能只看静态质心,还要考虑:

  • 质心速度;

  • 角动量;

  • 足底接触力;

  • 零力矩点;

  • 捕获点;

  • 迈步恢复能力。

因此,全身控制器通常会:

  • 保留人体上肢动作;

  • 限制躯干倾斜;

  • 自动调整骨盆;

  • 自动修正膝关节;

  • 重新分配双脚受力;

  • 必要时生成恢复步。


3. 上肢遥操作与下肢自主稳定

工程上最安全、最常见的结构之一是:

人体头部、手臂、手部动作
              ↓
       直接参与动作重定向

人体腿部和骨盆动作
              ↓
    只作为参考或高层意图

机器人下肢
              ↓
由机器人步态和平衡控制器自主控制

也就是说,操作者主要控制:

  • 双臂;

  • 双手;

  • 头部;

  • 腰部的有限动作;

而机器人底层控制器负责:

  • 站立;

  • 踏步;

  • 重心转移;

  • 防摔;

  • 双足接触。


九、UDP、Wi-Fi、DDS之间是什么关系

这三者位于不同层级。

动作/关节消息
        ↓
DDS、ROS 2消息或自定义协议
        ↓
UDP
        ↓
IP
        ↓
Wi-Fi或以太网

1. Wi-Fi

Wi-Fi 是无线局域网链路,解决的是:

数据通过什么无线介质,从电脑发送到机器人。

Wi-Fi 本身不规定动作数据长什么样。

2. UDP

UDP 是传输层协议,特点是:

  • 无连接;

  • 不保证到达;

  • 不保证顺序;

  • 不自动重传;

  • 报文边界清晰;

  • 协议开销较小;

  • 适合实时状态流。

动作捕捉数据通常允许偶尔丢一帧,但不能接受为了重传旧数据而产生较大延迟,所以 UDP 比传统可靠字节流更常用于实时姿态传输。

3. DDS

DDS 是发布—订阅式数据通信中间件。它负责:

  • Topic;

  • 发布者和订阅者;

  • 数据类型;

  • QoS;

  • 消息发现;

  • 通信组织。

宇树 SDK2 和 ROS 2 官方接口采用 Cyclone DDS 实现机器人通信和控制,并支持 G1、H1、Go2、B2 等相应平台或消息接口。 (GitHub)

因此,你们可能存在两段通信:

动作捕捉服
   └──自定义UDP/Wi-Fi──> 控制电脑

控制电脑
   └──Unitree SDK2 / DDS / UDP-IP──> 宇树机器人

这比笼统地说“动作通过 UDP 传到机器人”更加准确。


十、UDP适合实时动作,但必须自行处理的问题

1. 丢包

假设发送频率为 60 Hz,每帧编号:n=1001,1002,1003,\ldots

如果收到:1001,1002,1004

则说明第 1003 帧丢失。

处理方法通常不是等待重传,而是:

  • 保持上一目标;

  • 插值;

  • 外推一小段时间;

  • 降低目标速度;

  • 超过阈值后进入安全模式。


2. 乱序

UDP 数据可能晚到。

控制端应遵循:

nreceived​≤nlast​⇒丢弃

不能让旧动作覆盖新动作。


3. 延迟

端到端延迟可分为:

Ttotal​=Tcapture​+Tfusion​+Tnetwork​+Tretarget​+Tcontrol​+Tactuator​

只优化网络延迟不够。如果动作服内部融合用了较长滤波窗口,或者电脑端算法积累多帧后才处理,也会产生明显延迟。


4. 抖动

即使平均延迟较小,每一帧延迟不同也会造成动作不平滑。

例如:

第1帧:10 ms
第2帧:12 ms
第3帧:48 ms
第4帧:9 ms

这就是网络抖动。

可使用很短的抖动缓冲区,但缓冲区越大,动作越平滑,延迟也越大。因此需要在两者之间权衡。


5. 分包

UDP 单包过大会发生 IP 分片。一旦一个分片丢失,整帧都无法重组。

因此动作数据包应尽量小,通常:

  • 使用二进制结构;

  • 不发送冗长 JSON;

  • 不在每帧重复发送关节名称;

  • 固定关节顺序;

  • 避免超过网络路径 MTU。


十一、动作数据需要滤波,但不能过度滤波

动作捕捉存在:

  • 高频噪声;

  • IMU 漂移;

  • 偶发跳变;

  • 人体自然震颤;

  • 网络抖动。

可以使用:

1. 低通滤波

优点是简单,缺点是会引入相位滞后。

2. One Euro Filter

它根据运动速度动态调整截止频率:

  • 静止时加强滤波,减少抖动;

  • 快速运动时减弱滤波,减少延迟。

因此很适合交互式姿态和手势跟踪。

3. 四元数插值

姿态不能直接对四元数四个元素随便做普通线性插值,通常使用:

q(t)=SLERP(q0​,q1​,λ)

同时应处理四元数符号等价问题:

q≡−q

否则可能发生姿态突然绕远路旋转。

4. 速度和加速度限制器

即使目标姿态突然跳变,也不能直接发送:

qd​(k)=qcapture​(k)

应限制,必要时还限制 jerk,从而防止电机冲击。


十二、电脑程序内部应有哪些模块

一个合理的软件结构如下。

线程一:动作捕捉接收

职责:

  • 接收 UDP;

  • 验证包头;

  • 解析人体骨骼;

  • 检查序号;

  • 检查时间戳;

  • 丢弃旧帧;

  • 写入无锁缓冲区。

线程二:姿态预处理

职责:

  • 坐标系转换;

  • T-pose 偏置校正;

  • 四元数归一化;

  • 异常值检测;

  • 平滑;

  • 短时丢帧补偿。

线程三:动作重定向

职责:

  • 人体尺寸缩放;

  • 逆运动学;

  • 关节限位;

  • 自碰撞约束;

  • 手脚任务约束;

  • 质心和平衡约束。

线程四:机器人控制

职责:

  • 获取机器人实时状态;

  • 根据当前状态计算安全目标;

  • 生成关节位置、速度或力矩命令;

  • 通过 SDK2/DDS 发布命令;

  • 监控跟踪误差。

线程五:数据记录

同时保存:

  • 人体原始姿态;

  • 处理后人体姿态;

  • 机器人目标动作;

  • 机器人实际状态;

  • 电机状态;

  • IMU;

  • 足端接触;

  • 图像;

  • 时间戳;

  • 网络统计。

不能只记录人的动作。训练机器人策略时,机器人真实状态和任务环境信息同样重要。


十三、数据训练到底训练什么

根据目标不同,可以训练三类模型。

1. 动作跟踪策略

目标是让机器人稳定追踪人体重定向后的动作。

这种策略常通过:

  • 强化学习;

  • 模仿学习加强化学习;

  • 运动先验;

  • 仿真随机化

训练。


2. 行为克隆

优点是简单,缺点是:

  • 容易受示教误差影响;

  • 离开训练分布后可能累积误差;

  • 人做得好不等于机器人能直接做;

  • 需要高质量、同步的机器人动作标签。


3. 视觉—动作策略

如果机器人要看着环境自主做任务,输入还包括:

  • 头部相机;

  • 手腕相机;

  • 深度图;

  • 任务语言;

  • 机器人本体状态。

这里动作捕捉服主要用于产生示教,而不是部署时持续使用。


十四、真机部署前为什么必须仿真

建议流程:

动作捕捉数据
      ↓
离线动作重定向
      ↓
MuJoCo或Isaac Lab回放
      ↓
检查关节限位、碰撞、足底接触和平衡
      ↓
训练动作跟踪策略
      ↓
仿真扰动和参数随机化
      ↓
悬挂状态真机测试
      ↓
低增益、限速测试
      ↓
自由站立测试

宇树官方提供基于 SDK2 的 MuJoCo 仿真项目,控制程序可以从仿真较方便地迁移到实体机器人;Isaac Lab 项目也采用与实体机器人一致的 DDS 接口,支持数据采集、回放和策略验证。

仿真主要用于发现:

  • 关节方向错误;

  • 零位错误;

  • 动作超限;

  • 自碰撞;

  • 足底打滑;

  • 质心失稳;

  • 控制频率不匹配;

  • 策略输出发散。

但仿真通过不等于真机安全,还需要处理仿真到真实之间的差异。


十五、逻辑框架

第一阶段:人体动作采集
────────────────────────
操作员穿戴动作捕捉服
        ↓
各身体部位IMU采样
加速度、角速度、磁场
        ↓
动作捕捉系统姿态融合
        ↓
输出人体骨架姿态
根节点位置 + 各骨段四元数 + 时间戳


第二阶段:网络传输
────────────────────────
人体骨架数据编码
        ↓
添加帧号、时间戳和校验信息
        ↓
UDP/IP
        ↓
Wi-Fi无线局域网
        ↓
控制电脑接收
        ↓
丢包、乱序和延迟检测


第三阶段:数据预处理
────────────────────────
坐标系转换
        ↓
T-pose/A-pose标定
        ↓
传感器安装偏差补偿
        ↓
四元数连续性处理
        ↓
滤波、插值和异常值剔除
        ↓
统一时间轴


第四阶段:动作重定向
────────────────────────
人体骨架与机器人骨架匹配
        ↓
身体尺寸与连杆长度缩放
        ↓
手、脚、头和骨盆目标生成
        ↓
逆运动学或优化求解
        ↓
关节限位、自碰撞检查
        ↓
速度、加速度和jerk限制
        ↓
质心与支撑稳定性约束
        ↓
生成机器人参考动作


第五阶段:机器人实时控制
────────────────────────
读取宇树机器人实时状态
关节角、速度、IMU、足端状态
        ↓
全身控制器或学习型跟踪策略
        ↓
生成安全关节目标
        ↓
Unitree SDK2 / Cyclone DDS
        ↓
UDP/IP
        ↓
Wi-Fi或有线以太网
        ↓
宇树机器人底层控制器
        ↓
关节电机执行动作


第六阶段:反馈与安全
────────────────────────
机器人状态返回电脑
        ↓
计算目标与实际动作误差
        ↓
正常:继续跟踪
异常:限速、平滑停止或重新初始化
失联:安全站立、阻尼或急停


第七阶段:示教数据记录
────────────────────────
同步记录:
人体动作
机器人目标动作
机器人实际状态
IMU和足端接触
相机图像
任务结果
网络状态
统一时间戳


第八阶段:策略训练
────────────────────────
数据清洗与切片
        ↓
人体动作离线重定向
        ↓
模仿学习或强化学习
        ↓
MuJoCo / Isaac Lab仿真训练
        ↓
动作跟踪与稳定性评估
        ↓
仿真到真实迁移
        ↓
部署到机器人机载计算机


第九阶段:自主执行
────────────────────────
机器人接收任务、视觉或参考动作
        ↓
已训练策略输出机器人动作
        ↓
底层控制器保证实时跟踪和稳定
        ↓
不再要求操作员持续穿戴动作服
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐