# Ideal rigid MacPherson strut: derivation and verification

Study identity: `vehiclelab.macpherson.rack-tie-rod`, version `1.0.0`.
Coordinates are SI, +X forward, +Y vehicle left, +Z up. All entered
hardpoints are in the axle frame (origin at design axle midpoint height).

## Joint topology and mobility

The rigid lower arm rotates about its two chassis pivots. Its spherical
ball joint B locates the rigid carrier. The strut housing and its axis a
are fixed to that carrier. A rod telescopes in the housing; its upper end
has an ideal spherical chassis joint T, allowing inclination and rotation.
This deliberately idealizes rubber mounts and bushings. It is consistent
with the spherical/prismatic topology described in
[the spatial kinematics literature](https://www.sciencedirect.com/science/article/pii/S0094114X16300969).
This source motivates the idealization, not numerical vehicle correlation.

The reduced configuration has one arm angle theta and an SO(3) carrier
rotation R: four independent tangent coordinates. Translation is B(theta).
Let s, w, o be design carrier vectors from B to the lower strut bracket,
wheel centre and steering-arm outer joint. Let a0 be the design strut axis
and u0,v0 a fixed orthonormal transverse pair. Rotate all these with R.

Constraints, each in metres:

1. (R u0) dot (T - S) = 0
2. (R v0) dot (T - S) = 0
3. W_z - W_design_z - j = 0
4. |O - I(rho)| - L_tie = 0

S = B + R s, W = B + R w, O = B + R o. I is the common linear
rack path. The strut length l = (R a0) dot (T - S) is an output,
not a fixed link. Positive l retains the entered assembly pole.
Without tie closure, specified j leaves one free steering coordinate.
With specified j and rho, full rank four gives a unique local pose.
The mount-to-ball line is a steering-axis reference; fixed-j rack motion
can include arm motion, so it is not advertised as the exact instantaneous
wheel axis under that input constraint.

## Analytical tangent Jacobian

Use world angular increments omega, composed as exp([omega]x) R; these
are tangent coordinates, not Euler angles or additive rotation vectors.
dB/dtheta = h cross (B - P), with chassis hinge unit vector h.
For transverse t=R u0 or R v0 the Jacobian row is
[-t dot B_theta, (t cross (T - B))^T]. Carrier offsets cancel because
their scalar projection in the rotating transverse frame is constant.
Wheel-height row: [B_theta_z, ((R w) cross e_z)^T].
Tie row: [n dot B_theta, ((R o) cross n)^T], n=(O-I)/|O-I|.
F_j=[0,0,-1,0], F_rho=[0,0,0,-n dot rackAxis].
Solve J q_input = -F_input using pivoted elimination. Point derivatives
are B_theta theta_input + omega_input cross (R pointOffset).
Strut-length derivative is a dot (T_input-S_input) +
(omega_input cross a) dot (T-S). Heading comes from the actual spindle:
atan2(-spindle_x*sideSign, spindle_y*sideSign). Differentiate atan2
analytically. Toe-in is -left heading / +right heading, matching PR #49.

Coaxial upper/lower spring seats and damper endpoints have separately
entered constant offsets along the strut. Their lengths are l minus
their respective offset sums. This installation implies equal incremental
motion ratios even with different installed lengths. Compression is
design length minus current length; signed MR = d(compression)/dj.
At fixed rack, virtual work Q_j = F_compression * MR. No Full-Car
force mapping or hydraulic behavior is added.

## Independent spatial reduction

The reference does not import production equations, Jacobian, rotations,
Newton method, continuation or heading calculation. For a trial arm angle,
construct B geometrically on its hinge circle. Put r=S_design-B_design.
The carrier vector c=r+l*a0 must rotate to T-B. Length invariance gives
l=sqrt(|T-B|^2-|r_perp|^2)-r dot a0 (positive assembly pole).
An independently constructed orthonormal-frame mapping sends c to T-B.
The remaining carrier rotation is about T-B. The outer joint traces a
circle. Its intersection with the inner-joint sphere determines the two
possible steering roots; select the root continuously associated with
the design configuration. Wheel-height closure then uses a scalar root
in the lower-arm angle. Planar closed-form fixtures, spatial skew hinges,
reflection tests and perturbation convergence qualify this reduction.

## Numerical limits and physical boundary

Production residual tolerance is 1e-11 m. One-sided Jacobi SVD checks
raw and column-normalized rank, rejecting a ratio below 1e-4 and marking
below 1e-2 near singular. Derivatives are unavailable at rank loss.
Heading projection is normalized by spindle-vector length, so changing the
reference distance along the same axis cannot change its validity. A normalized
projection below 1e-4 rejects heading; below 0.2 warns of sensitivity near a
vertical spindle. This is a heading-chart diagnostic, distinct from matrix rank.
It is checked throughout continuation. Additional ±140 mm / ±30 mm input pairs
qualify regular behavior near the numerical study boundaries.
Deterministic continuation starts from design on every uncached query,
with <=1 mm input steps and <=0.15 rad tangent steps. The accepted
assembly retains its determinant sign, positive strut pole and bounded
rotation neighborhood. Failure of Newton is numerical nonconvergence,
not proof of geometric impossibility. Input study bounds are numerical
limits, not measured hardware stroke limits. This rigid kinematics study
is separate from Project Save/Open and all passive 7-DOF equations.
