parameters — master run-spec config

Purpose

Single-file run specification for the nominal GRO inspection mission: simulation timing,
constraints, controller gains, the derate/conditioning stack, guidance, camera targeting, and
the uncertainty risk master switch. Every adopted knob from CHAIN_3 through CHAIN_13 lives here.
The why for each line (adoption/rejection verdicts, byte-identity contracts) is in
YAMLs_by_domain/INSIGHTS.md; this file stays terse (a key keeps only its unit/label).

Conventions (file-wide)

  • MKS units; angles in degrees. Keys use enable (not enabled) and suffix _max (not max_).
  • Reserved Greek names — do not reuse as generic config: tau = control input, delta = consecutive
    time-series change, alpha = interpolation factor, omega = angular velocity. (INSIGHTS.md [convention])

Structure (top-level blocks)

  • simulation — duration/dt, EPS, target (GRO), robot (UR3 | UR3_7, named in assets.yaml).
  • constraints — CoM / base / arm caps (theoretical, not hardware) + arm joint_limits.enforce.
  • controllercom / base / arm sub-loops: gains, integral, startup, derate, conditioning, FF.
  • config_sampling — the startup q0 sampler (deterministic seed OR random search); NOT the runtime derate.
  • guidance — CoM orbit + tracking gains; base attitude (omega_body_frame).
  • camera_guidancetargeting (reach, reselect, camera FOV/depth, scoring weights) + trajectory (orbit-synced path).
  • uncertainty — risk-phase master switch + three noise channels (all 0.0 by default).

Key knobs/sections

