This repository uses a two-stage data pipeline for motion tracking training:
raw human datasets -> HoloSMPL H5 -> HoloRetarget robot H5
HoloSMPL stores canonical human motion. The training production pipeline calls HoloRetarget and writes the minimal robot pose reference into HDF5.
Each HoloSMPL clip contains:
human_pose_aa [T,72]: root orientation plus SMPL 23 body joints in axis-angle.human_root_trans [T,3]: canonical z-up root translation in meters.human_shape_beta [B]: clip-level shape beta, not frame-broadcast.human_root_height [T,1]: derived from root translation.human_gravity_projection [T,3]: derived from root orientation.metadata: JSON provenance and dataset fields.
Packed HoloSMPL H5 keeps frame-major arrays at the shard root and stores human_shape_beta under clips/human_shape_beta [num_clips,B].
Convert a raw dataset to canonical HoloSMPL NPZ:
python -m holosmpl convert-canonical \
--dataset <dataset_name> \
--input-root <raw_dataset_root> \
--output-root <canonical_root> \
--target-fps 50 \
--overwriteConvert canonical clips to HoloSMPL NPZ:
python -m holosmpl convert-formal-npz \
--canonical-root <canonical_root> \
--output-root <holosmpl_npz_root> \
--overwritePack HoloSMPL NPZ into HoloSMPL H5:
python -m holosmpl pack-formal-h5 \
--formal-npz-root <holosmpl_npz_root> \
--output-root <holosmpl_h5_root> \
--compression lzf \
--overwriteRun HoloRetarget on HoloSMPL H5 and write the existing robot HDF5 v2 format:
python -m holosmpl retarget-holoretarget-h5 \
--holosmpl-h5-root <holosmpl_h5_root> \
--output-root <robot_h5_root> \
--compression lzf \
--overwriteThe output H5 stores only the non-derived robot reference:
ref_root_pos [T,3]ref_root_rot [T,4]inxyzworderref_dof_pos [T,29]
Training and deployment derive joint velocity, root velocity, projected gravity, and local-frame velocity through the shared motion-tracking observation module.
A quick schema smoke can be run from an existing canonical root:
python -m holosmpl convert-formal-npz \
--canonical-root <canonical_root> \
--output-root /tmp/holosmpl_lafan1_formal_npz \
--overwrite \
--progress-interval 20
python -m holosmpl pack-formal-h5 \
--formal-npz-root /tmp/holosmpl_lafan1_formal_npz \
--output-root /tmp/holosmpl_lafan1_h5 \
--compression lzf \
--shard-target-clips 10 \
--overwrite \
--progress-interval 20HoloRetarget robot H5 generation requires a runtime where Newton/Warp can see a CUDA device, matching the online deployment runtime.