Reference · from motion_representation.md

The 418-dim motion representation, broken down

MotionBricks represents each frame of motion as a normalized feature vector. The breakdown below is transcribed from the official motion_representation.md — every dimension number is verbatim.

The big picture

The representation separates root motion (global position and heading of the robot's pelvis) from body motion (joint rotations, positions, velocities, and foot contacts). This lets the root model and the pose/tokenizer module operate on different subsets of the same representation.

The two subsets share the same 409-dim body features and differ only in root parameterization (5 global vs 4 local dims). They convert losslessly via dual_rep.global_to_local / dual_rep.local_to_global. In training, batches come out of the loader in the global representation and are converted to local on the fly before the pose/tokenizer module; the "motion" tensor in every batch dict is always global.

The current configuration uses the DualRootGlobalJoints representation on the G1Skeleton34 skeleton (Unitree G1 with 34 joints). The full feature vector is 418-dimensional per frame, composed of the 414-dim global subset and the 413-dim local subset that share the 409-dim body features.

Body features (409 dims)

Shared by both global and local root representations, defined in the global (world) frame. The local_ prefix on local_vel is a naming holdover — in DualRootGlobalJoints (removing_heading=False) the velocity is NOT heading-rotated.

FeatureDimsDescription
ric_data99Global joint positions with the projected (XZ) root position subtracted per frame, for 33 non-root joints. Not heading-canonicalized.
global_rot_data204Global (world-frame) 6D continuous rotations for all 34 joints.
local_vel102Global-frame per-joint velocity, computed as finite differences of world positions.
foot_contacts4Binary contact states for left ankle, left toe, right ankle, right toe.

Global root features (5 dims)

Used by the global representation subset (consumed by the root model).

FeatureDimsDescription
global_root_pos3XYZ position in world frame (during training and inference, first frame's root XZ is placed at origin).
global_root_heading2Heading representation (global frame).

Local root features (4 dims)

Used by the local representation subset (consumed by the pose/tokenizer module).

FeatureDimsDescription
local_root_pos2XZ position in the heading-rotated local frame.
local_root_heading2Heading offset relative to the root's current heading.

Sanity check: 409 body + 5 global root = 414 (GlobalRootGlobalJoints); 409 + 4 local root = 413 (LocalRootGlobalJoints); together they define the 418-dim DualRootGlobalJoints vector.

Sources

Full derivation and details: motion_representation.md and the MotionBricks paper (arXiv 2604.24833).