Normalized dual-arm EEF: [xyz(3) + rot6d(6) + gripper(1)] * 2

July 9, 2026 ยท View on GitHub

Hy-Embodied-0.5-VLA

From Vision-Language-Action Models to a Real-World Robot Learning Stack

Tencent Robotics X ร— Tencent Hy Team

Project Page Tech Report Code
Model ModelScope Data Data

https://github.com/user-attachments/assets/fdd1966c-8453-4f6a-9758-238076d08ac4

๐Ÿ”ฅ Updates

  • [2026-07-09] ๐Ÿค– Added RoboDojo benchmark support โ€” including HDF5 dataset loader, training / evaluation scripts, and a policy adapter. Thanks to XPolicyLab for the contribution!
  • [2026-06-16] ๐ŸŒ Added ModelScope links for all models and data.
  • [2026-06-15] ๐Ÿš€ We have released Hy-Embodied-0.5-VLA โ€” including the codebase, the Hy-Embodied-0.5-VLA-UMI and Hy-Embodied-0.5-VLA-RoboTwin models, and the Hy-Embodied-0.5-VLA-Data egocentric UMI dataset (2K+ hours)!

๐Ÿ“– Abstract

We introduce Hy-Embodied-0.5-VLA (Hy-VLA) โ€” an end-to-end Vision-Language-Action system that spans the full robot learning stack: data collection, model design, pre-training, supervised fine-tuning, RL post-training, and real-world deployment. Built on the Hy-Embodied-0.5 MoT backbone, Hy-VLA integrates a flow-matching action expert, a compact memory encoder for multi-frame history, and a delta-chunk action representation decoupled from embodiment-specific kinematics.

Powered by 10,000+ hours of high-fidelity UMI demonstrations collected via a custom fingertip interface with optical motion-capture, Hy-VLA achieves state-of-the-art results on the RoboTwin 2.0 benchmark (90.9% / 90.1% on Clean / Randomized) and demonstrates robust cross-embodiment transfer across four real-world robot platforms. Paired with FlowPRO preference optimization and an asynchronous inference framework, Hy-VLA establishes a scalable paradigm for continuous dexterous manipulation.

Hy-VLA Teaser

โญ Key Features

  • ๐Ÿง  Unified VLA Architecture: Extends the Hy-Embodied-0.5 MoT backbone with a dual-tower flow-matching action expert. The VLM tower handles vision-language understanding while the action expert generates continuous action chunks โ€” all tied together through shared cross-modal attention.
  • ๐ŸŽฏ Delta-Chunk Action Representation: Actions are predicted as relative-to-current-frame end-effector delta chunks, decoupling the policy from embodiment-specific kinematics and enabling seamless cross-embodiment transfer.
  • ๐Ÿ“น Compact Memory Encoder: A parameter-free temporal-spatial attention mechanism interleaved within the ViT encoder compresses K-frame multi-view history into current-frame tokens, preserving temporal context without inflating the token budget.
  • ๐Ÿ“Š Hy-UMI-10K Dataset: 10K+ hours of sub-millimeter precision dual-arm demonstrations across 70+ tasks, collected with a custom fingertip UMI rig tracked by an optical motion-capture system. 2K+ hours are publicly released.
  • ๐Ÿš€ FlowPRO Post-Training (under review): A critic-free preference optimization algorithm that converts real-robot failure interventions into rapid policy improvement without reward models.
  • โšก Asynchronous Deployment Stack: Producer-consumer inference with cubic Bรฉzier chunk stitching enables high-frequency closed-loop control across heterogeneous robot platforms.

๐Ÿ“ฆ Repository Contents

