CoRL 2026

Energy-Based Policy Orchestration

Weirui Ye1*Yen-Jen Wang2,5*Elvis Hsieh2*Zhiyang Dou1Shibo Zhao3,5
Pieter Abbeel2,5Yilun Du4Leslie Pack Kaelbling1Tomás Lozano-Pérez1
1MIT CSAIL 2UC Berkeley 3Carnegie Mellon University 4Harvard University 5AmazonFrontier AI & Robotics

*Equal contribution

A humanoid carries several whole-body policies, each good at something different. EPO gives every policy one energy for the current state and command, runs the policy with the lowest energy that is still safe, and nudges the command to where that policy can deliver it.

Stairs, seed 6187: the general policy with goal refinement and EPO-M4 receive the same 3.0 m/s push; the curves are the logged feasibility Fk and energy Ek of the four policies. The method animation is driven by the logged values of the same episode and by one recorded goal-refinement call under an extreme command. The grid shows 16 EPO-M4 evaluation episodes across terrains and commands, picked by a fixed rule (lowest seed per test and terrain). All simulation shots replay recorded Isaac Lab evaluation episodes in Isaac Sim; the last shots are the real robot.

26% → 4.0%falls after a 3.0 m/s push: the general policy with goal refinement, then EPO with four policies (768 pushes each)
0.431standing-manipulation tracking error of EPO-M4; with refinement the robust policy has 0.466, the general policy 0.457, and the standing specialist 0.405 but survives only 35% of pushes
96.9 / 97.7survival (%) of EPO-M4 over normal, extreme and push conditions, walking / standing
40 msmedian time from a push to EPO-M4's first policy switch while walking (220 ms while standing, where it usually already runs the robust standing policy; 50 Hz control)
11× fewerpolicy switches than the learned MoE router over the same four policies: 1.38 vs 15.46 per episode for EPO-M4 and MoE-M4 (normal and push episodes)

Abstract

Hierarchical control scales robot behavior by separating task-level planning from low-level control. In dynamic, high-dimensional tasks, however, a fixed planner-to-policy interface can fail when contacts, balance, or disturbances evolve faster than high-level policy updates. Execution therefore requires choosing not only which low-level policy to run, but also which policy-specific goal should be given to it. We formulate this problem as policy orchestration: runtime selection of a policy–goal pair that is likely to remain feasible while tracking the planner target. We develop EPO, an energy-based policy orchestrator for modular goal-conditioned policy families. For each policy, EPO learns a composite energy over low-level goals, where lower energy corresponds to higher feasibility and more accurate target realization. At runtime, EPO refines each policy's goal and executes the lowest-energy policy–goal pair. Because energies are policy-specific, new policies can be incorporated by learning their own energy models, without retraining the existing policies or a centralized scheduler. In simulation, EPO improves the empirical precision–robustness trade-off by refining policy-specific goals before selectively switching among policies based on energy scores. We further demonstrate sim-to-real deployment of the same frozen policies and energy models on real humanoid loco-manipulation tasks.

The interface

From a fixed target-to-goal map to a choice of policy and goal

In a standard hierarchy the planner's target z* is passed to one low-level policy through a fixed map. EPO sits between the planner and a library of frozen goal-conditioned policies and turns each target into a policy–goal pair (k, z): which policy runs, and which goal it is given. The planner and the policies are unchanged; with one policy and a fixed map, EPO reduces to the standard interface.

Standard hierarchyHigh-level planner→ z* →fixed map→ z →one policy π→ joint targets
With EPOHigh-level planner→ z* →EPO: pick (k, z) by energy Ek(s, z; z*)→ (k, z) →πgenπgenRπstandπstandR→ joint targets

A shared 16-D command

Targets and goals live in one command space. Each policy reads the subspace it was trained on; the energy models receive the padded 16-D command and a mask of the active coordinates.

