参考 · 来自 motion_representation.md
418 维动作表示,逐项拆解
MotionBricks 把每一帧动作表示为一个归一化特征向量。下面的分解逐字摘自官方 motion_representation.md——每个维度数字都是原样。
总体结构
该表示把根运动(机器人骨盆的全局位置与航向)与身体运动(关节旋转、位置、速度与脚部接触)分开。这让 root 模型与 pose/分词器模块可以操作同一表示的不同子集。
- Global(
GlobalRootGlobalJoints,414 维)—— root 模型主要用它,做精确的全局根控制。数据加载器直接返回的也是它。 - Local(
LocalRootGlobalJoints,413 维)—— pose/分词器模块使用。
两个子集共享相同的 409 维身体特征,只差根参数化(5 维全局 vs 4 维局部)。它们通过 dual_rep.global_to_local / dual_rep.local_to_global 无损互转。训练时,批次从加载器以全局表示出来,在进入 pose/分词器模块前被即时转成局部;每个批次字典里的 "motion" 张量始终是全局的。
当前配置在 G1Skeleton34 骨架(34 关节的 Unitree G1)上使用 DualRootGlobalJoints 表示。完整特征向量每帧 418 维,由共享 409 维身体特征的 414 维全局子集与 413 维局部子集组成。
身体特征(409 维)
全局与局部根表示共用,定义在全局(世界)系。 local_vel 上的 local_ 前缀是命名遗留——在 DualRootGlobalJoints(removing_heading=False)里,速度并不做航向旋转。
| 特征 | 维度 | 描述 |
|---|---|---|
ric_data | 99 | 全局关节位置,逐帧减去投影后的(XZ)根位置,作用于 33 个非根关节。未做航向归一化。 |
global_rot_data | 204 | 全部 34 个关节的全局(世界系)6D 连续旋转。 |
local_vel | 102 | 全局系下的逐关节速度,由世界位置做有限差分计算。 |
foot_contacts | 4 | 左脚踝、左脚趾、右脚踝、右脚趾的二进制接触状态。 |
全局根特征(5 维)
供全局表示子集使用(root 模型消费)。
| 特征 | 维度 | 描述 |
|---|---|---|
global_root_pos | 3 | 世界系下的 XYZ 位置(训练与推理时,第一帧的根 XZ 放在原点)。 |
global_root_heading | 2 | 航向表示(全局系)。 |
局部根特征(4 维)
供局部表示子集使用(pose/分词器模块消费)。
| 特征 | 维度 | 描述 |
|---|---|---|
local_root_pos | 2 | 航向旋转局部系下的 XZ 位置。 |
local_root_heading | 2 | 相对根当前航向的航向偏移。 |
核算一下:409 身体 + 5 全局根 = 414(GlobalRootGlobalJoints);409 + 4 局部根 = 413(LocalRootGlobalJoints);两者合起来定义 418 维的 DualRootGlobalJoints 向量。
来源
完整推导与细节:motion_representation.md 与 MotionBricks 论文(arXiv 2604.24833)。