Plans from Demonstrations, Skills from Reinforcement Learning An agentic teacher and student for long-horizon bimanual tower manipulation

Visak Kumar

San Francisco

The submitted student on four three-layer tasks (transfer, cross transfer, push-down, insertion), seen from one of its four cameras. Boxes are the student's own estimates of the block poses (a white box, where shown, is the true pose). Simulation (Isaac Sim, PhysX); twice real speed.

Summary

The TOWER challenge at the G2A workshop (CoRL 2026) asks two simulated robot arms to transfer, stack, dismantle and fill towers of Jenga-style blocks while seeing the scene only through four cameras. An episode lasts up to 210 seconds and chains as many as nine grasps, places or pushes, each with millimetre tolerances, under unknown block mass, friction and tower placement. Instead of cloning the organizers' 531 demonstrations end to end, we use them for what they state reliably: the task plan and the geometry of the scene. The contact skills (grasping, placing, pushing) are learned with reinforcement learning in our recreation of the evaluator, and an agentic controller strings them together: it calls one skill at a time, checks the outcome, and retries, skips or switches arms. This teacher reads exact block poses from the simulator. We distil it into a student that uses only the official observations: a keypoint network with a multi-view pose fit replaces the exact state, a transformer trained with DAgger replaces the hand-written decision logic, and behaviour cloning with noise injection replaces the planned insertion controllers. In our closed-loop tests on rendered camera images, the submitted student succeeds in 59 of 60 transfer and stacking episodes; push-down and insertion remain the hard part. Because the system is made of separate skills, learned parts can replace planned ones one at a time: after the deadline, reinforcement-learned reaching replaced the planned arm motions without retraining anything else. Official results are announced at the workshop on November 12.

1. The problem

Two seven-joint AgileX Nero arms with parallel grippers, called left and back after where they are mounted, share a table with two tower pads. Each pad carries three fixed foundation blocks; the movable blocks are 150 × 50 × 28 mm. Four RGB cameras watch the scene: two fixed cameras on opposite sides of the table and one on each wrist. There are five tasks, each with a two-layer and a three-layer variant, so ten variants in all.

Start (top row) and end (bottom row) of the five three-layer tasks from the front camera: a tower moved between pads, centre blocks moved across, a column stacked, a full tower pushed apart, and blocks inserted into a tower.
The five three-layer tasks, start (top) and end (bottom), from one fixed camera. Frames from the organizers' public demonstrations (TOWER-SimData, CC BY 4.0), cropped and arranged by us.
TaskWhat has to happenOperations (2 / 3 layers)ArmsDemo length (2 / 3 layers)
1 Tower transferMove the side blocks of a tower, two per layer and top layer first, onto the other pad4 / 6alternate by layer115–119 s / 177–181 s
2 Cross transferMove the centre block of each layer, top first, and rebuild the cross-shaped tower on the other pad2 / 3alternate by layer59–62 s / 92–95 s
3 Vertical stackingStack single blocks on the other pad with their centres vertically aligned2 / 3back arm only58–61 s / 83–91 s
4 Push-downPush every block off a full tower (three per layer), top layer first, in a fixed order6 / 9alternate by layer116–122 s / 171–176 s
5 InsertionInsert blocks into the empty centre slots of a tower, highest first, with about 1 mm of clearance per side1 / 2left; back, then left58–60 s / 160–161 s

Operations are grasp-and-place transfers (Tasks 1–3, 5) or pushes (Task 4). Demo lengths are the range over the organizers' demonstrations: 50–56 per variant, 531 in all, recorded at 30 Hz.

What the policy sees and does

The policy runs as a server. At each call it receives the four camera images (640 × 480), the 14 joint angles, the two gripper widths, the simulated time and the task name, and it returns a chunk of up to 16 rows of joint targets. Each row holds 7 joint angles and a gripper width per arm and is applied for 0.1 s, so the robot runs at 10 Hz and an episode of 210 s has up to 2,100 rows. The simulation pauses while the policy thinks.

$$o_t=\big(I^{(1)}_t,\dots,I^{(4)}_t,\;q_t\in\mathbb{R}^{2\times 7},\;w_t\in\mathbb{R}^{2},\;t\big),\qquad A_t\in\mathbb{R}^{H\times 16},\quad 1\le H\le 16 .$$

The policy is never told block poses, depth, velocities, forces, masses, friction or which robustness case it is in. Each variant is evaluated on ten episodes: one nominal and nine drawn from the robustness cases below, on fixed layouts that participants do not see.

Robustness caseRange
Light, heavy, unevenblock mass × 0.4–0.7, × 1.4–2.0, or × 0.4–2.0 per block
Slippery, high frictionstatic friction 0.15–0.30 or 0.9–1.3 (dynamic 0.07–0.14 or 0.5–0.8)
Shifted assemblywhole tower moved up to 15 mm per axis and turned up to 10°
Irregular layerseach layer moved up to 8 mm and turned up to 5°
Lightingintensity × 0.25–2.0, colour 3000–8500 K, direction ±60°
Combinedmass × 0.5–1.8 per block, mixed friction, shift up to 10 mm / 8°, light × 0.4–1.6

