Datasets:
OmniContact Dataset: Contact-Rich Humanoid Object Interaction
OmniContact contains human-object interaction motion capture, processed Unitree G1 trajectories, and motion clips for contact-rich box manipulation and soccer interactions. This release contains 690 processed source trajectories and 2,231 clips. Every source NPZ has exactly one retained raw mocap capture and one portable BVH cache entry.
Matched Task Previews
Carry box
Push box
Slide box
Kick ball
Relocate ball
Dataset Summary
| Subset | Source NPZ | Motion Clips | Raw MoCap |
|---|---|---|---|
box/case1_carry |
210 | 623 | 210 |
box/case2_push |
162 | 453 | 162 |
box/case3_slide |
118 | 190 | 118 |
soccer/case1_kick_forward |
30 | 177 | 30 |
soccer/case2_kick_left |
30 | 170 | 30 |
soccer/case3_kick_right |
30 | 210 | 30 |
soccer/case4_carry |
51 | 199 | 51 |
soccer/case5_pickball_kick |
59 | 209 | 59 |
| Total | 690 | 2,231 | 690 |
Box Size Augmentation
The carry clips include box-size augmentation. Each panel below shows a different box dimension while preserving the corresponding object pose and G1 motion.
Exact source NPZ files, frame ranges, panel positions, and dimensions are listed in demo/box_size_augmentation/manifest.json.
Directory Layout
OmniContact-Dataset/
|-- assets/ # G1 URDF/meshes and object meshes
|-- bvh_cache/ # Portable BVH world-position caches
| `-- manifest.json # Raw BVH path -> cache mapping
|-- demo/
| |-- box_size_augmentation/ # Carry augmentation videos and checksums
| |-- g1_videos/ # Matched G1 retarget previews
| `-- mocap_task_videos/ # Matched BVH source previews
|-- metadata/
| |-- raw_mocap_manifest.csv # NPZ/raw mocap path mapping
| `-- splits.csv # Train/val/test assignment
|-- npz/ # 690 complete processed trajectories
|-- npz_clips/ # 2,231 task clips
|-- raw_mocap/ # 690 matched source captures
|-- build_bvh_cache.py
`-- visualize_npz_bvh_minimal.py
Each retained raw_mocap/<domain>/<case>/<capture_id>/ directory contains:
motion_actor.bvh: actor skeleton motion.motion_actor.csv: actor timestamps.prop_*.csvorobject_pose_*.csv: object pose samples.capture_meta.json: capture metadata with paths normalized to this release.
Processed Data Format
Each source .npz contains one complete G1 trajectory. Common arrays include:
fps: frames per second.base_pos_w: floating-base position, shape[T, 3].base_quat_w: floating-base orientation inwxyzorder, shape[T, 4].joint_pos: G1 joint positions, shape[T, 29].body_pos_w: body positions, shape[T, 39, 3].body_quat_w: body orientations inwxyzorder, shape[T, 39, 4].object_pos_w: object position, shape[T, 3].object_quat_w: object orientation inwxyzorder, shape[T, 4].contact_info: binary contact labels, shape[T, 4, 1].
The contact order is left_ankle, right_ankle, left_wrist, right_wrist. Carry augmentation clips additionally store carry_box_source_size_cm and carry_box_selected_size_cm.
Example:
import numpy as np
path = "npz/box/case1_carry/20260330000166_1_1775007076_with_contact.npz"
with np.load(path, allow_pickle=False) as data:
joint_pos = data["joint_pos"]
base_pos = data["base_pos_w"]
object_pos = data["object_pos_w"]
contact = data["contact_info"]
fps = float(data["fps"][0])
Visualization
Install the local viewer dependencies:
pip install numpy viser yourdfpy
Visualize one matched NPZ/BVH pair:
python visualize_npz_bvh_minimal.py \
--data npz/box/case1_carry/20260330000336_1_1775817056_with_contact.npz \
--align-roots \
--port 8092
Open http://localhost:8092. To browse all 690 pairs:
python visualize_npz_bvh_minimal.py --dataset-root . --align-roots --port 8092
The viewer automatically loads the prebuilt portable caches from bvh_cache/; no extra flag is required. If a cache entry is missing or invalid, it parses the raw BVH once and writes a new cache entry. A custom cache directory can be selected with --bvh-cache-dir PATH, and --no-bvh-cache forces raw BVH parsing.
Useful options:
--max-frames 600: limit the loaded trajectory length.--playback-speed 0.5: slow down playback.--sync-mode frame: synchronize NPZ and BVH by frame index.--bvh-cache-dir PATH: load and write BVH caches in another directory.--no-bvh-cache: disable cache use and parse raw BVH files.--bvh-line-width 1: render thinner BVH bones.
Metadata
metadata/raw_mocap_manifest.csv contains these columns:
domain, case, capture_id, raw_dir, bvh, timestamps, object_files, npz
metadata/splits.csv maps every retained capture_id to train, val, or test.
Verify the augmentation demos with:
cd demo/box_size_augmentation
sha256sum -c SHA256SUMS
Citation
@misc{yu2026omnicontactchainingmetaskillscontact,
title={OmniContact: Chaining Meta-Skills via Contact Flow for Generalizable Humanoid Loco-Manipulation},
author={Runyi Yu and Xiaoyi Lin and Ji Ma and Yinhuai Wang and Koukou Luo and Jiahao Ji and Huayi Wang and Wenjia Wang and Runhan Zhang and Ping Tan and Ting Wu and Ruoli Dai and Qifeng Chen and Lei Han},
year={2026},
eprint={2606.26201},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2606.26201}
}
- Downloads last month
- 722