vx
vy
ωz
pL
pR
θL
θR
h
base velocity (3)left / right hand position (6)left / right hand orientation (6)torso height (1)
PolicyBase velocityTorso heightHand poseTraining
πgenactiveactiveactiveloco-manipulation; base-velocity perturbations up to ±1 m/s
πgenRactiveactiveactiverobust variant: perturbations up to ±2 m/s, wrist payloads up to 2 kg
πstandmasked (zero)activeactivestanding manipulation; base-velocity perturbations up to ±1 m/s
πstandRmasked (zero)activeactiverobust variant: perturbations up to ±2 m/s, wrist payloads up to 2 kg

Goal refinement moves only the active base-velocity and torso-height coordinates; hand targets are passed through unchanged.

The policy family

Four policies, two trade-offs

The library is built along two axes that trade against each other. Robustness vs. precision: training with stronger perturbations and wrist payloads buys disturbance tolerance at the cost of nominal tracking precision. Generalist vs. specialist: a policy that only stands gives up walking but tracks hand and height targets more precisely. All four policies share one reward function and differ only in command ranges, perturbation magnitudes and wrist payloads; they are trained with reinforcement learning and frozen before EPO is trained. No single policy is best everywhere, which is what EPO exploits.

Nominal · precision-orientedRobust · recovery-oriented Generalist

πgen

general whole-body policy

Walks and manipulates; base-velocity perturbations up to ±1 m/s in training.

walking error 0.549 · push survival 83.1%

πgenR

robustness-oriented generalist

Same commands; perturbations up to ±2 m/s and wrist payloads up to 2 kg.

walking error 0.568 · push survival 98.7%
Specialist

πstand

standing-manipulation specialist

Base velocity masked; tracks hand and torso-height targets while standing.

standing error 0.396 · push survival 34.6%

πstandR

robust standing specialist

Standing manipulation with perturbations up to ±2 m/s and wrist payloads up to 2 kg.

added last, as EPO-M4

Numbers: each policy executed alone on the evaluation commands (128 seeds × 3 terrains); error is the tolerance-normalised tracking error on normal commands, push survival is after one 3.0 m/s push. Modular by construction: EPO-M2 uses the two generalists; EPO-M3 adds πstand and EPO-M4 adds πstandR. Each addition trains only the new policy's energy models (about 30 GPU-minutes); existing policies, energy models and the orchestration rule stay unchanged, whereas a learned MoE router is retrained on every library change (40–60 GPU-minutes).

Real robot

The same frozen policies and energy models on hardware

EPO deployed on the humanoid for whole-body loco-manipulation, with the policies and energy models trained in simulation.

Ball impact. A basketball is thrown at the standing robot.
Opening a door. The robot walks up to a door and opens it.
Box pick-up. The robot walks to a box on a table and picks it up.
Same seed, same disturbance

A single policy against the library

Each clip replays two recorded evaluation episodes that share the seed, the command sequence and the disturbance. Left: one policy with goal refinement. Right: EPO choosing among four policies. The chip in the corner and the strip below show which policy is executing and the predicted feasibility Fk of every policy.

πgen generalπgenR robustπstand standingπstandR robust standingepisode terminated

Rendering: every clip replays the recorded base pose and joint angles of an Isaac Lab evaluation episode in Isaac Sim; nothing is re-simulated. Clips are examples chosen by a fixed rule (for the comparisons: the lowest seed where the single policy is terminated and EPO is not); each caption gives the counts over all episodes of that test, and the numbers over all 768 pushes are in Results.

Uneven ground, blocks, waves, stairs

More terrains and commands

The same evaluation on uneven ground, random blocks, waves and stairs: pushes compared against a single policy, and EPO under command sequences that jump between the extremes of the training range every 2 s. Yellow spheres mark the planner's hand targets. These clips are rendered on the terrain mesh of the evaluation, rebuilt from the same generator settings and seed.

Method

One energy per policy, used twice

