# PID tuning results

pidtuna's four-rung tuning ladder (factory → analytic → tuned → oracle) on nine simulated robots, as one dashboard:
how close the tuned gains get to the oracle per robot, gains against the error they buy, the error per rung, every
joint and motor, and the one real check (the sim plant against the rack's servos).

- **App:** BAM rig
- **Replaces:** pidtuna.com's per-robot result tables and the rack tuner's printed summaries
  (`bam_pid_tunning/docs/build_report.py`); the MuJoCo replays stay on pidtuna.com
  (`~/pidtuna-website/site`) and the design rationale in `~/bam_ws/reports/pid-tuner-design-rationale-2026-10-26.html`.
- **Shows:** three datasets, two linked (`gains.robot_id → robots.robot_id`) and one deliberately not (the rack's
  fidelity data, which the robots' rail leaves alone); KPI cards whose delta is against a property of the same row
  (`compare.against: oracle_tracking_rms`); a log-log gain-vs-error scatter whose click selects a robot; bars of the
  median error per rung whose click selects a rung; a per-joint table and a robot × rung pivot as tabs; a sim-vs-real
  scatter with a y = x guide.
- **Data:** `gains.json` (132 joint × rung rows), `robots.json` (9) from pidtuna-website's exported
  `site/public/data/*.json` at 1414ae6: **simulated, illustrative parameters** (commit 63c33ba), scores drawn as
  estimates; `fidelity.json` (10 rows) from bam_ws `bam_pid_tunning/docs/sim_fidelity.json` (branch
  `claude/pid-auto-tuner-stack-e956da`, d572a55f): **real** rack measurements. Written by `source/build.py`, read-only.
  No overshoot or settling time exists in either source.
