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

Why the neutral config is singular, and why no length or counterweight escapes it — the determinant factorization

Date: Jun 18, 2026 (EDT). Question: the Pinocchio neutral configuration (all joints 0) sits at log s_min_G ≈ −11 to −13 — essentially singular. Past attempts to escape by geometry (lengthening links, counterweighting the base) did nothing, and it was never clear why. This document answers it from the determinant of the arm Jacobian, which is the one quantity that factors the cause apart — and settles a committed design claim that turned out to be false.

regen: python3 validation/singularity_geometry.py (symbolic DH + cpin, prints the factorization, the elbow law, and the corrected LEADS). Pinned by validation/test_singularity_geometry.py (4 PASS). CoM-cancellation study: 7-agent proof workflow (3 independent rebuilds + 3 adversarial skeptics + synthesis), verdict recorded in logs/logs_Jun18_26/CLAIMS.md ~17:40.

Verdict up front. 1. Neutral is singular because the determinant has a pure-angle factor sin θ₃ that vanishes at θ₃ = 0 (the elbow is straight). No link length or mass appears in that factor, so nothing geometric can move its zero. 2. The legacy claim “lengthening links helps the bare arm but the circumcentroidal CoM shift cancels it” is BROKEN. Lengthening does raise σ_min(Γ), nearly in lockstep with the bare arm (~×5). The CoM coupling is a bounded ~26 % multiplicative haircut, not a cancellation. 3. The real reason past lengthening failed is a fixed-standoff elbow over-fold plus an operating posture that parks the elbow near θ₃ ≈ 0 — a reach-margin/posture problem, the same lever the speed-derate over-extension finding and the singularity-root-cause analysis both point to.


1. The determinant factorizes — and that is the whole argument

The 6R arm Jacobian determinant, link lengths numeric (scaled UR3 ×1.18), angles symbolic, taken straight from the MJCF and cpin-verified to 2 × 10⁻¹⁶ against Pinocchio:

\[ \det \boldsymbol{J} = \underbrace{0.02080}_{\text{one constant}}\cdot \underbrace{\big[\cos\theta_2 + 0.8752\cos(\theta_2{+}\theta_3) + 0.2969\sin(\theta_2{+}\theta_3{+}\theta_4)\big]}_{\text{reach / shoulder}}\cdot \underbrace{\sin\theta_3}_{\text{elbow}}\cdot\underbrace{\sin\theta_5}_{\text{wrist}} \]

(exact constant 4160043662391023/200000000000000000). A product is zero iff one factor is zero, so the determinant separates the variables into three independent singularity families:

factor family depends on
sin θ₃ ELBOW (hit at neutral) θ₃ only — no length, no mass
sin θ₅ WRIST θ₅ only — no length, no mass
cos θ₂ + (A₃/A₂)cos(θ₂+θ₃) + (D₅/A₂)sin(θ₂+θ₃+θ₄) SHOULDER / REACH link lengths, as coefficients

The normalized reach coefficients (1, 0.8752, 0.2969) are exactly the link-length ratios (1, A₃/A₂, D₅/A₂) — lengths live only in the reach factor, and there only as coefficients, never as roots (test_reach_bracket_coeffs_are_the_link_lengths).


2. Why neutral is at log s_min ≈ −12

pin.neutral is all-zeros, so θ₃ = 0 → sin θ₃ = 0 → det J = 0 — the classic elbow singularity (arm straight). The cpin elbow sweep shows σ_min is linear in that factor:

\[ \sigma_{\min}(\text{bare arm } \boldsymbol{J}) \;\approx\; 0.107\,\lvert\sin\theta_3\rvert \]

(constant ratio across the sweep). At θ₃ = 0 that is exactly 0, so log s_min_G → −∞ (the observed −11/−13 is the numerical floor of “zero”). The CoM coupling in Γ does not rescue it (test_pinocchio_neutral_is_near_singular: s_min_G < 10⁻⁴ at neutral). The random walk that initializes q0 works only because it moves the joint angle θ₃ off 0 — the single variable that moves the dominant zero. To clear the derate floor σ_min ≥ 0.025 needs |sin θ₃| ≳ 0.025/0.107 ≈ 0.23, i.e. |θ₃| ≳ 13–14° off straight.