Scoring works at three levels: task success (every block where it belongs, nothing else disturbed), operation success (grasps and places, or pushes), and long-horizon progress, the share of the task's steps completed in order. A disturbance rate counts non-target blocks that were moved. Tasks are weighted 1 : 1 : 1 : 3 : 3, so push-down and insertion carry two thirds of the total.

2. Why long-horizon bimanual manipulation is hard

3. Why not imitation learning alone

The challenge ships demonstrations, and the obvious approach is to clone them. We decided against making that the core of the system. This is our reasoning, not an experiment we ran:

Imitation itself is not the problem; imitating a fixed set of demonstrations is. Our student is also trained by imitation, but of a teacher we can query in any state, including states we create by injecting failures. So we split the work: take the plan and the geometry from the demonstrations, learn the contact skills with reinforcement learning, and learn the decisions by interactive imitation of our own teacher.

Taken from the demonstrations

  • Task plans: block order and the arm for each operation
  • Tower layouts and block rest heights; pad and foundation poses
  • Grasp and push geometry: where to hold a block, approach tilt, via-point heights
  • Arm postures used as priors for inverse kinematics
  • The arms' drive gains, read back from the recordings
  • Camera calibration (projected block edges within 0.25 px of the images)
  • 3,520 labelled camera frames from the organizers' renderer (2,800 for training, 720 held out)

Learned with reinforcement learning

  • Grasp and lift, per arm
  • Place and release, per arm
  • Push a block off the tower, per arm
  • Reaching between skills (after the deadline, student v1.5)

Learned by supervised and interactive imitation

  • The keypoint network for block poses
  • The high-level policy that picks the next subtask
  • The insertion skills (from planned controllers)

4. An agentic robot system

By agentic we mean a system that works the way a software agent uses tools: it breaks the goal into steps, calls a specialized skill for each step, checks the result, and decides what to do next. The skills are the tools; some are learned with reinforcement learning and some are planned. In the teacher the decisions come from a task graph and an executor; in the student they come from a learned high-level policy. We think this structure fits long-horizon manipulation for five reasons:

In the language of hierarchical reinforcement learning, the high-level policy \(\mu\) picks an option (Sutton et al., 1999), a subtask with a goal block and an arm, from the estimated state \(\hat s_t\) and a memory \(m_t\) of earlier subtasks and their outcomes, and the option's skill produces the actions until its success check ends it:

$$\omega_k=(\text{subtask},\ \text{goal},\ \text{arm})\sim\mu(\cdot\mid \hat s_t,\,m_t),\qquad a_t\sim\pi_{\omega_k}(\cdot\mid \hat s_t).$$

4.1 Recreating the evaluator

The evaluator itself is not public, so we rebuilt it in Isaac Lab (Mittal et al., 2023) from the official station and block assets. Every number that matters was matched to the organizers' data:

5. The teacher

The teacher is privileged: it reads the exact pose of every block from the simulator, including hidden ones. Its decisions come from a task graph per variant and a deterministic executor; the contact skills are PPO policies.

learned (PPO)planned or analyticfrom the demonstrationsprivileged (simulator only)
The teacher. The executor calls one skill at a time, reads its outcome and moves on, retries, skips or switches arms. Transits send up to 16 rows per call; contact skills send one row per call and see the result before the next.

5.1 Task graphs and the executor

A task graph is a list of skill calls built from the demonstrations' plan. A transfer is four calls per block (move to the pre-grasp pose, grasp and lift, carry to the pre-place pose, place and release), a push-down two per block (move behind the block, push), an insertion six per block (approach, grasp, carry to the slot, insert, move behind the block, push it home). The idle arm is parked whenever the working arm changes. The graphs have 7–27 calls.

{"id": "t0_grasp", "skill": "grasp_lift", "arm": "back", "block": "source_l2_a", "lift_m": 0.06, "timeout_s": 15.0}
{"id": "t0_place", "skill": "place_release", "arm": "back", "tol_pos_m": 0.005, "tol_yaw_deg": 5.0, "settle_s": 1.0}

Two calls from the Task 1-2 graph (some fields left out).

The executor runs at 10 Hz. Each call it builds the current skill from the state, steps it, and judges its outcome when it ends: lifted and held, placed within tolerance, pushed clear with the rest of the tower within 10 mm, inserted to depth. On a failure it retries (up to three attempts per block: re-grasp, re-place, or re-carry if the block is still held), skips the block, or, once per block, hands a place that missed by up to 15 mm to the other arm when its own arm cannot reach the block again. Before every move it parks the other arm if it is within 18 cm of the target.

How the task graphs were written. The task graphs, the executor and the recovery rules were written offline with an LLM coding agent (Claude Code), which also wrote the project's code under our direction. The graphs were refined in a loop: rehearse every variant in the recreated evaluator, write a report of failure patterns, make at most five bounded edits to the graph files, and keep an edit only if it beats the previous version on the same random seeds. Two of the three edits in that loop were kept: a slower carry speed for held blocks (0.12 → 0.08 m/s) and shifting the place goal by half of the measured in-hand offset. No language model runs during training, data collection or evaluation; running or retraining the system does not need one.

