Space-to-Space RSO Targets

Independent spacecraft targets for space-to-space imaging.

Unlike RSOPoints, these targets are whole spacecraft, not surface points on one nearby RSO. Catalog states are Earth-centered J2000, in meters and meters per second, at the catalog’s optional utc_init or the environment’s realized epoch when no catalog epoch is specified.

class RSOTarget(id: str, satellite_name: str, rN: tuple[float, float, float], vN: tuple[float, float, float], priority: float = 1.0, sigma_init: tuple[float, float, float] = (0.0, 0.0, 0.0), omega_init: tuple[float, float, float] = (0.0, 0.0, 0.0), wheel_speeds_rpm: tuple[float, float, float] = (0.0, 0.0, 0.0), disturbance_torque_Nm: tuple[float, float, float] = (0.0, 0.0, 0.0), physical_parameters: tuple[tuple[str, float], ...] = ())[source]

Bases: object

Immutable definition of one independently orbiting imaging target.

IDs are nonempty strings; they have no relationship to simulator indices. satellite_name is name, the environment’s agent identifier. It is distinct from the Basilisk spacecraft model’s name and binds exactly one explicitly supplied satellite, rather than a group. Physical parameters are optional (sat_args key, scalar value) pairs.

Parameters:
  • id (str)

  • satellite_name (str)

  • rN (tuple[float, float, float])

  • vN (tuple[float, float, float])

  • priority (float)

  • sigma_init (tuple[float, float, float])

  • omega_init (tuple[float, float, float])

  • wheel_speeds_rpm (tuple[float, float, float])

  • disturbance_torque_Nm (tuple[float, float, float])

  • physical_parameters (tuple[tuple[str, float], ...])

id: str
satellite_name: str
rN: tuple[float, float, float]
vN: tuple[float, float, float]
priority: float = 1.0
sigma_init: tuple[float, float, float] = (0.0, 0.0, 0.0)
omega_init: tuple[float, float, float] = (0.0, 0.0, 0.0)
wheel_speeds_rpm: tuple[float, float, float] = (0.0, 0.0, 0.0)
disturbance_torque_Nm: tuple[float, float, float] = (0.0, 0.0, 0.0)
physical_parameters: tuple[tuple[str, float], ...] = ()
sat_args() → dict[str, Any][source]

Return deterministic target dynamics arguments for this epoch.

Return type:

dict[str, Any]

class RSOTargetCatalog(targets: tuple[RSOTarget, ...], utc_init: str | None = None, priority_events: tuple[RSOPriorityEvent, ...] = ())[source]

Bases: object

Replayable target definitions, ordering, optional epoch, and priority events.

If utc_init is omitted, target states refer to the environment’s realized epoch on each reset. After reset, catalog contains that explicit epoch and can be saved for replay. An explicitly supplied catalog epoch must match the environment; states are never silently retimed.

Parameters:
targets: tuple[RSOTarget, ...]
utc_init: str | None = None
priority_events: tuple[RSOPriorityEvent, ...] = ()
to_dict() → dict[str, Any][source]

Return a versioned, JSON-compatible mission target definition.

Return type:

dict[str, Any]

save(path: str | Path) → None[source]

Save target definitions and their optional epoch without rounding.

Save env.scenario.catalog after reset to include the realized epoch when the original definition omitted it.

Parameters:

path (str | Path)

Return type:

None

classmethod from_dict(values: dict[str, Any]) → RSOTargetCatalog[source]

Validate and load the supported schema and units.

Parameters:

values (dict[str, Any])

Return type:

RSOTargetCatalog

classmethod load(path: str | Path) → RSOTargetCatalog[source]

Load a saved catalog without resampling any target.

Parameters:

path (str | Path)

Return type:

RSOTargetCatalog

class RSOPriorityEvent(time_s: float, priorities: tuple[tuple[str, float], ...])[source]

Bases: object

Priority changes applied at the first decision boundary at/after time_s.

Changes occur after the preceding step’s reward and before its observation. Events at zero occur before the initial observation. They do not clear pending images or cooldowns. Pairs are (target ID, new priority).

Parameters:
  • time_s (float)

  • priorities (tuple[tuple[str, float], ...])

time_s: float
priorities: tuple[tuple[str, float], ...]
class RSOTargets(catalog: RSOTargetCatalog, imager_names: list[str])[source]

Bases: Scenario

Select participants by explicit identity, independently of list order.

Parameters:
property catalog: RSOTargetCatalog

Configured catalog before reset, or the epoch-resolved episode snapshot.

The input definition remains immutable. Save this property after reset to retain the realized epoch without pinning subsequent episode resets.

validate_satellite_names(satellites) → None[source]

Reject ambiguous/missing original names before the environment renames.

Return type:

None

Bind only the copied participants used by the actual environment.

Return type:

None

reset_overwrite_previous() → None[source]

Drop runtime bindings, centralized eligibility, and event history.

Return type:

None

reset_pre_sim_init() → None[source]

Bind this episode’s objects and override only catalog target conditions.

Return type:

None

static partition_name(target_id: str) → str[source]

Bounded simulator-safe partition name, independent of array position.

Parameters:

target_id (str)

Return type:

str

reset_during_sim_init() → None[source]

Register each target separately in each imager’s access model.

Return type:

None

is_eligible(target_id: str, time_s: float) → bool[source]

Centralized pending visibility and quality-verified shared cooldown.

Parameters:
  • target_id (str)

  • time_s (float)

Return type:

bool

after_step(sim_time: float) → None[source]

Apply due priority events after reward, before the next observation.

Parameters:

sim_time (float)

Return type:

None