orbitalgym.belief.sync & orbitalgym.belief.contact_aware¶
Intra-team belief fusion + contact-aware belief wrapper.
Contact-aware belief¶
orbitalgym.belief.contact_aware.ContactAwareBelief ¶
Wraps an existing Belief with a per-agent contact mask.
The wrapped belief is stored as a pytree node so jax.lax.scan threads
it transparently. .mean is a property delegating to the inner belief
(so agent_view.mean stays the canonical access pattern).
Fusion protocol¶
orbitalgym.belief.sync.BeliefSyncFn ¶
Bases: Protocol
Pool teammate beliefs about the opposing side during contact.
belief is the side's existing belief pytree. contact is a
per-teammate bool mask: contact[i] is True iff teammate i is in a
contact window this tick. Returns a same-shape belief.
Concrete fusions¶
orbitalgym.belief.sync.KFTeamFusion
dataclass
¶
Information-form pooling for KFBelief / EKFBelief.
For each opposing target k, observers in contact share information state (P^-1 mu, P^-1); the pooled posterior overwrites every in-contact observer's (mu_i, P_i) for that k. Out-of-contact observers untouched.
Optimal under independent observations. For known-correlated cases (e.g. all teammates pulling from the same operator estimate), use covariance intersection instead (added under a separate registry key).
Same-pair (i == k) observer-on-self entries are excluded from fusion -- those slots reflect own-truth and shouldn't be pooled.
orbitalgym.belief.sync.EKFTeamFusion
dataclass
¶
Bases: KFTeamFusion
Information-form pooling for EKFBelief -- same algorithm as KFTeamFusion.
Distinct class so the registry has a stable name for serialization. The fusion math is identical: KFBelief and EKFBelief both expose the (N_obs, N_total, d) mean and (N_obs, N_total, d, d) cov layout.
orbitalgym.belief.sync.PFTeamFusion
dataclass
¶
Joint-resample fusion for ParticleFilterBelief.
For each opposing target k, gather particles from every in-contact observer (excluding self-pairs), build a combined cloud weighted by each observer's normalized weights, and systematic-resample to K particles per in-contact observer.
Out-of-contact observers untouched.