Hy-Embodied-0.5-VLA/
โ”œโ”€โ”€ hy_vla/                      # Core model definition, training, and inference
โ”‚   โ”œโ”€โ”€ modeling_hy_vla.py       # HyVLA model class
โ”‚   โ”œโ”€โ”€ modeling_dual_tower.py   # Dual-tower transformer (VLM + action expert)
โ”‚   โ”œโ”€โ”€ configuration_hy_vla.py  # Model configuration
โ”‚   โ”œโ”€โ”€ space_time_attention.py  # Temporal-spatial attention for memory encoder
โ”‚   โ”œโ”€โ”€ data/                    # Dataloader and dataset utilities
โ”‚   โ”œโ”€โ”€ config/                  # YAML configuration files
โ”‚   โ””โ”€โ”€ hunyuan_vl_mot/          # Vendored Hy-Embodied VLM backbone (fallback)
โ”œโ”€โ”€ scripts/                     # Training, evaluation, and preprocessing scripts
โ”‚   โ”œโ”€โ”€ quick_start.py           # Fast smoke-test for a released checkpoint
โ”‚   โ”œโ”€โ”€ train_umi_vlm.sh         # Stage-1 pre-training launcher
โ”‚   โ”œโ”€โ”€ train_robotwin_vlm.sh    # Stage-2 SFT from VLM backbone
โ”‚   โ”œโ”€โ”€ train_robotwin_umi.sh    # Stage-2 SFT from UMI pretrain
โ”‚   โ”œโ”€โ”€ train_robodojo_umi.sh    # Stage-2 SFT from UMI pretrain on RoboDojo HDF5
โ”‚   โ”œโ”€โ”€ train_table_vlm.sh       # Single-table fast-iteration training
โ”‚   โ”œโ”€โ”€ eval_robotwin_test.sh    # Quick RoboTwin regression (6 tasks)
โ”‚   โ”œโ”€โ”€ eval_robotwin_full.sh    # Full RoboTwin sweep (50 tasks ร— 100 rollouts)
โ”‚   โ”œโ”€โ”€ compute_norm_umi.py      # Pre-compute norm stats from UMI data
โ”‚   โ”œโ”€โ”€ compute_norm_robotwin.py # Pre-compute norm stats from RoboTwin data
โ”‚   โ”œโ”€โ”€ compute_norm_robodojo.py # Pre-compute norm stats from RoboDojo data
โ”‚   โ”œโ”€โ”€ vis_umi_episode.py       # Render a UMI episode as MP4
โ”‚   โ”œโ”€โ”€ vis_robotwin_episode.py  # Render a RoboTwin episode as MP4
โ”‚   โ””โ”€โ”€ vis_robodojo_episode.py  # Render a RoboDojo episode as MP4
โ”œโ”€โ”€ robotwin_eval/               # RoboTwin adapter for evaluation
โ”œโ”€โ”€ robodojo_eval/               # RoboDojo adapter for evaluation
โ”œโ”€โ”€ assets/                      # Example data and index files
โ””โ”€โ”€ pyproject.toml               # Python project configuration (uv/pip)

๐Ÿ› ๏ธ Installation

Prerequisites

  • ๐Ÿ–ฅ๏ธ OS: Linux (recommended)
  • ๐Ÿ Python: 3.12 (recommended and tested)
  • โšก CUDA: 12.x
  • ๐Ÿ”ฅ PyTorch: โ‰ฅ 2.4
  • ๐ŸŽฎ GPU: NVIDIA GPU with CUDA support (โ‰ฅ 16 GB VRAM recommended)
git clone https://github.com/Tencent-Hunyuan/Hy-Embodied-0.5-VLA
cd Hy-Embodied-0.5-VLA

# One-off: install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Materialize the virtual environment
uv sync

Install via pip

pip install -r requirements.txt

๐Ÿš€ Quick Start

The fastest way to verify a fresh install is the bundled smoke test:

import torch
from huggingface_hub import snapshot_download
from hy_vla import HyVLA, HyVLAConfig

ckpt = snapshot_download("tencent/Hy-Embodied-0.5-VLA-RoboTwin")

