Off-world Power Generation Lab 5: Robotic self-assembly

From Bitpost wiki

2025-02 MIT has done interesting work.

Defensive Publication: Autonomous In-Space Self-Assembly of Modular Structures

Publication date: 2026-06-20. Author: Mike (Off-world Power Generation project).

Notice and purpose. This section is a defensive publication: it is published to place the methods and systems described below into the public domain as prior art, dated as of the publication date above. The intent is to keep this design space open — anyone may build on it — and to prevent third parties from obtaining patents that would block the project or the public from practicing these techniques. The disclosure below is deliberately enabling: it provides sufficient algorithmic and parametric detail that a person of ordinary skill in robotics, control, and distributed systems could reproduce the described behavior. A working reference implementation exists in the project's simulation and control codebase (planar closed-loop simulator + flight-portable autonomy modules, numpy only); the descriptions here are drawn from that implementation. The material is offered freely for any use; no patent rights are asserted.

1. Field and overview

The field is autonomous in-space assembly: a fleet of identical, self-propelled robotic modules that locate one another, maneuver, dock, and self-assemble a larger structure — the long-term application being self-assembling solar arrays in which each new module locates the existing array and extends it both mechanically and electrically. The deployment target of interest is Sun–Earth L2.

Two distinct domains are disclosed and deliberately kept separate:

  • a planar (3-DOF) ground analogue — modules float on a near-frictionless air-bearing surface (a leveled float-glass plane) and rehearse relative navigation, docking, and growth logic; and
  • the flight target (L2), which shares the same autonomy/growth logic but a different sensor suite.

The transferable invention is the autonomy and coordination logic, which is written to depend only on a relative-pose input and an abstract actuation output (a "pose-in → setpoint-out" guidance seam, plus a "set actuators" seam). Disturbance models (table tilt, air-bearing, propellant) and sensor specifics are injected outside this core, so the same logic runs unchanged in the ground analogue and in flight. Scope note: the ground analogue reproduces planar kinematics + docking + growth, not orbital relative dynamics (Clohessy–Wiltshire); "drive straight at the target" is correct on the table and wrong in orbit.

The following mechanisms are disclosed in enabling detail in Sections 2–7.

2. Decelerate-to-rest guidance with handoff to passive genderless magnetic soft-capture

Problem. A free-flying module closing on a docking port should arrive with near-zero residual velocity (no overshoot, no last-moment braking) while minimizing propellant, and should tolerate residual sensor error at contact.

Disclosed method. The docking guidance is a state machine (SEARCH → STANDOFF → APPROACH → CAPTURE → DOCKED, with ABORT) that, instead of feeding the tracking controller a stepped goal and letting closing velocity emerge from controller gains, rate-limits its own commanded setpoint ("carrot") at a velocity taken from a constant-deceleration braking curve, so the commanded setpoint arrives at the mated pose with zero commanded velocity.

Each control tick, with the commanded carrot at planar position cmd and the mated pose at the origin of the port's dock frame, the closing speed is:

  dist  = hypot(cmd_x, cmd_y)                         # remaining distance of the carrot
  speed = min(approach_speed, sqrt(2 * decel * dist)) # cruise, then brake
  speed = max(min_speed, speed)                        # floor (avoid asymptotic crawl)
  cmd  := move cmd toward goal by at most speed*dt     # rate-limited carrot

The term sqrt(2 * decel * dist) is the inverse of the constant-deceleration stopping-distance relation: it is the maximum speed from which the module can brake to rest over the remaining distance at deceleration decel. Taking the minimum with a cruise speed yields a cruise-then-brake profile — flat at cruise when far, then riding the square-root curve to zero exactly at the dock. Crucially, dist is measured on the commanded carrot, not the measured pose, so the closing velocity is bounded and intentional rather than an emergent gain artifact.