Every policy πk in the library comes with two small models trained on its own rollouts. The feasibility model predicts whether the robot survives the next second if πk is given goal z. The consistency model predicts the outcome πk will reach, as a Gaussian, and scores how much of it lands inside the tolerance box around the command.

E_k(s,z;z^\star) = -\log F_k(s,z) - \log C_k(s,z;z^\star)

The same energy drives both decisions the controller makes.

Standard hierarchy passes the commanded goal to one policy. EPO evaluates an energy for every policy in the library, refines the goal by gradient steps, and executes the policy and goal with the lowest energy.

Stay safe

If the executing policy's feasibility stays below τ = 0.9 for Ne = 3 control ticks (60 ms), EPO switches to the lowest-energy policy that is still above τ.

Select

Otherwise a challenger replaces the executing policy once its energy advantage, accumulated over ticks, reaches a budget B. Selection runs at 50 Hz.

Refine

At 10 Hz the selected policy's goal takes three gradient steps down its energy, in base velocity and torso height, and the lowest-energy point is executed.

Learning the energy models

For each policy, both models are trained offline from H = 50-step rollouts (one second at 50 Hz) of that policy alone, with goals sampled in the shared command space. Every policy uses the same sampling protocol and the same definition of success, so energies of different policies sit on one likelihood scale and can be compared directly.