5.2 Learned contact skills

Grasp-and-lift, place-and-release and push are trained with PPO (Schulman et al., 2017), one policy per skill and arm, in light GPU scenes with one arm and up to 15 blocks, 3,072–4,096 environments in parallel. The setup is an asymmetric actor-critic (Pinto et al., 2018). The actor sees only what a camera-based system could estimate: noisy block poses (a per-episode bias of 2–3 mm and 2–3°, per-step jitter, occasional dropouts and 1 cm outliers) and the arm's own state. The critic additionally sees the true poses, block mass and friction, finger contact forces and joint velocities. Because the actors never relied on privileged inputs, the student reuses them unchanged.

We use the clipped PPO objective with generalized advantage estimation (Schulman et al., 2016), implemented in rsl_rl (Rudin et al., 2022):

$$\mathcal{L}^{\text{clip}}(\theta)=\mathbb{E}_t\Big[\min\big(\rho_t(\theta)\,\hat A_t,\; \operatorname{clip}\big(\rho_t(\theta),1-\epsilon,1+\epsilon\big)\,\hat A_t\big)\Big],\qquad \rho_t(\theta)=\frac{\pi_\theta(a_t\mid o_t)}{\pi_{\theta_{\text{old}}}(a_t\mid o_t)},$$ $$\hat A_t=\sum_{l\ge 0}(\gamma\lambda)^l\,\delta_{t+l},\qquad \delta_t=r_t+\gamma\,V_\phi(s_{t+1})-V_\phi(s_t),$$ $$\mathcal{L}(\theta,\phi)=-\mathcal{L}^{\text{clip}}(\theta) +c_v\,\mathbb{E}_t\big[(V_\phi(s_t)-\hat R_t)^2\big] -c_e\,\mathbb{E}_t\big[\mathcal{H}[\pi_\theta(\cdot\mid o_t)]\big].$$

The actor \(\pi_\theta\) reads the actor observation \(o_t\) (65–73 inputs); the critic \(V_\phi\) reads the privileged state \(s_t\) (141–161 inputs). \(\epsilon=0.2\), \(\gamma=0.99\), \(\lambda=0.95\), \(c_v=1\) (with a clipped value loss), \(c_e=0.006\); the learning rate adapts to keep the KL divergence between updates near 0.016. Networks: actor 256-256-128, critic 512-256-128, ELU.

From actions to joint targets

A skill's action is a small change of the gripper's target pose in the arm's base frame, plus a gripper command for grasp and place. It is smoothed and scaled with the distance to the goal (fine steps near the block, larger ones far away), then turned into joint targets by damped least-squares inverse kinematics with a posture prior, and finally corrected for gravity sag:

$$\bar a_t=0.3\,a_t+0.7\,\bar a_{t-1},\qquad \Delta p=s(d)\,\bar a_{1:3},\qquad \Delta\vartheta=\vartheta_{\max}\,\bar a_{4:6},$$ $$\Delta q=J^{\top}\big(JJ^{\top}+\lambda^2 I\big)^{-1}e+\big(I-J^{+}J\big)\,k\,(q_{\text{prior}}-q),\qquad q_{\text{cmd}}=q_{\text{des}}-K_p^{-1}\,\tau_g(q_{\text{des}}).$$

\(s(d)\) grows from 5 to 20 mm (grasp), 4 to 15 mm (place) or 12 to 15 mm (push) per step as the distance \(d\) to the goal grows; \(\lambda=0.02\); four iterations per step, at most 0.15 rad per joint per step; \(\tau_g\) is the gravity torque of the arm (and of a nominal block when holding one), \(K_p\) the joint stiffness.

Rewards

The push skill shows the pattern every skill follows: shaping toward the right contact, progress, penalties for disturbing anything else, and a large bonus for finishing early.

$$\begin{aligned} r_t ={}& 0.5\,r^{\text{align}}_t + 150\,(x_t-x_{t-1}) - \frac{\max(0,\,|y_t|-5\,\text{mm})}{1\,\text{cm}} - 0.2\max\big(0,\,|\Delta\psi_t|-2^\circ\big)\\ & - 0.5\sum_{j\neq\text{target}}\frac{\max(0,\,d_j-2\,\text{mm})}{1\,\text{cm}} - 0.01\,\|a_t-a_{t-1}\|^2 - 0.1\,r^{\text{limits}}_t\\ & + \mathbf{1}[\text{success}]\,(20+T-t) - 2\,\mathbf{1}[\text{failure}] \end{aligned}$$

\(x_t\) is the block's travel along the push direction, clipped to [−0.05, 0.16] m, so the progress term is potential-based; \(y_t\) its sideways travel, \(\Delta\psi_t\) its yaw change in degrees, \(d_j\) the displacement of every other block. \(r^{\text{align}}\) rewards the fingertips for reaching the contact pose 86.5 mm behind the block; \(r^{\text{limits}}\) penalizes joints within 0.1 rad of their limits. Success: the block has left the tower (0.16 m from its axis, or 0.09 m and on the table) while no other block moved more than 10 mm, tilted more than 30° or dropped more than 15 mm. Failure: the tower broke, or the block was shoved more than 4 cm sideways. Episodes last 8 s.

