arm-pickup-lag-v
Two-link arm · solved 12 of 13 agent attempts pass
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.
lag_noise_v1| criterion | graded | needed |
|---|---|---|
| base:settles | 1.000 | ≥ 0.900 |
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, …
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
lag_noise_v1| criterion | graded | needed |
|---|---|---|
| base:settles | 0.875 | ≥ 0.900 |
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`.
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