Skip to content
All projects

Humanoid Table Tennis Robot

A Unitree G1 that returns real table-tennis shots, following the SMASH research approach.

  • Humanoid
  • RL
  • Perception
  • Unitree G1

Overview

Table tennis is one of the hardest tests for a humanoid: the ball crosses the table in well under a second, and the robot has to see it, predict it, move its whole body and hit — all without falling over.

We replicated the approach of the SMASH research work on a Unitree G1, combining a learned whole-body hitting policy with a fast perception and prediction pipeline.

The Challenge

The robot needs to know exactly where it is relative to the table, every frame, while it is moving.

Ball flight has to be predicted early enough for a 1.3 m tall robot to reach the hitting point, and the policy must stay balanced through aggressive swings.

Our Approach

Localization: AprilTag markers placed on the table give the robot a fixed reference frame, so its pose relative to the table is always known.

Perception: high-frame-rate ball detection and a physics-based trajectory predictor estimate where and when the ball can be hit.

Control: a whole-body RL policy trained in simulation with randomized ball trajectories, then transferred to the real G1 with domain randomization.

Results

  • Consistent returns of moderate-speed shots in rallies (placeholder — add your success rate)
  • Stable footwork and recovery between shots
  • A reusable perception + prediction stack for other fast-reaction tasks

Tech Stack

  • Unitree G1
  • Isaac Lab
  • PyTorch
  • AprilTag
  • OpenCV
  • ROS 2
  • AprilTag markers on the table tennis table
  • Simulation of the G1 hitting a ball
  • Ball trajectory prediction visualization

More Projects

    • Teleoperation
    • Humanoid
    • Data Collection

    Full-Body Teleoperation

    Whole-body teleoperation of a humanoid for live demonstrations and data collection.

    • VLA
    • Imitation Learning
    • Manipulation

    VLA Training

    Training vision-language-action models on teleoperated demos — like a G1 screwing in a lightbulb.

Want something like this on your robot?