Lead cap (carrot leash). After ramping, the vector from the measured pose to the commanded carrot is clamped to a maximum length lead_m. This leashes the rate-limited carrot to the body, bounding the position error the tracking controller ever sees (and hence the force it ever commands) even if the controller falls behind. Yaw is slewed independently at a bounded angular rate with angle wrapping.

Handoff to passive magnetic capture. precapture_m is a phase gate, not a stop point: the guidance never holds there; on crossing it the state advances to CAPTURE and the guidance keeps creeping toward the mated pose with the same zero-terminal- velocity profile while genderless permanent magnets (e.g. ≥2 spread N42 magnets per face) pull the final ~1–2 cm and self-center, absorbing residual sensor error within a capture envelope (e.g. ±20 mm, ±0.10 rad). Capture is declared either by an external latch sensor or by remaining inside the capture envelope continuously for a dwell time. A key disclosed finding: terminal precision is owned by the magnets, not the controller — the soft-capture pulls the true body onto the mated pose regardless of where the estimate believed it was, so sensor-estimate noise (when bounded) costs propellant and time, not docking accuracy.

Recovery. A supervisory layer running above the phase switch tracks continuous tag/measurement loss against a timeout and an overall mission timeout, with a retry budget: on loss it retreats and re-acquires (back to SEARCH); on exceeding retries it ABORTs. Drifting out of the approach corridor or out of alignment kicks the machine back to STANDOFF to re-align before re-approaching.

Disclosed parameters (example values). standoff 0.25 m; precapture 0.08 m; capture envelope 0.02 m / 0.05 rad; corridor 0.05 m; cruise 0.030 m/s; decel 0.0025 m/s²; speed floor 0.0010 m/s; align rate 0.15 rad/s; lead cap 0.02 m; capture dwell 1.0 s; loss timeout 1.0 s; max retries 3. approach_speed and decel are the explicit time-versus-propellant trade knobs (total braking impulse ≈ m·Δv is invariant to how hard one brakes; only the instantaneous flow rate trades).

3. Distributed slot mutual-exclusion with clock-free arbitration and mid-flight motion replanning

Problem. Many newcomers concurrently selecting attachment slots on a growing structure must not collide on the same slot, without a shared clock and over a lossy, latent radio, and the resolution must extend to physical re-routing of modules already in flight.

Disclosed method. Each module runs a per-module view of slot ownership and resolves contention with a clock-free, listen-before-commit two-phase protocol with deterministic lowest-identifier arbitration:

  claim(slot):
    if owner(slot) is a peer:            return False          # already owned
    if slot not yet pending:                                   # PHASE 1: announce intent
        pending[slot] := now; broadcast ("claim", slot, my_id); return False
    if now - pending[slot] < confirm_window:  return False     # still listening
    delete pending[slot]; owner(slot) := my_id                 # PHASE 2: commit
    broadcast ("commit", slot, my_id); return True

On receiving a peer message, ownership is resolved by identifier (lowest id wins), which is a deterministic total order requiring no synchronized clock:

  on ("claim", slot, sid):  if sid < my_id and I am pending  -> drop my pending (back off)
  on ("commit", slot, sid): if sid < my_id                   -> owner(slot) := sid
                              if I already held slot          -> mark slot LOST (preempted)

Mid-flight preemption → motion replanning (the distinctive coupling). Ownership is resolved at message-receive time, before the holder has physically seated. If a lower-id peer commits to a slot a higher-id module is already flying toward, the higher-id module's slot is marked LOST; the growth controller observes this and re-selects a different free face and physically re-routes to it. Distributed mutual exclusion is thereby closed-loop coupled to the physical reconfiguration of moving robots.

Loss tolerance by ownership heartbeat. Each module periodically re-broadcasts the slots it owns but has not yet physically seated, so a peer that dropped the original commit still learns the ownership and yields before both fly to the same slot. (Without this re-announce, packet loss lets two modules seat on one slot; with it, high loss is tolerated.)