config = HyVLAConfig.from_pretrained(ckpt)
policy = HyVLA.from_pretrained(ckpt, config=config)
policy.enable_video_encoder_if_needed()
policy = policy.to(device="cuda", dtype=torch.bfloat16).eval()

# (B, K, C, H, W); K=6 history slots
img = torch.zeros(1, 6, 3, 224, 224, device="cuda", dtype=torch.bfloat16)
# Normalized dual-arm EEF: [xyz(3) + rot6d(6) + gripper(1)] * 2
state = torch.zeros((1, config.max_state_dim), device="cuda", dtype=torch.bfloat16)
batch = {
    "observation.images.top_head":   img,
    "observation.images.hand_left":  img,
    "observation.images.hand_right": img,
    "observation.state": state,
    "task": ["pick up the bottle"],
}

with torch.no_grad():
    actions = policy.forward_evaluate(batch)["pred"]
    actions = actions[..., : config.action_feature.shape[0]]
print(actions.shape)

Or simply:

python scripts/quick_start.py

๐Ÿค– Model

Hy-VLA follows the Vision-Language-Action paradigm built on three components:

Hy-VLA Architecture

Backbone โ€” Hy-Embodied-0.5 MoT. A Mixture-of-Transformers architecture with modality-adaptive computation. Visual tokens are routed through dedicated vision-specific parameters while text tokens use the original language parameters; cross-modal interaction is limited to shared self-attention layers. The backbone encodes images at native resolution via Hy-ViT 2.0.

Action Expert โ€” Dual-Tower Flow Matching. Rather than discretizing actions into language tokens, a dedicated 370M-parameter action expert models the continuous action distribution via conditional flow matching. The VLM tower and action expert tower share attention, allowing grounded vision-language context to guide continuous action generation. At inference, actions are generated by integrating the learned velocity field over 10 Euler steps with KV-cached observation prefixes.

Compact Memory Encoder. Interleaved temporal-spatial attention within the ViT encoder compresses K-frame multi-view history. Temporal attention (causal across frames) and spatial attention (bidirectional within each frame) reuse the same QKV projections โ€” zero new parameters relative to the single-image encoder. Past-frame tokens are discarded after temporal mixing, keeping the VLM token count constant regardless of history length.

Released Checkpoints

ModelHuggingFaceModelScopeDescription
Hy-VLA-UMItencent/Hy-Embodied-0.5-VLA-UMITencent-Hunyuan/Hy-Embodied-0.5-VLA-UMIPre-trained on the Hy-UMI-10K corpus; intended as a generalist starting point for fine-tuning
Hy-VLA-RoboTwintencent/Hy-Embodied-0.5-VLA-RoboTwinTencent-Hunyuan/Hy-Embodied-0.5-VLA-RoboTwinPost-trained on the RoboTwin 2.0 50-task benchmark

Both checkpoints are self-contained โ€” they ship their own tokenizer.json, vlm_config_dict, chat_template.jinja, and pre-computed normalization statistics (norm_stats.pkl). If needed, you can regenerate normalization stats on your own data using scripts/compute_norm_umi.py.

๐Ÿ“Š Data

Hy-VLA is pre-trained on Hy-Embodied-0.5-VLA-Data, a large-scale bimanual manipulation dataset with 250K+ episodes spanning 10K+ hours of dual-arm teleoperation trajectories, wiht 2K+ hours released. The open-source release contains approximately one-fifth of the full training corpus, partitioned into 22 Lance-format tables compatible with LeRobot v3.0.

AttributeValue
FormatLance (LeRobot v3.0 schema)
Resolution240 ร— 424 px
Camerascam_high (head), cam_left_wrist, cam_right_wrist
State16-dim dual-arm EEF (pos + quat + gripper per arm)
FPS30
Total Episodes250K+
Total Duration2000+ hours
UMI Dataset Distribution

Data Loading Quick Start

LanceTableReader reads a single Lance table (local or HF Hub):

