← all tasks

arm-pickup-lag-v

Two-link arm · solved 12 of 13 agent attempts pass

The task. The arm task graded the way a control engineer verifies it: three component contracts (guidance with the dynamics made irrelevant, static accuracy under the unknown payload, the servo with the model known plus a torque pulse and the task's lag) must hold on the same seeds before the integrated system is graded.

more

On the reference designs every integration failure is explained by exactly one rig, and a slow payload estimate passes all three rigs and fails the system (the composition failure).

Gate. per-seed success is the `settles` rung of this benchmark's ladder ['safe', 'reaches', 'settles', 'tracks'] (`--success-mode settles`), not the evaluator's default flag; the task is solved when the success rate over the grader's held-out seeds is `>= 0.9`; the component contract(s) `guidance`, `hold`, `servo` are evaluated first on the same seeds and reported as `rig:<name>:<rung>`; each contract must also clear `>= 0.9` (`--require-rigs`)

Axes: plant:two_link_arm, scenario:lag_noise_v1, payload:unknown-pickup, actuator:lag20ms-delay10ms, gate:settles, v-model:three-rigs

Each video re-runs the attempt's final controller through the task's own evaluator on a public seed (never the grader's held-out ones). The table under each video is the official grade on the held-out seeds.

Best attemptOpus 5.5 (claude-code, 16 min) · lag_noise_v1

Graded on the held-out seeds: passes every gate on the grader's held-out seeds.

criteriongradedneeded
base:settles1.000≥ 0.900

How the agent got there: 16 min · 36 tool calls · 2 edit-tool edits · 19 runs of its own Python (tests, experiments, rewrites) · no tuner runs · official verifier 4× (success rates in order: 1.00, 1.00, 1.00, 1.00).

The agent's final message

The controller in `/app/work/controller.py` passes the graded rung (`settles`) and all three component contracts on every seed I tested: 60 seeds for the system and for each rig, including 40 that were never used for tuning. | Check | Seeds | Result | |---|---|---| | System `settles` (graded) | 0–19 (official evaluator) and 20–59 | 60/60, worst settle error 1.6 mm (tolerance 5 mm) | | Rig `guidance` | 0–59 | 60/60 | | Rig `hold` | 0–59 | 60/60, hold error about 0.6 mm (tolerance 3 mm) | | Rig `servo` | 0–59 | 60/60, worst settle error 1.7 mm | The final official run on seeds 0–4 with `--require-rigs` reports `solved=True` and passes every gated rung. **How it works:** - **Reference:** the controller rebuilds the minimum-jerk path from the segment start, the waypoint and the time in the segment. It converts it to joint position, velocity and acceleration targets on the elbow-up branch. - **Servo:** a computed-torque law with stiffness KP=225 and damping KD=28, applied through the full arm model so both joints respond at the same rate. Below about KP=150 the arm can't recover from the servo rig's torque pulse before the settle window; stiffer gains eat into the margin left by the 30 ms of lag and delay. - **Feedforward:** the model torque is computed 30 ms ahead on the reference to cover the delay and the actuator lag. - **Payload estimate:** each step, the controller reconstructs the torque that actually reached the joints and fits the leftover dynamics to the one unknown, …

Controller family: feedback linearization

Computed-torque control tracks an IK-mapped min-jerk reference with PD error feedback scaled by the inertia matrix, using an adaptive payload mass estimate and a lead-advanced feedforward term to compensate actuator delay and lag.

Shown: public seed 0 (lag_noise_v1); this episode passes the settles rung. This episode: max_end_error 0.000271, max_settle_error 0.000623, hold_error_max 0.000408, track_rms 0.00536, track_peak 0.0208, saturation_ratio 0, coupling_peak_max 7.22, payload_mass 0.871, limit_violation 0, total_reward -3.63.

controller.py · agent transcript · trial arm-pickup-lag-v__frHSJNJ

FailureGemini (cursor-cli (pre-clock), 42 min) · lag_noise_v1

Graded on the held-out seeds: misses the main gate narrowly (success rate between 0.5 and the gate).

criteriongradedneeded
base:settles0.875≥ 0.900

How the agent got there: 42 min · 192 tool calls · 19 edit-tool edits · 110 runs of its own Python (tests, experiments, rewrites) · no tuner runs · official verifier 6× (success rates in order: 0.00, 0.00, 1.00, ?, 1.00, 1.00).

Pre-clock session: the agent had no clock and may have stopped early believing its hour was over; treat a failure here as a lower bound.

The agent's final message

The controller implementation is finalized and verified in `/app/work/controller.py`. ### Task Summary - **Objective**: Control a planar two-link vertical manipulator under unknown end-effector payload ($0.3\text{--}1.0\text{ kg}$), first-order torque lag ($20\text{ ms}$), $10\text{ ms}$ discrete delay, and sensor noise. - **Verification Results**: - `guidance` rig: **100% (5/5)** passing contract `tracks` - `hold` rig: **100% (5/5)** passing contract `holds` (hold error $\le 2.1\text{ mm} \le 3.0\text{ mm}$) - `servo` rig: **100% (5/5)** passing contract `settles` (settle error $\le 3.5\text{ mm} \le 5.0\text{ mm}$) - `lag_noise_v1` (base): **100% (5/5)** passing `settles` (average settle error $1.81\text{ mm}$, zero torque limit violations or saturation) - **Final Status**: All temporary test files have been cleaned up and the deliverable is self-contained in `/app/work/controller.py`.

Controller family: feedback linearization

Adaptive computed-torque controller that tracks a min-jerk Cartesian reference through inverse kinematics, using filtered state estimates, a short lead-time feedforward, and an online payload mass estimate in the mass matrix and gravity terms, with PD feedback on the joint error and clipped torques.

Shown: public seed 14 (lag_noise_v1); this episode fails the settles rung. This episode: max_end_error 0.00414, max_settle_error 0.00662, hold_error_max 0.00462, track_rms 0.0304, track_peak 0.113, saturation_ratio 0, coupling_peak_max 9.57, payload_mass 0.822, limit_violation 0, total_reward -3.76. It was the first failing one of 15 public seeds tried.

controller.py · trial arm-pickup-lag-v__wFbyjV9