Disclosed finding. Across radio profiles from ~2 ms (compact mesh) through 75 ms (BLE-class) to 300 ms latency with 40% packet loss, correctness is preserved: below the confirm window the handshake serializes the race; above it, preemption recovers it; loss is tolerated only because of the heartbeat. The only latency that matters is relative to the docking timescale (seconds here), which is 1.5–2 orders of magnitude slower than any of these radios — so radio technology choice is irrelevant to correctness and may be chosen on power/fleet-size grounds alone.

4. Self-assembly growth logic: reachability-aware face selection and deadlock avoidance

Problem. A newcomer must choose which free face of the growing structure to extend, such that the chosen slot is not merely empty but actually reachable, and such that concurrent newcomers neither deadlock nor are wrongly declared stuck.

Disclosed structure model. The structure is a set of occupied grid cells with 4-connectivity (generalizable to 3D ports) plus a separate set of claimed (reserved) slots. A single seed-frame docking guidance (Section 2) is reused for any face via a world↔dock-frame transform: a face has a world origin (the newcomer's docked center) and an outward unit normal; lateral is the 90° rotation of the normal; "+x out from the structure" holds for every face, and yaw passes through.

Two-cells-out approach-lane reachability filter. A face (cell, dir) is offered only if its immediate outward slot is empty and the cell two steps out along the same direction is also empty — i.e. even an empty slot is rejected as not approachable if the cell beyond it is occupied (the fly-in lane is blocked). Faces are de-duplicated by slot so two adjacent cells do not both offer the same empty slot.

Boxed-in vs all-claimed distinction. The free-face query takes an include_claimed flag. The default ("are there open faces not already claimed by a peer?") drives normal selection; querying with reservations ignored ("are there any geometrically open faces at all?") distinguishes three outcomes in the SELECT state:

  • policy returns no face AND no faces exist even ignoring claims → FAILED (geometrically boxed in — terminal);
  • policy returns no face but open faces exist that are claimed by peers in flight → WAIT (hold and retry; a peer's abort frees a claim, or its integration exposes new faces);
  • policy returns a face but the atomic claim() loses the race this tick → re-select next tick.

Deadlock-avoiding deferral. A face-selection policy that prefers faces reachable without crossing the structure (by the sign of the outward dot product) will, when no cleanly reachable face exists but peers are mid-dock, deliberately return "wait" so the array can grow toward incoming modules — rather than route a module the long way around or deadlock. Only when nothing is in flight does it fall back to taking a non-clean face.

Workspace-bounded face policy. For a bounded workspace (e.g. the finite table), a face is additionally rejected if its docking standoff point (origin + standoff·normal) falls outside the workspace margins, since the side-on approach would be physically unreachable. An emergent consequence: on a narrow workspace the array grows along the long axis because short-axis side faces are rejected.

Lifecycle. SELECT (claim) → DOCKING (delegate to Section 2 guidance in the face's dock frame) → INTEGRATED (on capture, the reserved slot becomes an occupied cell, exposing new faces). On dock abort the claim is released back to the pool and the controller REPLANs to a different face. The guidance is kept running through integration so there is no setpoint jump after capture — the gentle decelerate-to-rest creep continues to the mated pose, preserving the no-overshoot property end to end.

5. Cooperative occupancy belief by monotonic union, with self-localized pose beacons

Problem. A module's own sensors are range-limited and occluded; it may be unable to see the growing frontier it must attach to, and unable to see peers it must avoid.

Disclosed method. Each module's occupancy belief is the set union of (a) its own sticky sensor detections and (b) "occupied" announcements gossiped by peers over the lossy radio. Because an assembly is monotonic (cells are only ever added, never removed), set-union is provably sound: a unioned belief can be stale-low (missing a just-added cell) but never wrong-high in a way that corrupts arbitration, because the authoritative claim() always re-validates against shared ownership and fails safely (forcing a replan) on a stale belief. The selection/read path runs on the local belief; the claim/arbitration/integrate path delegates to the shared authoritative state.

Self-localized pose beacons for mutual non-observability. A module in flight broadcasts its own self-estimated pose as a low-rate beacon. Peers use these beacons to avoid it when their cameras cannot see it (cached, used only when not directly sensed and not stale). Collision avoidance is thereby driven by own camera for near peers ∪ gossiped pose beacons for the rest, with no god's-eye knowledge.

Disclosed finding. When self-sensing range is shorter than the growth radius, a purely self-sensing module deadlocks (cannot perceive the frontier); adding gossip heals the coverage gap and the assembly completes even over a 75 ms / 40%-loss link. A physical seating-exclusivity backstop (one module per slot; a collision re-routes) guarantees one module per cell even when the claim layer alone, under loss and noise, would let a few modules double-target.

6. Degraded relative navigation: split-sensor fix, geometry gating, and shared-radio co-degradation

Problem. At L2, one-directional sunlight (black shadowed faces, blown-out sunlit faces) makes passive optical fiducials unreliable for relative navigation. A robust relative-pose channel is needed under degraded sensing.

Disclosed method (flight). The relative-navigation fix is split across heterogeneous sensors:

  • Attitude from a star tracker — an absolute, near-free, always-available attitude reference, decoupled from inter-module relative sensing and immune to one-directional lighting; the shared inertial attitude frame is propagated by gossip.
  • Position from RF inter-module ranging + multilateration over partner links.

Geometry (GDOP) gating of the position fix. From the unit bearings to in-range ranging partners, form matrix H (rows = unit bearings); the position fix covariance is range_noise² · (HᵀH)⁻¹ (the standard dilution-of-precision form), and the position standard deviation is the trace-root of that covariance. The fix is rejected when the geometry is too poor (DOP above a cap) or there are too few links; accepted fixes are drawn with the correct correlated (anisotropic) covariance (e.g. via Cholesky factorization), so a cluster of partners all in one bearing produces a genuinely lateral-starved error rather than a fictitious isotropic one. Disclosed consequence: fixed ranging anchors should be spread widely around the workspace; the far approach (all partners clustered ahead) is the geometry-starved regime.

Multi-boresight sun keep-out. A single star tracker is blinded when the Sun is within a keep-out angle of its boresight. The disclosed mitigation, which falls directly out of the model: carry ≥2 star trackers with opposed boresights; attitude is available unless every boresight is simultaneously within the keep-out cone of the Sun, which two opposed boresights make impossible. (Coarser absolute-attitude fallbacks: IMU + magnetometer; a collimated-source + quad-cell sun sensor.)

Shared-radio co-degradation (the distinctive systems insight). The RF ranging links and the claim/gossip coordination messages share one physical radio. Therefore a single dropped packet simultaneously thins the multilateration (raising position DOP) and the claim reconciliation (raising double-claim races) — a poor link hurts twice, coupling navigation quality and coordination quality through one channel. The disclosed system is designed and shown to still converge under this co-degradation (e.g. heavy loss raises position DOP and claim churn yet all modules still assemble, the seating-exclusivity backstop guaranteeing distinct slots). The levers, in priority order, are: (1) deterministic slot assignment (removing contention entirely), (2) better self-localization (multi-link / multi-fiducial fusion to sharpen the position fix), then (3) lower link loss.

Lab analogue (for validating the architecture on the ground). Reproduce the property, not the hardware: an overhead fixed fiducial constellation ("artificial sky") + an upward camera as an absolute, lighting-immune, decoupled attitude reference (used for attitude only, so the lab honestly mirrors "attitude solved, position is the noisy channel"); UWB ranging radios + fixed UWB anchors as the position/multilateration channel; LED beacons for close-range; and the existing Wi-Fi/BLE radio as the gossip backbone.

7. Supporting mechanisms (disclosed for completeness)

  • Decoupled eight-thruster wrench allocation. Two tangential thrusters at each of four side-midpoints; each commanded translation/rotation maps to a subset producing a pure wrench with no cross-coupling, via a fixed 3×8 allocation matrix. (Example grouping: +X→T5,T7; −X→T6,T8; +Y→T1,T3; −Y→T2,T4; +Mz→T1,T4,T6,T7; −Mz→T2,T3,T5,T8.)
  • PID-on-body-frame-pose-error station-keeping with stuck-gated anti-windup: the integral accumulates only when the module is ~stationary and outside the deadband (i.e. genuinely stuck on a steady offset such as residual gravity-tilt or umbilical stiction), is clamped, and is reset on measurement loss — nulling steady offsets without winding up during fast moves. A control deadband near the magnet capture envelope avoids actuator limit-cycling on sub-centimeter sensor noise.
  • Multi-fiducial relative-pose fusion (lab sensor). When several mapped fiducials are visible, fuse all of them — arithmetic mean of position, circular mean of angle (atan2 of mean-sin, mean-cos) — reducing fix noise by ≈1/√N. This is the lab realization of the general principle (multi-fiducial fusion → multi-ranging-link multilateration) that carries to flight.
  • Lab-sensor vs flight-sensor boundary. The autonomy consumes a relative pose behind a single accessor; only the sensor producing that pose swaps between the lab (passive fiducials) and flight (star tracker + RF ranging + active optical). The ground testbed validates the autonomy and the fusion logic, not the flight sensors themselves.

8. Reduction to practice and disclosed results

The methods above are reduced to practice in a numpy-only closed-loop planar simulator driving the real control/allocation path, plus the flight-portable autonomy modules, plus sensing/comms disturbance models. Disclosed representative results:

  • Two-module and multi-module assembly converge to mated tolerance with the decelerate-to-rest profile + magnetic capture; terminal seated error is governed by the magnet envelope (~sub-millimeter) independent of bounded estimate noise.
  • A beyond-the-lab free-space thought experiment assembles 100 of 100 modules around a single known anchor using the same scale-free growth logic, under realistic onboard self-localization (no god's-eye) and a lossy radio, with self-pose error inside the magnet capture envelope.
  • Propellant for braking from cruise is set by module mass and Δv (light modules → grams each) and is invariant to brake hardness (only instantaneous flow trades); coordination/contention and self-localization noise, not radio choice, dominate the maneuvering overhead.

9. Summary of what is placed in the public domain

The following combinations are expressly disclosed as prior art as of the publication date:

  1. Guidance that rate-limits its own commanded setpoint on a constant-deceleration (cruise-then-brake) curve computed on the commanded carrot, leashed to the measured pose by a lead cap, terminating in a handoff to passive genderless magnetic soft-capture confirmed by envelope-dwell or latch.
  2. Clock-free, listen-before-commit slot mutual-exclusion with lowest-identifier arbitration and ownership heartbeat, closed-loop coupled to mid-flight preemption and physical motion replanning of free-flying modules.
  3. Reachability-aware self-assembly growth: two-cells-out approach-lane filtering, the boxed-in vs all-claimed-vs-claim-lost distinction, deadlock-avoiding deferral toward in-flight peers, workspace-bounded face selection, and reuse of one seed-frame docking guidance for arbitrary faces via a dock-frame transform with no post-capture setpoint jump.
  4. Cooperative occupancy belief by monotonic-add set union of self-sensing and gossip (provably sound under add-only assembly with authoritative claim re-validation), plus self-localized pose beacons for mutual non-observability.
  5. Degraded relative navigation by split-sensor fix (star-tracker attitude + RF-ranging multilateration), live GDOP/min-link gating with correlated-covariance fixes, multi-boresight sun keep-out, and tolerance of shared-radio co-degradation in which one lossy channel thins both ranging geometry and claim coordination.

These are offered freely for any use.