The grasp-and-lift reward $$\begin{aligned} r_t ={}& \varphi(k_t) + \mathbf{1}[\text{both pads touch}] + 2\,\mathbf{1}[\text{grasped}] + 0.5\,\mathbf{1}[\text{closing},\,k_t<1\,\text{cm}] + 3\min\!\big(h_t/8\,\text{cm},\,1\big)\,\mathbf{1}[\text{grasped}]\\ & - \sum_{j\neq\text{target}}\frac{\max(0,\,d_j-3\,\text{mm})}{1\,\text{cm}} - 0.01\,\|a_t-a_{t-1}\|^2 - 0.1\,r^{\text{limits}}_t\\ & + \mathbf{1}[\text{success}]\,\big(20+8\,(T-t)\big) - 10\,\mathbf{1}[\text{disturbed}] - 5\,\mathbf{1}[\text{dropped}] - 5\,\mathbf{1}[\text{bad grasp}], \end{aligned}$$ $$\varphi(k)=\frac{1}{e^{50k}+2+e^{-50k}}+\frac{1}{e^{100k}+e^{-100k}} .$$

\(k_t\) is the mean distance between four keypoints on the gripper and the same keypoints at the ideal grasp, \(h_t\) the lift height. Success: lifted 8 cm and held for five steps with the grasp within 10 mm along the block, 5 mm vertically and 6° of the ideal; otherwise the episode ends as a bad grasp. Episodes last 15 s and start from a mix of poses: around the pre-grasp, halfway down, or already straddling the block.

Training and results

Each policy trains for a few hundred to about a thousand PPO iterations at about 12,000 environment steps per second; the left grasp policy took about 850 iterations, 84 million steps and 2.1 hours. Measured on 500 episodes per setting on the GPU:

SkillLeft, nominalLeft, robustness casesBack, nominalBack, robustness cases
Grasp and lift100 %98.8 %99.2 %100 %
Place and release, exact poses99.6 %99.0 %99.8 %100 %
Place and release, noisy poses92.6 %92.2 %87.2 %84.8 %
Push98.4 %96.6 %99.6 %94.6 %

Independent 2 mm biases on the block and the goal limit any place to about 90 % at a 5 mm tolerance, which is why the noisy-pose numbers are lower.

5.3 Planned skills

With exact poses, the teacher completes 1,186 of 1,200 episodes on Tasks 1–3 and 446 of 480 across all ten variants (nominal and robustness cases, CPU physics).

6. The student

The student is what the evaluator talks to. It sees only the official observation. It keeps the teacher's structure and executor code but replaces three things: the exact state (by perception), the task-graph pointer (by a learned high-level policy) and the planned insertion controllers (by distilled networks). The task plan, the list of goals and the arm prescribed for each, still comes from the public demonstrations; nothing is taken from the evaluation layouts.

learnedplanned or analyticfrom the demonstrations
The student. Everything left of and above the high-level policy turns camera images into a state; everything below it is the teacher's skill machinery. Nothing reads the simulator.

6.1 Perception: keypoints, then geometry

The perception is a class-agnostic detector followed by model-based fitting. A keypoint network finds block corners and edges in each image without knowing which block is which. Identity, pose and confidence come from fitting the known box models to the detections in all four views together, with a tracker that carries each block from call to call.

Three panels of one camera view: the image, the network's edge map in cyan with corner peaks in yellow and arm-covered block surface in magenta, and the fitted block boxes drawn in orange and white.
One held-out frame from the public dataset (TOWER-SimData, CC BY 4.0), front camera, while the left arm lowers a block. Left: the image. Middle: the network's edge map (cyan), corner peaks (yellow) and block surface covered by the arm (magenta). Right: the boxes fitted jointly over all four cameras, movable blocks in orange and fixed foundation blocks in white. The movable blocks' median error on this frame is 0.14 mm.

Network. A U-Net (Ronneberger et al., 2015) on a ResNet-34 encoder (He et al., 2016) outputs four full-resolution maps: corners, edges, block surface, and block surface hidden by an arm or finger. Corners and edges are trained with the quality focal loss (Li et al., 2020) against Gaussian targets:

$$\mathcal{L}=\mathrm{QFL}(\hat Y^{\text{corner}},Y^{\text{corner}})+\mathrm{QFL}(\hat Y^{\text{edge}},Y^{\text{edge}}) +0.5\,\mathrm{BCE}(\hat M,M)+0.5\,\mathrm{BCE}_{w^{+}=5}(\hat O,O),$$ $$\mathrm{QFL}(z,y)=\frac{1}{N^{+}}\sum_{\text{pixels}}\big|\sigma(z)-y\big|^{2}\Big[-y\log\sigma(z)-(1-y)\log\big(1-\sigma(z)\big)\Big],$$ $$Y(u)=\max_k\exp\!\Big(-\frac{\|u-u_k\|^2}{2\sigma_Y^2}\Big).$$