from hy_vla.data.umi_dataset import LanceTableReader

# Local directory
reader = LanceTableReader(root="./table_000")

# HF Hub
reader = LanceTableReader(
    repo_id="tencent/Hy-Embodied-0.5-VLA-Data",
    table_name="table_000",
)

# Access
frame = reader[42]                        # single frame dict
episode = reader.get_episode(3)           # all frames of episode 3

Also compatible with raw lance, lancedb, and lerobot-lancedb (LeRobotLanceDataset).

Example Episode Visualization

https://github.com/user-attachments/assets/d135a30a-fc5f-43e1-8cfd-616440e7180d

You can render any episode locally:

# Use the HF Hub dataset, pick table_000 episode 666
python scripts/vis_umi_episode.py -t table_000 -e 666

# Local Lance root
python scripts/vis_umi_episode.py /path/to/Hy-Embodied-0.5-Data -e 0 --no-3d

๐Ÿ“ Coordinate System

Below we document the axis mappings and provide a reference transform for converting between the UMI and RoboTwin systems.

The transform below is provided as a reference for aligning with the UMI coordinate system. Our released checkpoints do not apply any special pre-processing โ€” the network naturally adapts to different coordinate conventions after sufficient training iterations.

Axis Mapping

DatasetWorld ForwardWorld LeftWorld UpLocal ForwardLocal LeftLocal UpGripper OpenGripper Close
UMI+X+Y+Z+Z+X+Y090
RoboTwin+Y-X+Z+X+Y+Z10

Note: The gripper value represents the travel distance of the parallel gripper in millimeters (mm). 0 indicates the gripper is fully open, and 90 indicates it is fully closed.

Coordinate Transform

First, we represent the RoboTwin frames in the UMI world:

  • World Rotation Matrix (WW): Aligns the global world frames.
W=[010โˆ’100001]W = \begin{bmatrix} 0 & 1 & 0 \\ -1 & 0 & 0 \\ 0 & 0 & 1 \end{bmatrix}
  • Local Permutation Matrix (PP): Permutes the local axes to redefine the end-effector's local orientation.
P=[001100010]P = \begin{bmatrix} 0 & 0 & 1 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \end{bmatrix}

From RoboTwin to UMI

Let pnativep_{\text{native}} and RnativeR_{\text{native}} be the position vector and rotation matrix in RoboTwin, and qnativeq_{\text{native}} be its quaternion. The mapping to UMI (pumip_{\text{umi}}, RumiR_{\text{umi}}, qumiq_{\text{umi}}) is:

  • Position: pumi=Wpnativep_{\text{umi}} = W p_{\text{native}}
  • Rotation Matrix: Rumi=WRnativePR_{\text{umi}} = W R_{\text{native}} P
  • Quaternion: qumi=qWโŠ—qnativeโŠ—qPq_{\text{umi}} = q_W \otimes q_{\text{native}} \otimes q_P (where โŠ—\otimes denotes quaternion multiplication)

From UMI to RoboTwin (Inverse Transform)

Since WW and PP are orthogonal matrices, their inverses are simply their transposes (Wโˆ’1=WTW^{-1} = W^T, Pโˆ’1=PTP^{-1} = P^T). The inverse mapping is:

  • Position: pnative=WTpumip_{\text{native}} = W^T p_{\text{umi}}
  • Rotation Matrix: Rnative=WTRumiPTR_{\text{native}} = W^T R_{\text{umi}} P^T
  • Quaternion: qnative=qWโˆ’1โŠ—qumiโŠ—qPโˆ’1q_{\text{native}} = q_W^{-1} \otimes q_{\text{umi}} \otimes q_P^{-1}

๐Ÿ‹๏ธ Training & Evaluation

Hy-VLA supports multiple training workflows, each with corresponding evaluation results.

Pre-training

