Skip to content

DaveBraid/beyond_mimic_tracking

 
 

Repository files navigation

BeyondMimic Motion Tracking Code

IsaacSim Isaac Lab Python Linux platform pre-commit License

[Website] [Arxiv] [Video]

Overview

BeyondMimic is a versatile humanoid control framework that provides highly dynamic motion tracking with the state-of-the-art motion quality on real-world deployment and steerable test-time control with guided diffusion-based controllers.

This repo covers the motion tracking training in BeyondMimic. You should be able to train any sim-to-real-ready motion in the LAFAN1 dataset, without tuning any parameters.

For sim-to-sim and sim-to-real deployment, please refer to the motion_tracking_controller.

Installation

  • Install Isaac Lab v2.1.0 by following the installation guide. We recommend using the conda installation as it simplifies calling Python scripts from the terminal.

  • Clone this repository separately from the Isaac Lab installation (i.e., outside the IsaacLab directory):

# Option 1: SSH
git clone git@github.com:HybridRobotics/whole_body_tracking.git

# Option 2: HTTPS
git clone https://github.com/HybridRobotics/whole_body_tracking.git
  • Pull the robot description files from GCS
# Enter the repository
cd whole_body_tracking
# Rename all occurrences of whole_body_tracking (in files/directories) to your_fancy_extension_name
curl -L -o unitree_description.tar.gz https://storage.googleapis.com/qiayuanl_robot_descriptions/unitree_description.tar.gz && \
tar -xzf unitree_description.tar.gz -C source/whole_body_tracking/whole_body_tracking/assets/ && \
rm unitree_description.tar.gz
  • Using a Python interpreter that has Isaac Lab installed, install the library
python -m pip install -e source/whole_body_tracking

Motion Tracking

Motion Preprocessing & Registry Setup

In order to manage the large set of motions we used in this work, we leverage the WandB registry to store and load reference motions automatically. Note: The reference motion should be retargeted and use generalized coordinates only.

  • Gather the reference motion datasets (please follow the original licenses), we use the same convention as .csv of Unitree's dataset

    • Unitree-retargeted LAFAN1 Dataset is available on HuggingFace
    • Sidekicks are from KungfuBot
    • Christiano Ronaldo celebration is from ASAP.
    • Balance motions are from HuB
  • Log in to your WandB account; access Registry under Core on the left. Create a new registry collection with the name " Motions" and artifact type "All Types".

  • Convert retargeted motions to include the maximum coordinates information (body pose, body velocity, and body acceleration) via forward kinematics,

python scripts/csv_to_npz.py --input_file {motion_name}.csv --input_fps 30 --output_name {motion_name} --headless

# example
python scripts/csv_to_npz.py --input_file ../Datasets/LAFAN1_Retargeting_Datas
et/g1/dance1_subject3.csv  --input_fps 30 --output_name dance1_subject3 --headless

This will automatically upload the processed motion file to the WandB registry with output name {motion_name}.

  • Test if the WandB registry works properly by replaying the motion in Isaac Sim:
python scripts/replay_npz.py --registry_name={your-organization}-org/wandb-registry-motions/{motion_name}

# example
python scripts/replay_npz.py --registry_name=ethanlee-hust-org/wandb-registry-motions/dance1_subject2
  • Debugging
    • Make sure to export WANDB_ENTITY to your organization name, not your personal username.
    • If /tmp folder is not accessible, modify csv_to_npz.py L319 & L326 to a temporary folder of your choice.

Policy Training

  • Train policy by the following command:
python scripts/rsl_rl/train.py --task=Tracking-Flat-G1-v0 \
--registry_name {your-organization}-org/wandb-registry-motions/{motion_name} \
--headless --logger wandb --log_project_name {project_name} --run_name {run_name}

# example (without estimation)
python scripts/rsl_rl/train.py --task=Tracking-Flat-G1-Wo-State-Estimation-v0 \
--registry_name ethanlee-hust-org/wandb-registry-motions/dance1_subject2 \
--headless --logger wandb --log_project_name BeyondMimic --run_name dance1_subject2_wo_est
  • Resume training command:

    • 在原训练命令基础上添加以下参数:
    • --resume True
    • --load_run <previous_run_directory_name> (例如 --load_run 2025-11-08_12-00-00_d1s2_wo_est_init_rand_arma
    • --checkpoint <checkpoint_file> (例如 --checkpoint model_20000.pt
# example (without estimation)
python scripts/rsl_rl/train.py --task=Tracking-Flat-S3-Wo-State-Estimation-v0 --registry_name ethanlee-hust-org/wandb-registry-motions/s3_d1s2_trim --headless --logger wandb --log_project_name BeyondMimic_S3 --run_name <new_run_name> --resume True --load_run <previous_run_name> --checkpoint <checkpoint_file> --max_iterations <new_max_iterations>

Policy Evaluation

  • Play the trained policy by the following command:
python scripts/rsl_rl/play.py --task=Tracking-Flat-G1-v0 --num_envs=2 --wandb_path={wandb-run-path}

# example (local_model)
python scripts/rsl_rl/play.py --task=Tracking-Flat-G1-Wo-State-Estimation-v0 --num_envs=2

The WandB run path can be located in the run overview. It follows the format {your_organization}/{project_name}/ along with a unique 8-character identifier. Note that run_name is different from run_path.

Code Structure

Below is an overview of the code structure for this repository:

  • source/whole_body_tracking/whole_body_tracking/tasks/tracking/mdp This directory contains the atomic functions to define the MDP for BeyondMimic. Below is a breakdown of the functions:

    • commands.py Command library to compute relevant variables from the reference motion, current robot state, and error computations. This includes pose and velocity error calculation, initial state randomization, and adaptive sampling.

    • rewards.py Implements the DeepMimic reward functions and smoothing terms.

    • events.py Implements domain randomization terms.

    • observations.py Implements observation terms for motion tracking and data collection.

    • terminations.py Implements early terminations and timeouts.

  • source/whole_body_tracking/whole_body_tracking/tasks/tracking/tracking_env_cfg.py Contains the environment (MDP) hyperparameters configuration for the tracking task.

  • source/whole_body_tracking/whole_body_tracking/tasks/tracking/config/g1/agents/rsl_rl_ppo_cfg.py Contains the PPO hyperparameters for the tracking task.

  • source/whole_body_tracking/whole_body_tracking/robots Contains robot-specific settings, including armature parameters, joint stiffness/damping calculation, and action scale calculation.

  • scripts Includes utility scripts for preprocessing motion data, training policies, and evaluating trained policies.

This structure is designed to ensure modularity and ease of navigation for developers expanding the project.

About

Froked from HybridRobotics/whole_body_tracking

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Python 100.0%