\(\sigma_Y\) is 1.5 px for corners and 1.0 px for edge points; \(N^{+}\) is the number of pixels with target above 0.5; \(M\) the block mask, \(O\) the arm-covered mask (positive weight 5). Training data: 28,227 frames rendered from teacher rollouts in our simulator with randomized lighting, plus 2,800 frames of the organizers' dataset, which we sample three times as often; photometric, geometric and JPEG augmentation. On 400 held-out renders, 98.6 % of corners are found within 3 px (97.8 % precision) with a median error of 0.18 px.

Multi-view fit. Each block is a box with 8 corners and 152 edge samples. Its pose \((R,t)\) minimizes a robust reprojection error over all four cameras (the wrist cameras posed by the arm's forward kinematics), plus a prior from the tracker:

$$\begin{aligned}\min_{R,\,t}\;&\sum_{c=1}^{4}\Big[\sum_{i}w_{\text{c}}\,s_{ci}\,\rho\big(\|\pi_c(RX_i+t)-u_{ci}\|\big) +\sum_{j}w_{\text{e}}\,s_{cj}\,\rho\big(|n_{cj}^{\top}(\pi_c(RX_j+t)-e_{cj})|\big)\Big]\\ &+\tfrac12\Big\|\begin{bmatrix}t-t_0\\ \log(RR_0^{\top})^{\vee}\end{bmatrix}\Big\|^2_{\Lambda}\end{aligned}$$

\(\pi_c\) projects into camera \(c\); \(u_{ci}\) is the corner peak matched to corner \(X_i\); \(e_{cj}\) the nearest edge maximum along the projected edge normal \(n_{cj}\); \(s\) the network's peak values; \(w_{\text{c}}=1\), \(w_{\text{e}}=0.3\). \(\rho\) is the Huber loss (1.5 px) for the first two Gauss-Newton iterations and Tukey's loss (2.5 px) for the remaining four; points hidden by other blocks or by an arm are left out. The tracker's prior \((t_0,R_0)\) has base standard deviations of 10 mm and 0.05 rad, tightened for blocks at rest.

Tracker. A set of rules rather than a filter: a block that moved last call is predicted to move as much again; a block in a closed gripper follows the gripper's forward kinematics with a slowly updated in-hand offset; resting blocks are low-pass filtered and anchored; a lost moving block coasts for up to five calls; lost blocks are searched for on the table, on other blocks or leaning. Each block gets one of four confidence levels.

Accuracy and speed. On the organizers' frames, resting blocks are within 0.18 mm (median) and 0.62 mm (90th percentile), held blocks within 0.2 mm (90th percentile). The hard case is an inserted block nearly hidden under the roof of the Task 5 tower (90th percentile 3.5 mm). A call takes about 93 ms on our server, 86 ms of it perception.

6.2 The high-level policy

The high-level policy decides what to do next whenever a subtask ends (and every 2 s while idle). It is a transformer encoder (Vaswani et al., 2017) over an unordered set of tokens: one global token (task, time left, perception health), two arm tokens (gripper pose, holding, parked), up to 16 block tokens (estimated pose relative to the pads, confidence, how far it moved, offset to its goal) and up to 9 goal tokens (goal pose, attempts and outcomes so far, which arm can reach it, whether it is done). It has 3 layers, 4 heads and width 128, under one million parameters, and decides in 1–5 ms on a CPU. The decision is factorized: first the subtask type (acquire, deliver, push off, insert, push home, park, idle, re-push), then the goal by pointing at a goal token (Vinyals et al., 2015), then the arm:

$$p_\psi(o,g,a\mid x)=p_\psi(o\mid x)\;p_\psi(g\mid x,o)\;p_\psi(a\mid x,o,g),\qquad \ell_\psi(g=j\mid x,o)=\frac{(W_k h_j)^{\top}W_q\,[h_{\text{glob}};E_o]}{\sqrt{d}} .$$

Invalid choices are masked (for example, delivering a block the arm does not hold). A fourth head predicts, for every goal, whether it is satisfied right now.

The expert. The labels come from a privileged expert: the task graph's decision logic, but reading the simulator's truth about which goals are satisfied. It closes goals that are done even after a failed check, reopens a finished goal that was disturbed later, never hands a block to the other arm (that recovery failed in 206 of 217 tries for the teacher), gives up on tilted blocks, and leaves failed goals that are now buried under later layers alone.

Behaviour cloning, then DAgger. Rollouts run in the recreated evaluator with block poses passed through a perception-error model: recorded errors of the real estimator, replayed by block class (resting, held, moving, being pushed, foundation, fallen) with their confidence levels and the chance of losing a pushed block as it tips. With probability 0.15 per subtask a failure is injected (a shifted pre-grasp, a dropped block, a shifted goal, an off-centre grip, a short push), so that the data contain recoveries. Round 0 is driven by the expert with 10 % random exploration; three DAgger rounds (Ross et al., 2011) follow, in which the learner's decision is executed and the expert only labels (with probability β the expert's decision is executed instead):

