Doctoral Research · Space Robotics Inspection with a Free-Flying Space Manipulator
A Doctoral Research Journal Aerospace Engineering

CHAIN_13 L3 — pointing-axis retune (probe + full-helix A/B)

Criteria: tasks/chain13_l3_criteria.md. Metrics = run_mission.analyze. r0 @ rs0.40, suppress off. OFF = the rs-0.40 incumbent (r0_reach040.npz), axis defaults time_scale 0.2 / rate_max 0.25. Adoption = user’s call. Knobs --axis_ts / --axis_rate (LOAD-time overrides, default-OFF byte-identical; canary-verified to land on goal.axis.alpha / goal.axis.rate_max).

Stage 1 — time_scale probe (200 s): WEAK, gate not met

The first hypothesis (broadband ze = aim-axis low-pass lag → lower time_scale) barely moved the metric and worsened pe. Apples-to-apples are the cap-200 arms (the OFF ref row is the cap-1800 helix).

axis_ts ze_p99 nu_jump_p99 pe_p99
0.2 (OFF, 200s) 0.0530 0.0588 0.1670
0.1 0.0526 0.0589 0.1684
0.05 0.0523 0.0590 0.1693
0.02 0.0521 0.0592 0.1698

ze_p99 −1.7% across a 10× knob swing, pe_p99 worse +1.7%. Gate (“ze↓ AND pe not worse”) FAILS. Finding: the broadband pointing error is not a low-pass-lag artifact (steady lag ≈ τ·ω; if speeding the filter 10× barely moves ze, ω is slow enough that filter lag was never the dominant source).

Slew-cap diagnostic (triggers the reserved rate_max knob)

On l3_ts002.npz: aim-axis per-step slew median 0.0056, p99 = 0.0075 = the cap exactly, 5.7% of steps pinned at the cap (cap = rate_max·dt = 0.25·0.03). So the ze_p99 tail is rate-limited, not filter-limited — time_scale can’t touch the binding steps. Per the criteria’s reserved-knob rule, rate_max comes into scope.

Stage 2 — rate_max probe (200 s): rate_max 1.0 is PARETO-DOMINANT

time_scale held at 0.2 (OFF); only the slew cap varied.

rate_max ze_p99 nu_jump_p99 pe_p99
0.25 (OFF) 0.0530 0.0588 0.1670
0.5 0.0509 0.0588 0.1640
1.0 0.0311 (−41%) 0.0423 (−28%) 0.1235 (−26%)
2.0 0.0429 0.0559 0.1208

rate_max 1.0 improves all three at once (ze, smoothness, position) — not a trade. 2.0 over-shoots the knee (ze/nu_jump tick back up). Gate PASSES decisively at 200 s.

Mechanism: the 0.25 cap was over-constraining — binding 5.7% of steps forced the desired pointing axis to lag the target on fast-slew moments; the controller then chased a persistently-behind reference, injecting error into ze, pe AND nu (the EE twist works harder to catch up). Loosening to ~1.0 lets the reference track faithfully → the whole tracking problem eases. Classic over-damping: a smoothing limit so tight it manufactured the roughness it was meant to prevent (Chiaverini’s “hard limits make their own transients”, study §3.4, on the output-smoothing side).

Stage 3 — full-helix A/B: VERDICT = NO-ADOPT (the 200 s probe was inverted)

Full helix (cap 1800, rs 0.40, suppress off). OFF = r0_reach040.

arm ze_p99 pe_p99 nu_jump coverage t_complete derate sj_med
OFF rm0.25 nom 0.0495 0.1586 0.0576 0.9978 762.6 0.637 0.0229
OFF rm0.25 −2% 0.0492 0.1581 0.0576 0.9969 775.9 0.619
OFF rm0.25 +2% 0.0495 0.1586 0.0577 0.9976 753.5 0.685
ON rm1.0 nom 0.0398 0.1185 0.0406 1.0000 904.8 0.971 0.0187
ON rm1.0 −2% 0.0394 0.1193 0.0402 0.9999 921.4 0.972
ON rm1.0 +2% 0.0402 0.1179 0.0409 0.9999 892.5 0.975
ON rm1.5 nom 0.0398 0.1160 0.0401 1.0000 918.8 0.984 0.0187

Tracking improves ~20–29% and holds under ±2% — but it’s a CRAWL CONFOUND. derate jumps 0.637→0.971, t_complete +19% (762.6→904.8 s), and sj_med (median conditioning) drops 0.0229→0.0187 — the arm genuinely sits nearer the singular wall. pe_med improves 15% while the mission slows 19%: the tracking gain is commensurate with the slowdown (slower vehicle settles better per pose). The sj_med drop is the independent tell — it is NOT a speed artifact; conditioning actually worsened.

Mechanism: the aim-axis slew cap is an implicit singularity guard. Capping aim-axis slew kept the arm out of extension; loosening it (rate_max 1.0) let the arm chase aggressive re-aims into near-singular postures → derate throttles → vehicle crawls → tracking looks better. For a singularity chain this is backwards: it trades the core objective (conditioning margin) for confounded tracking.

Provenance (honest): by the LETTER of the pre-registered bars (ze↓, pe≤0.1586, cov≥0.99, completed, nu_jump≤OFF) rate_max 1.0 PASSES — because the bars guarded tracking but NOT derate/completion. That is an incomplete-criteria lesson, recorded as such; NOT back-fitted to reject. Both the letter-pass and the unregistered derate/completion regression are reported; adoption is the user’s call.

Recommendation: DO NOT ADOPT rate_max 1.0 (or 1.5 — same trade, slightly worse derate 0.984). The slew cap stays at 0.25. Two morning follow-ups if the user wants them: (1) adversarially confirm the crawl confound by a matched-completion-time comparison; (2) if better pointing is wanted without the conditioning cost, the lever is elsewhere (controller pointing authority, not output smoothing) — which echoes the Stage-1 finding that broadband ze is not a smoothing artifact.