Skip to content

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

KFTeamFusion()

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

EKFTeamFusion()

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

PFTeamFusion()

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.