The VLM tower is initialized from tencent/HY-Embodied-0.5 and the action expert is randomly initialized. Training uses the full 10K-hour UMI corpus under the flow-matching objective (Eq. 1) with history length K=1 and action chunk horizon H=50 at 10 Hz. The model is trained for 200K steps with a global batch size of 1,024.

# Single-table fast iteration
export TABLE_NAME=table_001
bash scripts/train_table_vlm.sh

# Full corpus (64 GPUs)
export CHIEF_IP=<chief-ip> INDEX=0
bash scripts/train_umi_vlm.sh

Supervised Fine-Tuning

Starting from the pre-trained checkpoint, SFT activates the compact memory encoder (K=6 frames) and fine-tunes on task-specific demonstrations. For real-world deployment, we train for 60K steps with batch size 32; for RoboTwin 2.0, we use batch size 128 with action downsampling (stride 3).

# --- Training ---
export CHIEF_IP=<chief-ip> INDEX=0
bash scripts/train_robotwin_umi.sh   # Fine-tune from Hy-VLA-UMI on RoboTwin
bash scripts/train_robodojo_umi.sh   # Fine-tune from Hy-VLA-UMI on RoboDojo HDF5

# --- Evaluation ---
export ROBOTWIN_DIR=/path/to/RoboTwin
export CKPT_PATH=tencent/Hy-Embodied-0.5-VLA-RoboTwin

# Quick regression (6 tasks ร— 10 rollouts)
bash scripts/eval_robotwin_test.sh

# Full sweep (50 tasks ร— 100 rollouts, 8 GPUs)
bash scripts/eval_robotwin_full.sh

Note: The eval scripts automatically symlink Hy-VLA/robotwin_eval/ โ†’ RoboTwin/policy/hy_vla, so that RoboTwin's eval_policy.py can discover the Hy-VLA policy adapter without any manual configuration.

RoboDojo โ€” Simulated Bimanual Manipulation

RoboDojo fine-tuning uses the HDF5 layout consumed by hy_vla.data.robodojo_dataset.RoboDojoVLADataset and the config hy_vla/config/dataset/robodojo_hdf5.yaml. Generate normalization statistics with scripts/compute_norm_robodojo.py, then launch SFT:

python scripts/compute_norm_robodojo.py \
    --hdf5-dir /path/to/robodojo/hdf5 \
    --output /path/to/experiments/hy_vla_robodojo_umi/norm_stats.pkl \
    --downsample-rate 1 \
    --chunk-size 25 \
    --umi-coord-frame

CHIEF_IP=127.0.0.1 INDEX=0 NUM_MACHINES=1 NPROC_PER_NODE=8 \
HDF5_DIR=/path/to/robodojo/hdf5 \
EXP_ROOT=/path/to/experiments \
NORM_PATH=/path/to/experiments/hy_vla_robodojo_umi/norm_stats.pkl \
bash scripts/train_robodojo_umi.sh

For RoboDojo evaluation, use robodojo_eval/deploy_policy.yml and the robodojo_eval.deploy_policy hooks in your RoboDojo runner. The adapter packs RoboDojo observations into Hy-VLA batches and returns RoboDojo EE action dictionaries.

RoboTwin 2.0 โ€” Simulated Bimanual Manipulation

MethodCleanRandomized
ฯ€โ‚€65.958.4
ABot-M081.280.4
ฯ€โ‚€.โ‚…82.776.8
Qwen-VLA86.187.2
LingBot-VLA86.585.3
starVLA88.288.3
Motus88.787.0
JoyAI-RA90.589.3
Hy-VLA90.990.1

Success rate (%) averaged over 100 rollouts per task ร— 50 tasks. Best in bold.

We validate SFT across two deployment tracks:

  • Track A (Intra-Embodiment): Fine-tune and evaluate on the same robot (Dobot X-Trainer, 4 tasks)
  • Track B (Cross-Embodiment): Fine-tune only on UMI demonstrations and deploy to morphologically different robots (JAKA K1, Astribot S1)