Both fixes operated on factors that are not the one that is zero. That is structural, not bad luck.


4. The CoM-cancellation claim is BROKEN (the subtler, away-from-neutral question)

§3 proves length-independence at neutral. The legacy script (singularity_geometry.py, formerly the legacy/symbolic_math.py LEAD) asserted a stronger, dynamic claim: that even at a fixed standoff — where a longer arm genuinely should bend the elbow more and raise σ_min — the circumcentroidal CoM shift cancels the gain, so σ_min(Γ) stays flat. That would have meant “lengthening can never help.” We tested it decisively.

Method (rule fixed in advance: σ_arm rises AND σ_Γ flat ⇒ CONFIRMED; both rise ⇒ BROKEN). Two independent mass-consistent rebuilds of the free-flyer + UR3, byte-identical to the live GiordanoRobot at α = 1 (σ_J+ = 0.0268, σ_Γ = 0.0262), scaled the arm link lengths by α with link masses scaled consistently, held the EE pose fixed by IK, and measured σ_min of the bare arm J, J⁺, and full Γ. Cleanest leg — elbow bend held identical (|sin θ₃| = 0.343) to isolate pure length scaling:

α |sin θ₃| σ_arm σ_Γ Γ/arm
1.00 0.343 0.0294 0.0219 0.747
1.18 0.343 0.0353 0.0260 0.739
1.40 0.343 0.0424 0.0309 0.729
1.70 0.343 0.0520 0.0373 0.717
2.00 0.343 0.0616 0.0435 0.706

σ_arm rises ×2.10, σ_Γ rises ×1.98 in lockstep; Γ/arm holds a near-constant ~0.74. Verdict: BROKEN — the CoM coupling is a bounded ~26 % haircut, not a cancellation. Robust across 3 standoffs × 2 mass laws (Γ/arm stays in 0.55–0.75); all three adversarial skeptics (mass-scaling, standoff-choice, mechanism) returned refuted=false.

Why it cannot cancel (pencil-and-paper). J⁺ = J_νe − R_eb0·Jv_bar with R_eb0 = [R_eb; 0] (6×3), so the CoM correction touches only the 3 translation rows. Its magnitude ‖Jv_bar‖ saturates at a geometric ceiling (~12 % of ‖J_arm‖ ≈ 2.0): the arm-mass fraction m_arm/m_total ≤ 1, and the CoM lever grows at the same linear rate as the bare-arm columns, so the ratio is bounded. A bounded, rank-3, partially-misaligned subtraction cannot annihilate a multiplicative ~5× gain — it can only shave a near-constant fraction. Hence σ_min(Γ) ≥ ~0.53·σ_min(arm J) for every admissible mass law, and lengthening always nets a σ_min(Γ) increase.


5. The true cause of the historical failure

So why did lengthening feel useless? Two real effects, neither of them a CoM cancellation:

  1. Fixed-standoff elbow over-fold. At a fixed Cartesian standoff, a longer arm must fold the elbow further to keep the same reach. |sin θ₃| rises, peaks near α ≈ 1.3, then falls as the elbow folds past 90°. Beyond the peak, lengthening lowers σ_min — the benefit is non-monotone and easy to miss if you only tried large links.
  2. Operating posture. In closed loop at the adopted standoff, the controller parks the elbow near θ₃ ≈ 0, where |sin θ₃| is tiny regardless of link length. With the elbow pinned near the zero, no amount of lengthening helps, because the posture, not the geometry, sets the operating point.

Both are reach-margin / posture effects. This converges with two other threads: the speed-derate failure was over-extension (the arm driven toward full reach), and the singularity-root-cause analysis identified the near-singular regime as the arm at full extension. Three independent lines now indict posture/reach-margin.


6. The levers the math actually licenses


Provenance / cross-references