$$\mathcal{D}_{i+1}=\mathcal{D}_i\cup\big\{(x,\,\mu^{*}(s))\;:\;s\sim d^{\,\beta_i\mu^{*}+(1-\beta_i)\mu_{\psi_i}}\big\}, \qquad \psi_{i+1}=\arg\min_\psi\,\mathcal{L}(\psi;\mathcal{D}_{i+1}),$$ $$\mathcal{L}(\psi)=\frac{\sum_b w_b\big[\mathrm{CE}(o^{*}_b)+\mathrm{CE}(g^{*}_b\mid o^{*}_b)+\mathrm{CE}(a^{*}_b\mid o^{*}_b,g^{*}_b)\big]}{\sum_b w_b} +0.5\,\overline{\mathrm{BCE}}\big(\hat y_{bj},y_{bj}\big),\qquad w_b=1+4\,\mathbf{1}[\text{off-nominal}_b].$$

\(\beta\) = 0.5, 0, 0.5 in the three DAgger rounds. Off-nominal rows (after a failure, an injection or exploration) weigh five times more. \(y_{bj}\) is the true "goal \(j\) satisfied" flag. Each round retrains from scratch on all data so far: 3,600 episodes and 65,242 decisions in the end. Validation decision accuracy 96.8 % (95.5 % on off-nominal rows); the satisfied-goal head reaches an AUC of 0.999.

6.3 Skills in the student

For DART, a slowly varying perturbation is added to the planned controller's target before every recorded step, and the label is the controller's correction from the perturbed state:

$$n_{t+1}=(1-\theta)\,n_t+\sigma\,\varepsilon_t,\qquad \varepsilon_t\sim\mathcal{N}(0,I_6),\quad \theta=0.3,$$ $$\mathcal{L}_{\text{BC}}=\frac1N\sum_i\Big[\tfrac16\big\|\tanh f_{1:6}(o_i)-a^{*}_{i,1:6}\big\|^2+0.1\,w_i\,\mathrm{BCE}\big(f_7(o_i),g^{*}_i\big)\Big].$$

\(\sigma\) per step is 1 mm and 0.15° (grasp), 0.2 mm and 0.04° (insert), 0.5 mm and 0.1° (push-in), scaled by a factor drawn from U(0, 1.5) per segment. The network is an MLP 68 → 256 → 256 → 256 → 7 with tanh-bounded motion outputs and a gripper logit, trained on 328,113 steps from 1,200 episodes. Distilled, the three skills succeed in 83 of 96 Task 5 test episodes against 78 for the planned controllers they imitate. One lesson: when the previous action was an input, the networks learned to copy it and drifted in closed loop; the previous-action input is now masked out.

6.4 From the first student to the submitted one

Testing against the official evaluator changed four things between our first student and the submitted one, student v1.3:

The submitted student is one frozen bundle of networks and configuration files served over a WebSocket, with independent state per evaluation session.

7. Training pipeline

learnedfrom the demonstrationsprivileged
How student v1.3 is built. The dashed arrow closes the loop: the trained keypoint network, run on rendered images, provides the error traces that the perception-error model replays.

Rebuilding the submission from the public downloads takes about 40 hours on one RTX A5000 (24 GB) and a 24-thread CPU: PPO on the GPU, rollouts and every acceptance test on CPU physics.

Lessons

8. Results (local evaluation)

Official results are announced at the G2A workshop at CoRL 2026 (Austin, November 12). This page will be updated with them. The numbers below are from our own recreation of the evaluator and our own reconstruction of its scoring.

We test the student two ways. On CPU physics with the perception-error model, many episodes are cheap. In the closed loop on rendered camera images, our simulator renders the four cameras and the student's real perception runs on them; this is the closest to the official setting we have, but slow and not deterministic. Both run every episode to 210 s and judge success on the final arrangement, as the official evaluation did. Every test covers the ten robustness cases.

VariantOperationsError model: successError model: progressRendered cameras: success
1-2 Transfer424 / 24100 %10 / 10
1-3 Transfer621 / 2499.0 %10 / 10
2-2 Cross transfer224 / 24100 %9 / 10
2-3 Cross transfer323 / 2499.3 %10 / 10
3-2 Vertical stacking224 / 24100 %10 / 10
3-3 Vertical stacking324 / 24100 %10 / 10
4-2 Push-down610 / 2486.1 %8 / 10, 5 / 10
4-3 Push-down90 / 2470.4 %0 / 10
5-2 Insertion115 / 2481.2 %8 / 10
5-3 Insertion218 / 2489.6 %2 / 10, 7 / 10

Student v1.3. Error model: 24 episodes per variant over two seeds. Rendered cameras: 10 episodes per variant per seed; two seeds where two numbers are given. Progress is our reconstruction of the operation-level progress rate.

A three-layer push-down that fails, from the same renders (nominal case, 2× speed). The pushes of the top two layers succeed, but blocks of the bottom layer come to rest on the debris of the upper layers, where the cameras lose track of them: the white boxes are their true poses, far from the student's estimates. Eight of the nine pushes count; the task needs all nine.

Did distillation work?

The fair comparison is teacher and student on the same rendered images, so that both depend on the same perception. For our first student (same skills and perception as the submission, an earlier high-level policy), on all ten variants with 8 nominal and 8 robustness-case episodes each, the student succeeded in 135 of 160 episodes and the teacher in 131. The student matches its teacher; what limits both is perception and contact on Tasks 4 and 5, not the decisions.