Track A โ€” X-Trainer Real-World Tasks

MethodSet the TableFold & Store GlassesZip Up the Pen CaseInsert Bottles
ฯ€โ‚€79%67%48%80%
ฯ€โ‚€.โ‚…88%75%57%84%
Hy-Embodied (w/o UMI pretrain)80%65%43%70%
Hy-VLA (Ours)83%94%73%94%

Four bimanual tasks on the Dobot X-Trainer. UMI pre-training provides significant gains on precision-critical tasks (glasses folding, zipper manipulation) compared to the baseline without UMI data.

Track B โ€” Cross-Embodiment Transfer

MethodJAKA K1 ยท Organize AccessoryAstribot S1 ยท Clean Up Table
ฯ€โ‚€88%87%
ฯ€โ‚€.โ‚…81%89%
Hy-Embodied (w/o UMI pretrain)38%44%
Hy-VLA (Ours)90%89%

Cross-embodiment deployment to JAKA K1 and Astribot S1, fine-tuned only on UMI demonstrations without any target-robot teleoperation data. The ablation without UMI pre-training collapses, confirming that the large-scale UMI corpus is essential for embodiment-agnostic action priors.

RL Post-Training with FlowPRO

Beyond standard SFT, Hy-VLA supports FlowPRO โ€” a critic-free preference optimization algorithm (under review, code coming soon) that converts real-robot failure interventions into policy improvement. The RPRO loss directly contrasts preferred and dispreferred action chunks per state, with a symmetric proximal regularizer that prevents reward hacking.

FlowPRO operates iteratively:

  1. Collect preference pairs via teleoperated intervention-and-rollback
  2. Convert sparse corrections into dense per-state tuples via Smooth Interpolation
  3. Optimize with the RPRO loss on mixed batches

FlowPRO Results โ€” X-Trainer Real-World Tasks

MethodBottleCapUSBZip
DAgger93 ยฑ 2.1% / 27s88 ยฑ 1.8% / 29s86 ยฑ 2.4% / 25s83 ยฑ 2.0% / 55s
ฯ€โ‚€.โ‚†*95 ยฑ 1.5% / 24s95 ยฑ 1.2% / 27s95 ยฑ 1.4% / 23s89 ยฑ 1.6% / 45s
RPRO (Ours)99 ยฑ 0.6% / 16s99 ยฑ 0.7% / 21s98 ยฑ 0.9% / 22s94 ยฑ 1.1% / 37s

Success rate (mean ยฑ std over 3 seeds, 100 rollouts each) and mean completion time after K=3 rounds of post-training on four X-Trainer bimanual tasks. RPRO achieves near-ceiling success rates with substantially shorter completion times.

Pre-Computing Normalization Statistics

Required before the first training run:

python scripts/compute_norm_umi.py \
    --lance-source tencent/Hy-Embodied-0.5-VLA-Data \
    --output norm_stats.pkl

The released checkpoints already ship with pre-computed norm stats. Use this script only if you are training on custom data.

๐Ÿ™ Acknowledgements

We thank the Hugging Face and LeRobot communities for their infrastructure and tooling. This work builds upon Hy-Embodied-0.5, FlowPRO, OpenPi and the RoboTwin 2.0 benchmark.

๐Ÿ“š Citation

If you find Hy-VLA useful for your research, please cite:

@article{zhang2026hy,
  title={Hy-Embodied-0.5-VLA: From Vision-Language-Action Models to a Real-World Robot Learning Stack},
  author={Zhang, He and Xiang, Lingzhu and Lin, Haitao and Huang, Zeyu and Wang, Minghui and Zhong, Dingyan and Dong, Yubo and Wu, Yihao and Rao, Yongming and Zhang, Dongsheng and others},
  journal={arXiv preprint arXiv:2606.14409},
  year={2026}
}

๐Ÿ“œ License

Released under the Apache-2.0 License. See LICENSE for full terms.