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

Design spec — orbit-synced geometric waypoint + analytic EE feedforward (world/relative A/B)

Date: 2026-06-08. Status: approved design (conversational brainstorm), pre-implementation. Goal: drive p_e p99 toward 0.15 by killing the EE velocity-LAG at its root. (Not git-committed — no repo.)

Problem (established, TASK_12 + user)

p_e is a velocity lag in the RELATIVE-motion feedforward, not the orbit. The CC controller treats v_c (COM/orbit velocity) as a DISTURBANCE it rejects – orbit motion is not a reference driver. The laggy quantity is self.nu_e.local.des (the desired EE twist in the local/relative frame), currently desired_nu_e_feedforward_consistent finite-diffing the FILTERED desired pose. Finite-diff of the filtered pose lags; of the raw pose is jerky (reselect steps). Pointing-target smoothing (TASK_11 blend, TASK_13 glide) improves z_e but does NOT touch this lag (and slightly worsens p_e). The fix is to feed nu_e.local.des an analytic, smooth twist (world or relative – A/B) from a planned reference.

Design (3 parts)

1. Geometric orbit-synced surface path surface_target(s) (precompute)

For orbit progress s (the COM helix is a known smooth function of s), project the COM orbit position p_c(s) onto the target mesh – ray-cast inward (toward the body) / nearest-surface – to get the surface patch “under” the platform at phase s. Precompute over the orbit samples, then smooth / resample to a C1 function s -> x_surf(s) (the raw projection can jump across facets/concavities; smoothing removes that). This is feasible BY CONSTRUCTION: x_surf(s) is reachable/visible from the orbit at phase s (that’s how it was generated), so following it never demands an unreachable point (unlike center-pointing). Coverage is guaranteed as s sweeps pole-to-pole.

2. Follow it with an ANALYTIC feedforward (the core) – TEST TWO FF ROUTES

Online, s(t) = t * desired_speed (arclength), so the commanded pointing target is x_surf(s(t)), smooth; the desired EE pose p_e_des(s) points at it from the standoff. The analytic, smooth world EE velocity is v_world = d(p_e_des)/ds * sdot (no finite-diff -> NO LAG, NO JERK – the jerk fix). v1 tests BOTH routes on the full helix (config flag; per the breve math both are derivable from the same smooth path): - Route A – analytic tracking FF (nu_e.local.des): replace the lagged finite-diff with nu_e.local.des = R_te.T @ v_world, then through the existing nu_e_local_to_oplus(.., v_c, ω_b) conversion (which ALREADY folds v_c in -> consistent with eq 22b; do NOT pre-subtract v_c or it double-counts). Smooth, un-lagged desired EE twist. - Route B – C_c v_c disturbance feedforward (into w_e^⊕): per eq (22b), v_c enters the attitude+EE block ONLY as the known forcing term C_c v_c. Feed +C_c v_c (analytic, from the smooth orbit reference) directly into the EE torque/RHS to cancel the disturbance at the source, rather than via tracking. (C_c is available in self.motion/self.dyn; the RHS already has a COM_coupling term – check whether it already includes this or needs the explicit FF.) Routes A and B are independent and composable; v1 measures each alone + together. finite-diff stays as the fallback when no path is active. (RELATIVE-mode pre-subtraction deferred – math says it double-counts; revisit only if A+B underperform.)

3. Reactive correction (DEFERRED to v2 – v1 is pure geometric path + FF to isolate the lag/jerk fix)

The geometric path is the smooth backbone; the scorer corrects it toward high-value/unseen surface. Concretely: x_cmd = (1-w)*x_surf(s) + w*x_scorer, w a small config weight (e.g. 0.2) so the command stays smooth while biasing toward the scorer’s pick; x_scorer is the existing finder’s chosen surface point, clamped to a neighborhood of x_surf to preserve reachability + smoothness. The analytic FF still derives from x_surf(s) (the smooth backbone), so the correction does not re-introduce jerk. Scorer/reselect demotes from “primary driver” to “corrector” – consistent with TASK_5/7 (selection is not the coverage lever; the orbit is). w=0 -> pure geometric path; sweep w.

Interfaces / ownership

Pose construction, clamps, mesh (v1 specifics, user-directed)

Validation (full helix ONLY – 200s gate misled twice this round)

Risks / unknowns (this is research, not a tune)

Out of scope

Controller gain/structure changes (TASK_12 showed they destabilize); pointing-only smoothing (failed 3x). This is purely the reference + feedforward.