Instructions to use physicalai-bmi/orbital-capture-bc with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use physicalai-bmi/orbital-capture-bc with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://physicalai-bmi/orbital-capture-bc") - Notebooks
- Google Colab
- Kaggle
orbital-capture-bc
A tiny on-orbit capture policy — 1,282 parameters — distilled by behavior cloning from a Model Predictive Path Integral (MPPI) expert. It flies the approach of a chaser to a tumbling, non-cooperative target and runs 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
- Live, in-browser: physicalai-bmi.org/research/charlot-lab/space-logistics → the on-orbit capture instrument, "Learned" mode.
- Code + physics core: github.com/dcharlot-physicalai-bmi/orbital-logistics (
policy/).
What it is
The 2026 frontier of autonomous rendezvous and proximity operations is learned control (e.g. NRL's APIARY, the first RL free-flyer control in space; transformer meta-RL; tube-MPC). Those run in the datacenter or on flight hardware. This policy makes the same idea runnable on any device, open: an MLP small enough to ship as JSON and evaluate with a for-loop.
- Task: given the chaser's relative state to the target in the approach-corridor frame, output the control that flies a safe berth.
- Input
[along, lat, v_along, v_lat]— position and velocity in the corridor frame (metres, m/s). - Output
[a_along, a_lat]— commanded acceleration (m/s²). - Arch:
4 → 32 → 32 → 2, ReLU, with input/output normalization. 1,282 parameters.
Training
- Expert: the MPPI controller in
orbital-logistics/core— it samples control sequences, rolls them out on the Clohessy–Wiltshire relative-motion dynamics, and takes the cost-weighted average (reach + soft-berth + corridor + effort). - Data: ~28k
(state → control)pairs from 240 expert capture rollouts (policy/gen_bc_data.mjs). - Objective: behavior cloning, MSE on the control, Adam, 60 epochs (
policy/train_bc.mjs). - Closed-loop validation: the learned policy captures 60/60 held-out starts in the expert's dynamics.
Use
Everything the runtime needs is in bc_policy.json (W1,b1,W2,b2,W3,b3, and the xm/xsd/ym/ysd normalization). A forward pass is ~20 lines of JavaScript (see the live instrument's policyFwd). No framework, no GPU required.
const P = await (await fetch('bc_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(s){
const x = s.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]);
}
Honest scope
This is a research demonstrator, not flight software. The dynamics are the linearised CW model at a local scale; the expert's control is scaled to the sim's real-time pace; and the policy flies the approach to a capture box, where a capture effector closes the last metre (as real servicing does). It reports no flight result. It exists to show that the learned-control frontier can run, open and on-device, in a browser.
MIT licensed. Institute for Physical AI @ BMI · The Charlot Lab.
- Downloads last month
- -