1-21-32-22-33-23-34-24-35-25-3Total
Student16161616161699129135
Teacher161516161615961210131

Successes out of 16 per variant (8 nominal, 8 robustness cases), both policies on block poses estimated from our rendered images. Episodes in this test ended at success.

9. Videos

Student v1.3 in the closed loop on our rendered images: the front camera (top left), the camera behind the left arm (top right) and the two wrist cameras, exactly the images the student receives, with its own estimates of the block poses drawn on top. One frame is shown per policy call, so arm motions that send 16 rows per call appear sped up.

Box colours: green blocks seen with full confidence, magenta the block of the current subtask (labelled with its name: source or destination tower, layer, position), cyan a block in the gripper, blue foundation blocks, yellow, orange and red lower confidence, not found in this call, or lost. A white box is the simulator's true pose, drawn only where the estimate is more than 2 mm off; the student never sees it.

Transfer. Task 1-3: six blocks, top layer first, the two arms alternating by layer.
Cross transfer. Task 2-3: the centre block of each layer, rebuilt as a cross on the other pad.
Vertical stacking. Task 3-3: single blocks stacked by the back arm, centres aligned.
Push-down. Task 4-3: every block pushed off the tower, top layer first, with closed fingers.
Insertion. Task 5-3: blocks inserted into the tower's centre slots, then pushed home.

All ten variants

4:47, silent. One nominal episode of every variant (the first successful one of two rendered), then two robustness cases, heavy blocks and changed lighting. Each starts with a card that gives its outcome and the simulated time at which it succeeded. Of the twenty nominal episodes we rendered, eighteen succeeded; the two that did not were one three-layer push-down (shown in the results above) and one three-layer insertion. Download the video (MP4, 17 MB). Chapters:

10. Next steps: student v1.5 and more learned components

The submitted student still plans every free-space arm motion: the transits between skills follow an inverse kinematics path with fixed timing. After the deadline we replaced them with learned reaching, which did not get an official evaluation because submissions had closed. We include it because it shows the point of the agentic structure: one planned component was swapped for a learned one without retraining the high-level policy or any other skill.

ComponentTeacherStudent v1.3 (submitted)Student v1.5 (after the deadline)
Block statesimulatorkeypoint network + fitkeypoint network + fit
What to do nexttask graphhigh-level policyhigh-level policy
Grasp, placePPOPPOPPO
PushPPOPPO, fine-tunedPPO, fine-tuned
Task 5 grasp, insert, push-inplannedbehaviour cloningbehaviour cloning
Moving between skillsplannedplannedPPO reacherexcept the short moves before a push and a push-in
Parking, arm controllerplannedplannedplanned

Learned and planned components across versions. Student v1.4 and v1.5 are the same system with learned reaching; v1.5 uses a later checkpoint of the back arm's reacher.

Learned reaching

The reacher follows our earlier work on joint-space reaching with reinforcement learning, JAiLeR (Kumar et al., 2021): a goal-conditioned PPO policy per arm that outputs joint velocities directly, without inverse kinematics. The goal is a pose for the gripper. During a transit it slides from waypoint to waypoint at a speed limit (0.05 m/s for the left arm and 0.15 m/s for the back arm when carrying a block), so the reacher always tracks a nearby moving goal. Training includes carrying blocks of random mass and friction with random grip offsets.

$$v=1.5\,\big(0.3\,a+0.7\,a\odot|a|\big)\ \text{rad/s},\qquad q_{\text{des}}\leftarrow q_{\text{des}}+0.1\,v,$$ $$d=\sum_{i=1}^{3}\big\|(g+\ell R_g e_i)-(p+\ell R_p e_i)\big\|,\qquad \ell=0.1\,\text{m},$$ $$\begin{aligned}r={}&e^{-20d^2}+e^{-(d/2\,\text{cm})^2}+e^{-(d/6\,\text{cm})^2}-2d+2\,r^{\text{hold}}+5\,\mathbf{1}[\text{settled}]\\ &-0.005\,\|\ddot q\|-0.1\,\|\Delta a^{\text{raw}}\|^2-0.5\sum_k\max\big(0,|a^{\text{raw}}_k|-1\big)-\dots\end{aligned}$$ $$r^{\text{hold}}=\exp\!\Big(-\big(e_p/4\,\text{mm}\big)^2-\big(e_r/2^\circ\big)^2-\big(\max_k|\dot q_k|/0.05\big)^2\Big).$$

\(d\) compares three points 10 cm along each axis of the goal frame \((g,R_g)\) and of the gripper frame \((p,R_p)\). The first term is JAiLeR's; the two wider Gaussians give gradient from far away, and \(r^{\text{hold}}\) rewards staying still on the goal. The remaining penalties keep the joints off their limits and the gripper off the table, and, when carrying, punish slip and drops. The action costs act on the raw network output, not the clipped command; otherwise PPO gets no gradient from them.

