Noureddine RAMDI / Exploring GMR: real-time cross-embodiment human motion retargeting for humanoid robots

Created Sat, 23 May 2026 20:41:14 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

YanjieZe/GMR

GMR tackles a persistent challenge in robotics: how to transfer human motion data onto various humanoid robots in real time with minimal fuss. It supports multiple human motion input formats and directly outputs robot-specific motions optimized for reinforcement learning (RL) tracking policies. This makes it a practical tool for researchers and developers working on robot teleoperation and RL-driven control.

what gmr does and how it works

GMR (General Motion Retargeting) is a Python library designed to retarget human motion data onto a diverse set of humanoid robots in real time, running efficiently on CPU. It accepts human motion inputs from several common formats: SMPLX (used by datasets like AMASS and OMOMO), BVH (from LAFAN1, Nokov, Xsens), FBX (OptiTrack), monocular video processed through GVHMR, and XRoboToolkit (PICO). The core idea is to provide a seamless pipeline that maps these varied human motion sources onto more than 17 supported robot platforms.

Supported robots include quadrupeds like Unitree G1 and H1, Booster T1 and K1, Fourier N1 and GR3, the humanoid PAL Robotics Talos, and wheeled platforms such as Galexea R1 Pro. This broad coverage reflects the repo’s ambition to serve cross-embodiment motion transfer needs.

Under the hood, GMR exposes a clean API where the target robot is selected by changing a single argument. This design choice abstracts away much of the complexity involved in tailoring motion data to different robot kinematics, making motion retargeting straightforward and modular.

This pipeline is tightly integrated with TWIST, a real-time whole-body teleoperation system. The retargeted motions output by GMR are specifically tuned to work well with RL tracking policies, enabling smooth and responsive teleoperation experiences.

The stack is primarily Python-based, leveraging numerical and robotics libraries to perform CPU-efficient kinematic mappings in real time. This focus on CPU operation avoids the need for specialized hardware, increasing accessibility.

modular pipeline and real-time retargeting tuned for rl policies

What distinguishes GMR is its modular pipeline approach to human motion retargeting. It cleanly separates the concerns of parsing different input motion formats, applying format-specific transformations, and mapping results onto target robot embodiments. This separation makes the codebase easier to maintain and extend.

The tradeoff is that while supporting many formats and robots, the retargeting focuses on kinematic mapping rather than physics-based optimization. This choice prioritizes real-time performance on CPU, which is crucial for teleoperation scenarios, but may sacrifice some physical realism compared to physics-simulated approaches.

Additionally, the output motions are carefully tuned for RL tracking policies. This tuning means that the retargeted motions are well-suited as training data or inputs for reinforcement learning controllers, which expect consistent and feasible trajectories. This specific focus is a strength for research and development in RL-based robotics control.

Code quality appears practitioner-friendly, with a clear API that lets users switch robot targets by changing a single argument. This convention-over-configuration style improves the developer experience and helps avoid boilerplate.

The repo also addresses some practical challenges such as rendering issues with dependencies by suggesting conda package installs (e.g., libstdcxx-ng), indicating attention to cross-platform usability.

quick start

The installation process is straightforward for Python practitioners on Ubuntu 20.04 or 22.04, the tested platforms.

First, create and activate a dedicated conda environment:

conda create -n gmr python=3.10 -y
conda activate gmr

Next, install GMR in editable mode:

pip install -e .

If you plan to use SMPL-X pkl files, remember to change the ext variable in smplx/body_models.py from npz to pkl.

To resolve some rendering issues that may arise, install the matching libstdcxx-ng package:

conda install -c conda-forge libstdcxx-ng -y

This setup is minimal and clean, letting you quickly start experimenting with retargeting human motion data onto supported robots.

verdict

GMR is a solid, practical toolkit for anyone needing to retarget human motion data to a variety of humanoid and robot platforms in real time. Its modular pipeline and single-argument robot selection API simplify cross-embodiment motion transfer.

The focus on CPU-based kinematic mapping tuned for RL tracking policies makes it particularly relevant for researchers working on RL-driven robot control and teleoperation systems like TWIST.

However, the reliance on kinematic retargeting rather than physics-based optimization may limit physical realism in some applications. Also, the current support targets specific robot platforms, so extending to new robots requires some work.

Overall, GMR is a valuable resource with clean design and clear documentation for those in robotics and RL looking for a practical motion retargeting solution that runs efficiently on commodity hardware.


→ GitHub Repo: YanjieZe/GMR ⭐ 2,219 · Python