ADEPT: Accelerating Dexterity via Pre-Training
and Post-Training using Reinforcement Learning

Authors

Jayjun Lee1,2 Jessica Yin1 Asif Rana1 Nicholas Blauch1 Sam Mady1 Mohak Bhardwaj1 Nima Fazeli2 Nathan Ratliff1 Karl Van Wyk1 Ankur Handa1

ADEPT pre-trains one dexterous policy in simulation, post-trains it into task specialists, and deploys them zero-shot on real high-DoF arm–hand robots — from raw vision and touch, at human speed.

ADEPT overview · autonomous policies at 1× speed

The idea

A faster path to general dexterity

Dexterous robots repeatedly need the same core abilities—reach, grasp, lift, reorient, and transport. Yet conventional RL learns them again from scratch for every downstream task.

ADEPT first learns this shared foundation through a generic object reposing task. It then post-trains task specialists while preserving the pretrained behavior, and distills them into perceptive policies for zero-shot sim-to-real deployment.

The pre-training cost is paid once and amortized: each new task post-trains in roughly 3B environment steps, where training a single task from scratch takes around 9B — and rarely succeeds.

Learn dexterity once. Build every new behavior on top.

Robot hand reaching toward a two-pronged peg beside the pegboard
Reach
Robot hand transporting the two-pronged peg above the pegboard
Lift & Transport
Robot hand inserting the two-pronged peg into the pegboard
Insert

The method

The ADEPT recipe

Four stages carry a policy from broad simulated experience to contact-rich manipulation from raw visual and tactile perception.

Throughout, a joint-space geometric fabric sits between the policy and the robot — enforcing joint limits and collision safety while exposing the arm–hand system's full kinematic dexterity, with the same controller running in simulation and on hardware.

Reposing pre-training · 32 environments · both embodiments
Broad experience

One generic object-reposing task over randomized primitives teaches the reusable dexterous prior πpre.

Reach Grasp Lift In-hand reorient Transport
opre, rpre πpre · ADR curriculum

Click the tabs to step through the pipeline · hover the dotted terms

Pre-training diet

16 primitives. Every skill.

The entire pre-training curriculum is 16 primitive shapes at randomized scales — nothing else. Click a primitive to watch the pretrained teacher repose it, and toggle true scale to see the range one policy handles, from a 50 mm sphere to a 250 mm rod.

KUKA–Allegro
Flexiv–Sharpa
01 · Cuboid 50 × 100 × 100 mm

Pseudocode

ADEPT training, end to end

Pre-train reusable dexterity, then adapt it without erasing the prior.

01 Pre-training
def pre_train(M_pre, fabric, adr):
    pi_pre, V_pre = initialize_actor_critic()
    ppo = PBT.initialize_optimizer()

    for epochs in range(0, max_epochs):
        env = M_pre.sample(
            objects=primitive_shapes(count=16),
            scale="random", goal_pose="random",
        )
        # randomise physics params with an annealing schedule.
        adr.randomise(env)
        trajectories = []

        # Generate simulation rollouts
        for step in rollout_horizon:
            o_pre = env.observe()
            action = pi_pre.sample(o_pre)
            command = fabric.full_cspace_command(action)
            transition = env.step(command)
            trajectories.append(transition)

        pi_pre, V_pre = ppo.update(
            trajectories, reward=reposing_reward
        )
        adr.advance_if_ready(success_rate(trajectories))
        ppo = PBT.tune(ppo)

    return pi_pre, V_pre
