unitree机器人H1系列
本文章核心不是让机器人自主寻找一条路径,而是:
采集人体动作 → 将人体动作转换为机器人可执行动作 → 通过网络实时发送 → 机器人控制器保持平衡并跟踪动作。
这类系统通常称为:
-
人形机器人动作捕捉遥操作;
-
全身运动重定向;
-
人到人形机器人运动模仿;
-
示教数据采集与模仿学习。
宇树官方目前提供了面向 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 通信接口。
利用人体动作捕捉或机器人遥操作产生示教数据,训练动作跟踪策略、模仿学习策略或强化学习策略,再将训练得到的神经网络模型部署到机器人计算平台。
模型并不是直接“训练进电机”,而是部署到机器人上位机或机载计算机,由它实时输出关节目标或控制指令。
二、完整系统数据链路
人体操作员
↓
动作捕捉服及其惯性传感器
↓
人体骨骼姿态解算
↓
UDP/Wi-Fi数据接收
↓
坐标转换、滤波和时间同步
↓
人体—机器人动作重定向
↓
机器人运动控制与平衡控制
↓
DDS/UDP/IP/Wi-Fi或有线网络
↓
宇树机器人执行器
↓
机器人状态反馈
└────────返回控制电脑
这里真正的技术难点通常不是 UDP 本身,而是以下四项:
-
人体姿态是否测得准确;
-
人体动作如何映射到机器人;
-
机器人如何保持平衡;
-
网络抖动或丢包时如何保证安全。
三、动作捕捉服如何采集人体动作
动作捕捉服通常使用多个 IMU,安装于:
-
骨盆;
-
胸部;
-
头部;
-
上臂;
-
前臂;
-
手部;
-
大腿;
-
小腿;
-
足部。
一个 IMU 通常包含:
-
三轴加速度计;
-
三轴陀螺仪;
-
有些还包含三轴磁力计。
1. 加速度计
静止或低动态时,加速度计能够感知重力方向,可以估计传感器的俯仰角和横滚角。
但在人运动时,它测到的是:
ameas=amotion+g+ba+na
其中还包含运动加速度、偏置和噪声,因此不能只用加速度计恢复稳定姿态。
2. 陀螺仪
陀螺仪测量角速度,通过积分可估计姿态:
Rk+1=RkExp([ω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=wpJposition+wRJorientation+wqJposture+wsJsmooth+wcJcollision+wbJbalance
1. 关节角直接映射
最简单的方法是建立人体关节与机器人关节的对应关系:
人体左肩 → 机器人左肩
人体左肘 → 机器人左肘
人体右髋 → 机器人右髋
人体右膝 → 机器人右膝
然后进行:
qr,j=sjqh,i+bj
其中:
-
(s_j):比例或方向修正;
-
(b_j):零位偏置。
优点
-
简单;
-
延迟低;
-
容易实现。
问题
-
人和机器人关节轴通常不同;
-
某个机器人关节可能没有直接的人体对应;
-
肩部、腰部和腕部误差比较明显;
-
容易触发关节限位;
-
不能保证末端位置准确;
-
不能自动保证平衡。
这种方法更适合初步调试或单关节动作,不适合高质量全身动作。
2. 末端位姿映射
把人体的手、脚、头和骨盆姿态转换成机器人期望末端位姿,然后通过逆运动学求机器人关节角:
这种方式比直接复制关节角更加合理,因为它强调:
-
手的位置;
-
手的方向;
-
脚的位置;
-
头部朝向;
-
骨盆姿态。
3. 比例缩放
由于人与机器人连杆尺寸不同,不能直接复制绝对位置。
例如人体手相对肩部的位置,可以按照臂长比例转换,但实际系统通常不是简单等比例缩放,而会分别处理:
-
上臂;
-
前臂;
-
躯干;
-
大腿;
-
小腿;
-
双臂间距。
4. 坐标系转换
动作捕捉系统、电脑程序和宇树机器人可能使用不同坐标定义:
-
(x) 向前还是向右;
-
(y) 向左还是向前;
-
(z) 向上还是向下;
-
左手坐标系还是右手坐标系;
-
四元数顺序是 (wxyz) 还是 (xyzw)。
正确转换通常为:
RTJ=RTMMTJ
其中:
-
(M):动作捕捉坐标系;
-
(R):机器人坐标系;
-
(J):人体关节或骨段。
姿态转换应使用:
RRJ=RRMMRJJRoffset
七、初始化和人体标定
每次穿戴动作捕捉服后,通常都要进行标定。
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仿真训练
↓
动作跟踪与稳定性评估
↓
仿真到真实迁移
↓
部署到机器人机载计算机
第九阶段:自主执行
────────────────────────
机器人接收任务、视觉或参考动作
↓
已训练策略输出机器人动作
↓
底层控制器保证实时跟踪和稳定
↓
不再要求操作员持续穿戴动作服
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)