Composite energy: the negative log of the joint probability that πk stays feasible over the horizon and lands within tolerance of the target\begin{gathered}E_k(s,z;z^\star) = -\log J_k(s,z;z^\star)\\ J_k(s,z;z^\star) = F_k(s,z)\,C_k(s,z;z^\star)\end{gathered}
Feasibility model: binary cross-entropy on all rollouts, label yF = 1 if the rollout stays failure-free for H steps\begin{aligned}\mathcal L^{\mathrm F}_k = -\frac{1}{|\mathcal D^{\mathrm F}_k|}\sum_i \Big[&y^{\mathrm F}_i \log \hat F_k(s_i,z_i)\\ &+ (1-y^{\mathrm F}_i)\log\big(1-\hat F_k(s_i,z_i)\big)\Big]\end{aligned}
Consistency model: a heteroscedastic Gaussian over the realized goal yi = g(ξi) of feasible rollouts (hindsight labels), trained with the energy score, a strictly proper scoring rule\begin{gathered}\hat p_k(Y\mid s,z,\mathcal F_H)=\prod_d \mathcal N\big(Y_d;\mu_{k,d}(s,z),\sigma^2_{k,d}(s,z)\big)\\ \mathcal L^{\mathrm C}_k = \frac{1}{|\mathcal D^{\mathrm C}_k|}\sum_i \Big(\mathbb E\,\|X_i-y_i\| - \tfrac12\,\mathbb E\,\|X_i-X_i'\|\Big)\\ X_i,X_i'\sim\mathcal N(\mu_i,\mathrm{diag}\,\sigma_i^2)\end{gathered}
At runtime, the density is integrated over the tolerance box around the target; tolerances enter only here, after training\begin{gathered}\hat C_k(s,z;z^\star)=\prod_{d\in\mathcal I}\Big[\Phi\Big(\tfrac{z^\star_d+\epsilon_d-\bar\mu_{k,d}}{\bar\sigma_{k,d}}\Big)-\Phi\Big(\tfrac{z^\star_d-\epsilon_d-\bar\mu_{k,d}}{\bar\sigma_{k,d}}\Big)\Big]\\ \hat E_k=-\log\hat F_k-\log\hat C_k\end{gathered}
Heat maps of feasibility, consistency and energy over forward velocity and torso height for two recorded states, with the refinement path from the commanded goal to the returned goal.

Energy landscapes of πgen for two refinement calls recorded during evaluation, over forward velocity and torso height. The path is the commanded goal, three refinement steps and the returned goal. Top: a typical call under normal commands. Bottom: the call with the largest energy decrease under extreme commands.

Results · 128 seeds × 3 terrains

Near the general policy's precision, near the robust policy's survival

Walking: EPO-M4 tracks with error 0.548, close to the general policy with refinement (0.541) and below the robust one (0.557), while raising survival from 93.6% to 96.9%. Standing: error 0.431, below both the general (0.457) and the robust policy (0.466), at 97.7% survival against 87.9% for the general policy. Against the learned MoE router over the same four policies, EPO-M4 has lower error in both modes (0.548 vs 0.568 walking, 0.431 vs 0.461 standing).

MethodError ↓NormalExtremePushSurvival ↑

Error is the tolerance-normalised tracking error on normal commands. Survival is the percentage of episodes without termination, averaged over normal commands, extreme commands and one 3.0 m/s push. +Opt is a single policy with goal refinement. MoE is a learned mixture-of-experts router over the same library.

What the selector does

Few switches in normal tracking, fast switches after a push

Averaged over normal and push episodes, EPO-M4 switches 1.38 times per episode against 15.46 for MoE-M4, about 11× fewer. The switches also go where they are needed: under normal commands EPO switches 0.8–1.8 times per episode while MoE switches 15–31 times, and in push episodes EPO switches 1.0–1.7 times while MoE almost never does (0.01–0.12). The accumulated-advantage budget B suppresses switching when energies are close, and the feasibility threshold τ forces a switch when the executing policy is in trouble.

Normal commands

MoE-M214.61
MoE-M329.00
MoE-M430.90
EPO-M21.12
EPO-M30.84
EPO-M41.76

Push episodes (one 3.0 m/s push)

MoE-M20.10
MoE-M30.12
MoE-M40.01
EPO-M21.68
EPO-M31.23
EPO-M40.99

Mean policy switches per episode, 768 episodes per bar (EPO with B = 40, τ = 0.9). Normal: episodes under normal walking and standing commands. Push: episodes with one 3.0 m/s push; MoE switches almost never there, so its push bars are barely visible.

What happens after a push

Walking (EPO-M4, 384 pushes): the first switch comes a median 2 ticks after the push. 318 episodes switch away and finish on another policy, mostly the robust πgenR; 10 switch away and end back on the pre-push policy; 39 never leave it; 17 fall. Standing (384 pushes): EPO-M4 already stands on πstandR before the push in most episodes, so the first switch comes later (median 11 ticks) and 146 episodes never switch; 14 fall. Returning to the pre-push policy after recovery is the exception, not the rule.

Feasibility of the policy executing before the push and of the best policy in the library, and the share of episodes executing each policy, aligned to the push time.
Ablations · EPO-M2

Safety comes from the threshold τ, precision from goal refinement

VariantNormal error ↓Push falls ↓Switches / episode
Full EPO-M20.50554.30%1.40
No goal refinement0.5126 (+0.0071*)3.12% (-1.17)1.37
Feasibility only0.5060 (+0.0004)4.43% (+0.13)1.40
Consistency only (no τ)0.5056 (+0.0001)28.52% (+24.22*)0.55
No feasibility threshold τ0.5054 (-0.0001)25.26% (+20.96*)0.57

In brackets: paired difference to full EPO-M2 over the same 128 seeds × 3 terrains (768 push episodes); * marks a 95% whole-seed bootstrap interval that excludes zero. Removing the feasibility threshold τ raises push falls from 4.3% to 25.3%; selecting by consistency alone (no feasibility, hence no τ) raises them to 28.5%; removing refinement raises normal error by +0.0071.

Cite

BibTeX

@inproceedings{epo2026,
  title     = {Energy-Based Policy Orchestration},
  author    = {Ye, Weirui and Wang, Yen-Jen and Hsieh, Elvis and Dou, Zhiyang and Zhao, Shibo and Abbeel, Pieter and Du, Yilun and Kaelbling, Leslie Pack and Lozano-P{\'e}rez, Tom{\'a}s},
  booktitle = {Conference on Robot Learning (CoRL)},
  year      = {2026}
}