02 Post-training
def post_train(pi_pre, M_post, fabric):
    # A. Distill the prior into the expanded observation space.
    pi_post = initialize_actor(observations=M_post.observations)

    while not actor_distilled:
        o_post = M_post.sample_observations(adr_level=20)
        a_teacher = pi_pre(project_to_pretrain_obs(o_post))
        loss_bc = distillation_loss(pi_post(o_post), a_teacher)
        minimize(loss_bc, parameters=pi_post)

    # B. Calibrate a fresh critic before updating the actor.
    V_post = initialize_critic()
    freeze(pi_post)

    while not value_calibrated:
        trajectories = rollout(pi_post, M_post, fabric)
        returns = discounted_returns(trajectories, M_post.reward)
        minimize(mse(V_post(trajectories.obs), returns))

    # C. Add downstream behavior with conservative PPO.
    unfreeze(pi_post)
    actor_lr = 1e-5, clip_eps = 0.05, critic_lr = 5e-5

    while not converged(pi_post):
        trajectories = rollout(pi_post, M_post, fabric)
        advantages = GAE(trajectories, V_post)
        pi_post, V_post = conservative_PPO(
            trajectories, advantages, actor_lr, critic_lr, clip_eps
        )
        M_post.adr.advance_if_ready(success_rate(trajectories))

    return pi_post, V_post

Capabilities

Dexterity in motion

Continuous policies coordinate the complete task rather than relying on fixtures, scripted stage decomposition, or object-pose estimates.

01
FMB peg insertionReach · grasp · reorient · insert
02
Dish-rack placementFlip · regrasp · transport
03
FMB star-peg insertionGrasp · reorient · insert

Visuo-tactile

Touch closes the loop.

The 29-DoF Flexiv–Sharpa student fuses stereo RGB with per-finger Sharpa TacMap deformation and contact signals. The lower panels stream the tactile observations the policy acts on — they light up on contact. In real deployment, touch is decisive: 8/10 overall versus 3/10 for the vision-only student on the same task. Without it, the policy cannot tell a grasp has succeeded and loops between grasping and regrasping.

Visuo-tactile studentStereo RGB · per-finger TacMap

Results

Hands vs. jaw grippers

The staged FMB parallel-jaw pipeline relies on external fixtures and multi-stage regrasp decomposition: 20–70 s per trial. ADEPT solves the same benchmark as one continuous learned behavior on 23- and 29-DoF arm–hand systems — 5–10 s per trial, a 2–14× speedup.

FMB pipeline · ~70 s · 5× speed
ADEPT · ~9 s · real-time
Same video length, different clocks: a 70 s parallel-jaw episode at 5× speed vs a 9 s KUKA–Allegro trial in real time
FMB pipeline · ~20 s · real-time
ADEPT · ~5 s · real-time
Both real-time: the pipeline's fastest 20 s episode vs a 5 s Flexiv–Sharpa visuo-tactile trial

Real-world evaluation

Per-stage success on hardware.

Cumulative per-stage success over 10 trials per condition — reaching a stage requires succeeding at every stage before it. All policies run zero-shot, with no real-world fine-tuning.

KUKA–Allegro · FMB peg insertion

Star peg Square + round

Flexiv–Sharpa · FMB peg insertion

Visuo-tactile Vision

KUKA–Allegro · dish placement

Vision

Qualitative analysis

Pre-training learns the repertoire.
Post-training aligns it to the downstream task.

Reposing pre-training learns a diverse repertoire of generic, naturalistic grasps. Post-training layers the task on top of that prior rather than relearning manipulation from scratch — it refines the repertoire and aligns it to the downstream task. Trained from scratch, RL converges to whatever maximizes reward: contorted, unnatural grasps that vary wildly across seeds.

With pre-training
From scratch
FMB insertion · KUKA–Allegro · same task, same success — different hands
With pre-training
From scratch
FMB insertion · KUKA–Allegro · pre-trained grasp vs discovered contortion

Read the research

ADEPT

Accelerating Dexterity via Pre-Training and Post-Training using Reinforcement Learning

BibTeX
@article{adept2026,
  title   = {ADEPT: Accelerating Dexterity via
             Pre-Training and Post-Training using
             Reinforcement Learning},
  journal = {arXiv preprint arXiv:2608.19182},
  author  = {Lee, Jayjun and Yin, Jessica and Rana, Asif and
             Blauch, Nicholas and Mady, Sam and Bhardwaj, Mohak and
             Fazeli, Nima and Ratliff, Nathan and Van Wyk, Karl and
             Handa, Ankur},
  year    = {2026}
}