orbital-formation-bc

A tiny decentralized formation-flight policy — 1,474 parameters — distilled by behavior cloning from a distributed potential-field controller. Each satellite runs its own copy on local observations only (its slot error and its three nearest neighbours), holds a rotating formation, and reconfigures it collision-free — as a plain forward pass in a browser tab, on the device.

Institute for Physical AI @ BMI · The Charlot Lab · Technical Report TR-2026-17

What it is

Multi-agent coordination — a constellation that holds its shape with no ground controller — is a distributed control problem: each agent decides from what it can sense locally. This policy is that decision, learned and made runnable on any device, open: one per-agent MLP small enough to ship as JSON and evaluate with a for-loop, run independently by every satellite in the formation.

  • Task: hold an assigned slot in a rotating formation and reconfigure between patterns (ring / train / aperture / wedge) without colliding.
  • Input (10): [slot_err_x, slot_err_y, vel_err_x, vel_err_y, n1_dx, n1_dy, n2_dx, n2_dy, n3_dx, n3_dy] — the agent's error to its slot, its velocity relative to the (moving) slot, and the relative positions of its three nearest neighbours. All local; no agent sees the whole formation.
  • Output (2): [a_x, a_y] — commanded thrust acceleration.
  • Arch: 10 → 32 → 32 → 2, ReLU, with input/output normalization. 1,474 parameters.

Training

  • Expert: the distributed controller in orbital-logistics/core (formationStep) — a PD toward the assigned slot, the slot's own velocity fed forward so the rotation tracks without lag, plus a pairwise potential-field avoidance from neighbours in a sensing radius. Slot assignment is a greedy nearest-free seed followed by 2-opt untangling (the minimum sum-of-squared-distance matching is provably non-crossing), which removes the crossing transfers that are the dominant collision risk.
  • Data: ~210k (local obs → thrust) pairs from 60 expert reconfiguration rollouts across 8–14 agents and every pattern order (policy/gen_formation_data.mjs). Near-miss states (a neighbour inside the sensing radius) are upweighted 20× so the policy learns the rare avoidance reflex, not just the keeping.
  • Objective: behavior cloning, MSE on the thrust, Adam, 60 epochs (policy/train_formation.mjs).
  • Closed-loop validation: every agent flown by the net through a full ring→grid→wedge→line reconfiguration, under a light reflexive safety filter.

Benchmark (Formation-Bench, 30 seeds, 12 agents)

Controller success mean RMS worst min-sep mean Δv/agent
Distributed (analytic) 100% 0.09 m 12.11 m 303 m/s
Learned (this policy) 100% 0.15 m 13.05 m 302 m/s

The learned policy matches the analytic controller's keeping and Δv and reconfigures collision-free with a 12–13 m margin. Reproducible with node bench/formation_bench.mjs.

Use

Everything the runtime needs is in formation_policy.json (W1,b1,W2,b2,W3,b3, the xm/xsd/ym/ysd normalization, and K=3 neighbours). A forward pass is ~20 lines of JavaScript, run once per agent per step:

const P = await (await fetch('formation_policy.json')).json();
const mv = (W,a)=>W[0].map((_,j)=>a.reduce((s,ai,i)=>s+ai*W[i][j],0)), relu=z=>z.map(v=>v>0?v:0);
function policy(obs){ // obs = [ex,ey, vex,vey, n1dx,n1dy, n2dx,n2dy, n3dx,n3dy]
  const x = obs.map((v,j)=>(v-P.xm[j])/P.xsd[j]);
  const a1 = relu(mv(P.W1,x).map((v,j)=>v+P.b1[j]));
  const a2 = relu(mv(P.W2,a1).map((v,j)=>v+P.b2[j]));
  return mv(P.W3,a2).map((v,j)=>v+P.b3[j]).map((v,j)=>v*P.ysd[j]+P.ym[j]); // [ax, ay]
}

Honest scope

This is a research demonstrator, not flight software. The dynamics are a double-integrator at a local scale; the slot assignment (the non-crossing matching) is the safety-critical step and is computed outside the net; and the policy is run under a light reflexive safety filter, because behavior cloning reproduces the coordination and keeping but not the expert's anticipatory long-range avoidance. It exists to show that a decentralized multi-agent coordinator can run, open and on-device, one small net per agent.

MIT licensed. Institute for Physical AI @ BMI · The Charlot Lab.

Downloads last month
-
Video Preview
loading