key pathwhat it controlsdefault/examplenote
simulation.time.durationmission length (s)1100CHAIN_5: GRO orbit completes ~1064.5 s
simulation.robotrobot block in assets.yamlUR3UR3_7 = 7-DOF S-R-S variant
constraints.arm.joint_limits.enforceclip arm joints to engineered envelope each steptrueCHAIN_5; breaks elbow singularity lock-in. pan exempt (winding)
controller.base.gains.K / .Dbase attitude stiffness/damping (SHARED base+EE breve)2.0 / 2.0built into a matrix at load (see Footguns)
controller.base.conditioning.enablethe live singularity-derate gatetruedrives the single γ ramp (base_guidance.py)
controller.base.conditioning.sigmaγ ramp {low,high,floor} on s_min_G0.005 / 0.025 / 0.25re-fit to this robot’s distribution (median ~0.032)
controller.base.derate.gainscale base K/D by γ in RHS34bfalseOFF = BYTE-IDENTICAL (only arm block γ-scaled)
controller.base.coupling_full_dampingLever G: un-derated damping in CoM-coupling FFfalsefalse = BYTE-IDENTICAL
controller.arm.gainsEE position/orientation K/D/Ipos K [2,2,4], ori K 1.0built matrix at load
controller.arm.integral.enableEE pose-error integralfalseconfirmed OFF: can’t null a velocity lag
controller.arm.desired_twist.enable / .v_maxEE velocity feedforward (ESSENTIAL) + captrue / 0.9OFF = +287% p_e; cap bites at speed 0.90
controller.arm.desired_twist.velocity_ffL1: -C(v-v_des) exact zero-lag equilibriumfalseinert on real mission (CHAIN_13); BYTE-IDENTICAL
controller.arm.desired_twist.analytic_ffclosed-form vs FD desired twist (its_tex §3.4)falseOFF = BYTE-IDENTICAL; real win w/ bounded tradeoff
controller.arm.derate.gain / .speedγ scales arm K/D (gain) vs EE twist nu_e (speed)true / falseendorsed = gain; speed collapses cruise-lag floor
controller.arm.null_space.enable / .freeze_floor7-DOF v_n=0 fiber + kernel freezefalse / 0.025no-op for 6-DOF; floor mirrors scoreboard 0.025
controller.arm.q0_epsdeterministic plant q0 perturbation [rad]0.00.0 = BYTE-IDENTICAL; chaos-vs-ill-conditioning probe
config_sampling.deterministic.enable / .target_sigmaRNG-free off-neutral q0 seedtrue / 0.05ADOPTED Jun18; `sigma_min ≈ 0.107·
guidance.com.tracking.desired_speedorbit traversal speed (m/s)0.90TASK_6 knee; ~2.6× faster than 0.35
guidance.base.omega_body_framedesired ω in body frame log(R⁻ᵀR⁺)trueB3 fix ADOPTED Jun19; z_b RMS −92%
camera_guidance.targeting.startup.timeINITIAL-aim window (s)90.0TASK_10: 15 s regressed coverage to 0.78
camera_guidance.targeting.scoring.modeexponential = prod(score_k**w_k)exponentialTASK_7; weights now live exponents
camera_guidance.targeting.scoring.sampling.radius_scalestandoff = rs · r_reach0.40CHAIN_13 re-pin (p_e_p99 optimum); rs 0.30 noise-fragile
camera_guidance.trajectory.orbit_path.modepose (path drives camera) vs anchorposeCHAIN_12 retired the reactive flow
camera_guidance.trajectory.orbit_path.progress_syncaim clock from ACHIEVED orbit progresstrueCHAIN_3 pivot that unlocked coverage
uncertainty.enablerisk-phase master switchfalsefalse = strict BYTE-IDENTICAL (no RNG, no new keys)

For the exhaustive leaf list, read YAMLs_by_domain/parameters.yaml itself; the rationale per key is in YAMLs_by_domain/INSIGHTS.md.

Who reads it

  • parameter_loader — loads into a RecursiveNamespace, derives all computed quantities at load
    (finalize_parameters, build_controller_gains, camera_radius), exposes the rederive_* escapes.
  • pre_run_loader — merges with default_run_specs.yaml, applies ordered config overrides, and
    re-derives via the three snapshot-trap guards (gain / dt / camera prefixes). Resolves the
    metric_catalog and scoreboard specs from the sibling metrics.yaml / scoreboard.yaml.
  • sampling / robot — consume config_sampling (startup q0 seed, damped-inverse floors).
  • breve_controller / base_guidance — consume the controller/derate blocks at runtime.
  • uncertainty_model — gated by uncertainty.enable; injects the three noise channels.
  • logger / data_analyzer — config scalars are NOT logged; derived quantities are rebuilt
    from cfg at analysis time, so the run-spec YAML is the durable record of a run’s knobs.

Footguns

The snapshot trap — derived quantities bake at LOAD, before any override

parameter_loader.finalize_parameters() bakes all derived quantities at load time, BEFORE any
pre_run_loader override runs. A post-load raw-input override leaves derived quantities SILENTLY STALE:

  • Gains are snapshotted into controller.gains (matrix form); a post-load controller.base.gains.K = x
    is inert against the stale controller.gains.base.K matrix — call build_controller_gains().
  • dt (simulation.time.dt) feeds EE-goal alphas / startup steps / CoM blend — a dt/2 sweep steers by
    default-dt references without rederive_dt_dependent(cfg) (a convergence-test confound).
  • camera_radius = radius_scale · r_reach — an rs sweep ran silently at the default 0.40 instead of
    0.35 before the guard; call rederive_camera_radius(cfg). (utils/INSIGHTS.md [footgun]; analysis/INSIGHTS.md snapshot-trap)

Two blocks named "conditioning" — disjoint consumers

config_sampling is the startup q0 sampler (robot.sampling / robot.damped_inverse); it was renamed
FROM a top-level conditioning block because it name-collided with the runtime derate block
controller.base.conditioning (editing one silently moved the other). The latter is the live derate gate.
(YAMLs_by_domain/USER_README.md; utils/INSIGHTS.md [history])

Legacy/dormant flags that look live but are inert

controller.com.speed_derating.enable is INERT — the live derate gate is controller.base.conditioning.enable.
camera_guidance.trajectory.goal.quintic (G1 v3 shelved; quintic_pose.py purged 2026-06-25) and
...orbit_path.detours (CHAIN_3 CANCELLED; detour_planner.py purged 2026-06-25) are dormant remnants —
the YAML flags now have no backing code at all. aim_floor_rate /
aim_lead_max are falsified-but-retained levers. (YAMLs_by_domain/INSIGHTS.md [history])

Metrics vs scoreboard live next door, with a shared floor

The catalog (metrics.yaml, what is measured) and the judgment layer (scoreboard.yaml, how it is judged)
are SEPARATE concerns parsed by separate loaders. The 0.025 floor appears in three places —
controller.arm.null_space.freeze_floor, the scoreboard s_min_J threshold, and the derate_fraction
metric — and must be kept in sync when the controller floor is tuned. (analysis/INSIGHTS.md [config])

BYTE-IDENTICAL contracts you must preserve

Several flags are pinned OFF as strict no-ops (uncertainty.enable, *.derate.gain, coupling_full_damping,
q0_eps=0.0, velocity_ff, analytic_ff, detours.enable). Flipping any of these re-pins the five baselines

  • gold standard; uncertainty.enable=false in particular guarantees no RNG construction-order effects.
    anchor_length = 0.50058 has unknown provenance — treat as a legacy constant until re-derived.

parameter_loader · pre_run_loader · metric_catalog · sampling · robot ·
breve_controller · base_guidance · uncertainty_model · logger · data_analyzer · terminology