Training under the deployment's information pattern. The evaluator executes up to 16 rows per call, so the reacher must act for up to 1.6 s without a new measurement. A reacher trained with a fresh measurement every step failed under 16-row chunks: it carried blocks at about twice the goal's speed, dropped held blocks and fell into limit cycles. We retrained it with chunked observations: inside a chunk, the policy sees the joint prediction \(q_{\text{des}}-(q_{\text{des}}-q)_{\text{first row}}\) and the number of rows since the last measurement. That alone fixed it.

MeasurePlanned transitsLearned reaching
Arrival error on held-out transits, median (left / back)–1.1 mm, 0.62° / 0.9 mm, 0.35°
Held blocks dropped while carrying, seven robustness cases–0
Teacher episode length, examples: 1-2, 2-2, 3-381.9 s, 48.0 s, 56.5 s69.4 s, 34.6 s, 38.8 s
Policy calls spent on transits (variants it drives)100 %52–62 %
Teacher, all ten variants (successes of 160)141141
Student, rendered cameras, Tasks 1–3 (of 60)5959
Student, rendered cameras, Task 5 (5-2 of 10; 5-3 of 20)8; 98; 9

Arrival errors, drops, episode lengths and teacher results: CPU physics. Student rows: closed loop on rendered cameras, the same seeds for both. Learned reaching drives every transit except the short moves before a push or a push-in: there, contact skills were sensitive to the exact arm posture the transit left behind, and the learned arrivals cost Task 4 and 5 episodes. Student v1.4 and v1.5 differ only in the back arm's reacher checkpoint; in a paired comparison over 512 episodes they succeeded in 493 and 491 (no detectable difference).

The same Task 1-3 episode (same layout and seed) with planned transits (left, student v1.3) and learned reaching (right, student v1.5), front camera, one frame per policy call, 2× speed. Student v1.3 finishes at 127 s of simulated time in 362 policy calls; student v1.5 at 112 s in 320. One episode each; the rendered closed loop is not deterministic.

The reacher makes the plans faster and the arm motions closed-loop while keeping success where it was. It does not yet buy points, because the points are lost in pushing and insertion. The directions we see from here:

11. Reproducibility

The code is at github.com/VisakK/tower_rl. Its reproduce/ folder rebuilds student v1.3 from the public downloads in seven stages, one script each: data, teacher, perception, student, freezing the bundle, checks with the numbers to compare against, and serving it on the challenge protocol. It needs Isaac Sim 5.1 and Isaac Lab 2.3 and about 40 hours on one GPU. Trained weights are not in the repository. GPU training is not bit-exact, so a rebuild gives an equivalent policy rather than identical bytes.

References

  1. J. Schulman, F. Wolski, P. Dhariwal, A. Radford, O. Klimov. Proximal Policy Optimization Algorithms. arXiv:1707.06347, 2017.
  2. J. Schulman, P. Moritz, S. Levine, M. Jordan, P. Abbeel. High-Dimensional Continuous Control Using Generalized Advantage Estimation. ICLR, 2016.
  3. L. Pinto, M. Andrychowicz, P. Welinder, W. Zaremba, P. Abbeel. Asymmetric Actor Critic for Image-Based Robot Learning. RSS, 2018.
  4. S. Ross, G. Gordon, J. A. Bagnell. A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning. AISTATS, 2011.
  5. M. Laskey, J. Lee, R. Fox, A. Dragan, K. Goldberg. DART: Noise Injection for Robust Imitation Learning. CoRL, 2017.
  6. R. S. Sutton, D. Precup, S. Singh. Between MDPs and Semi-MDPs: A Framework for Temporal Abstraction in Reinforcement Learning. Artificial Intelligence, 1999.
  7. V. Kumar, D. Hoeller, B. Sundaralingam, J. Tremblay, S. Birchfield. Joint Space Control via Deep Reinforcement Learning. IROS, 2021. arXiv:2011.06332.
  8. X. Li, W. Wang, L. Wu, S. Chen, X. Hu, J. Li, J. Tang, J. Yang. Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection. NeurIPS, 2020.
  9. O. Ronneberger, P. Fischer, T. Brox. U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI, 2015.
  10. K. He, X. Zhang, S. Ren, J. Sun. Deep Residual Learning for Image Recognition. CVPR, 2016.
  11. A. Vaswani et al. Attention Is All You Need. NeurIPS, 2017.
  12. O. Vinyals, M. Fortunato, N. Jaitly. Pointer Networks. NeurIPS, 2015.
  13. N. Rudin, D. Hoeller, P. Reist, M. Hutter. Learning to Walk in Minutes Using Massively Parallel Deep Reinforcement Learning. CoRL, 2022.
  14. M. Mittal et al. Orbit: A Unified Simulation Framework for Interactive Robot Learning Environments. IEEE RA-L, 2023 (now Isaac Lab).
  15. TOWER Benchmark contributors. TOWER-SimData and TOWER-Assets. Hugging Face, 2026. CC BY 4.0.

BibTeX

@misc{kumar2026agentic,
  title        = {Plans from Demonstrations, Skills from Reinforcement
                  Learning: An Agentic Teacher and Student for
                  Long-Horizon Bimanual Tower Manipulation},
  author       = {Kumar, Visak},
  year         = {2026},
  month        = nov,
  howpublished = {Blog post},
  url          = {https://visakk.github.io/agentic-tower/}
}