Solving a Giant Rubik's Cube with a Quadruped Robot

Full autonomous solve. The robot first scans the cube, plans a solution, and then executes it using locomotion and pedipulation skills.
Abstract
Pedipulating a freestanding articulated object requires controlling its pose and internal configuration while maintaining balance. We demonstrate this capability by autonomously solving a giant Rubik’s Cube with a quadruped using only its feet. The task demands repeated precise interactions, since unintended layer motion can invalidate subsequent operations. We develop an onboard RGB-D perception pipeline that estimates the cube’s metric pose and its full color state from partial views acquired through locomotion and flipping. A planner converts the computed solve into robot-executable skill sequences. Learned whole-body skills reorient the cube while preserving its layer configuration and turn its layers with one foot pinning the cube as the other pushes. We train these skills using reinforcement learning with privileged observations and distill them into policies that map onboard depth and proprioception to joint targets. The deployed policies tolerate variations in relative robot–cube placement and recover from external disturbances. The system completes three autonomous hardware solves, each about 30 steps over 8–9 minutes.
These results show that combining onboard perception with coordinated pedipulation enables a quadruped to complete extended multi-step physical tasks.
System overview

- Once per solve
A cube solver uses the complete cube net to produce a solution, which the planner converts into repositioning, flips, and layer rotations.
- Between skills
RGB-D perception updates the cube pose so the robot can reposition for the next skill.
- During each skill
Repositioning uses a pose controller, while learned pedipulation policies directly map proprioception and front-camera depth to joint-position targets.
Cube perception
The cube perception pipeline uses RGB-D images from the onboard ZED X Mini to estimate the cube’s geometric pose, semantic pose, and partial cube net from each view. During scanning, partial nets from multiple viewpoints are aggregated to reconstruct the complete cube state used for planning.
We first segment the cube using SAM 3 and use the masked depth to estimate its geometric pose. The pose is initialized from the observed cube faces and refined with ICP, while a silhouette consistency check rejects incorrect estimates.
For color-state estimation, the visible cube faces are rectified into 3×3 grids and their facelet colors are classified in CIE-LAB space. The uniquely colored center facelets resolve the cube’s rotational symmetry, yielding its semantic pose and allowing the observed colors to be assembled into a partial cube net.

Up to 2 m, geometric pose estimation achieves about 2 cm median position error and below 3° median rotation error. Across our evaluation sequences, facelet classification reaches 100% accuracy indoors and 98.7% outdoors.
Perceptive pedipulation skills
Learning the skills
We train three policies: Flip Forward, Flip Backward, and Rotate CCW. For each, we train a teacher with privileged observations using reinforcement learning, then distill it into a perceptive recurrent student policy for deployment. The students receive proprioception and depth images from ANYmal-D’s two front-facing cameras and directly output joint-position targets.
In simulation, we model the cube as three layers connected by two passive revolute joints, with static and dynamic joint friction estimated from measurements on the physical cube.
Across all three skills, rewards are organized into the same four groups: foot placement, cube interaction, robot goal state, and regularization, with skill-specific terms within each group. For the flips, they guide the foot to the desired contact region, reward tipping the cube, and limit unintended layer motion and cube displacement. For Rotate CCW, they encourage the right foot to pin the cube while the left foot turns the upper layers. Because this coordinated interaction is difficult to learn from scratch, a wrench-assisted curriculum initially stabilizes the cube and is gradually removed based on training success.
Domain randomization varies the robot’s initial configuration and placement, robot and cube masses, contact friction, layer friction, and external pushes. Layer friction is randomized across episodes and, for Rotate CCW, also within episodes to discourage reliance on a single impulsive push. Student training additionally randomizes camera extrinsics and applies stereo depth noise.
Rotate CW is not separately trained, but obtained at inference time by reflecting the observations and actions of the Rotate CCW student about the robot’s sagittal plane.
In simulation, the perceptive student policies closely match the performance of their privileged teacher policies and remain reliable for robot–cube placements beyond the range seen during training. Ablations show that onboard depth substantially improves performance, while recurrent memory improves reliability for Flip Forward and Rotate CCW. For Rotate CCW, comparison with hierarchical foot-target control shows that direct whole-body joint-space control benefits simultaneous pinning and pushing.
Deployment
Skill demonstrations
Repeatability
Consecutive trials from varied initial cube placements, all within the training range of cube–base distance and yaw.
Robustness across conditions and disturbances
Initial cube misalignment
Terrain and friction
External disturbances
Different objects
Our system autonomously solves a giant Rubik’s Cube using only a quadruped’s feet. Beyond the solve, it demonstrates how onboard perception, planning, and learned whole-body control enable extended pedipulation of a freestanding articulated object.
BibTeX
@unpublished{amiet2026solving,
title = {Solving a Giant Rubik's Cube with a Quadruped Robot},
author = {Amiet, Lukas and S{\'a}nchez-Blanco Repgen, Gabriel and
Mittal, Mayank and Klemm, Victor and Cramariuc, Andrei and
Hutter, Marco and Cadena, Cesar},
note = {Under review},
year = {2026}
}