Skip to main content

Stations

Module: se3labs.interface.eval.station

Station specs (hardware capability) and the station-level observation / action containers.

A station is a named collection of arms and cameras. Observations and actions are keyed by those names so that a bimanual and a single-arm station share one container type.

The policy side of the contract is policy.Policy: it consumes Station_Observation ticks and produces Station_ActionChunks. Anything about how the policy runs (its rate, chunk length, replanning, image preprocessing) is decided inside the policy, not declared to the SDK.

Station_BaseSpec​

class Station_BaseSpec(Enum)

Station_BaseSpec.Static​

Static = 'static'

Static manipulation base (the arm is mounted on a fixed, non-mobile base).

Station_Spec​

class Station_Spec(ABC)

Station_Spec.base​

base: Station_BaseSpec

Station_Spec.arms​

arms: dict[str, arm_types.MotorizedArmSpec]

Read-only property.

Arm name -> spec. Names are the keys of Station_Observation.arms and Station_ActionChunk.arms.

Station_Spec.cameras​

cameras: dict[str, camera.Camera_DeviceSpec]

Read-only property.

Camera name -> spec. Names are the keys of Station_Observation.cameras.

Bimanual_Station_Spec​

Bimanual_Station_Spec(
base: Station_BaseSpec,
arm: arm_types.MotorizedArmSpec,
wrist_camera: camera.Camera_DeviceSpec,
topdown_camera: camera.Camera_DeviceSpec,
)

Bimanual_Station_Spec.base​

base: Station_BaseSpec

Bimanual_Station_Spec.arm​

arm: arm_types.MotorizedArmSpec

Spec shared by the left and right arms.

Bimanual_Station_Spec.wrist_camera​

wrist_camera: camera.Camera_DeviceSpec

Spec shared by the wrist_left and wrist_right cameras.

Bimanual_Station_Spec.topdown_camera​

topdown_camera: camera.Camera_DeviceSpec

Bimanual_Station_Spec.arms​

arms: dict[str, arm_types.MotorizedArmSpec]

Read-only property.

Bimanual_Station_Spec.cameras​

cameras: dict[str, camera.Camera_DeviceSpec]

Read-only property.

Single_Arm_Station_Spec​

Single_Arm_Station_Spec(
base: Station_BaseSpec,
arm: arm_types.MotorizedArmSpec,
wrist_camera: camera.Camera_DeviceSpec,
)

Single_Arm_Station_Spec.base​

base: Station_BaseSpec

Single_Arm_Station_Spec.arm​

arm: arm_types.MotorizedArmSpec

Single_Arm_Station_Spec.wrist_camera​

wrist_camera: camera.Camera_DeviceSpec

Single_Arm_Station_Spec.arms​

arms: dict[str, arm_types.MotorizedArmSpec]

Read-only property.

Single_Arm_Station_Spec.cameras​

cameras: dict[str, camera.Camera_DeviceSpec]

Read-only property.

Station_Observation​

Station_Observation(
arms: dict[str, arm_types.MotorizedArm_Observation],
cameras: dict[str, camera.Camera_Observation],
)

One policy-side observation: the latest tick of every arm and camera.

Arms and cameras run at different rates, so each entry carries its own timestamp; consumers that need temporal alignment (world models, chunked policies) should use those rather than assume sync.

Station_Observation.arms​

arms: dict[str, arm_types.MotorizedArm_Observation]

Station_Observation.cameras​

cameras: dict[str, camera.Camera_Observation]

Station_Observation.validate​

validate(station: Station_Spec) -> None

Check every arm / camera of station is present with the shapes its spec promises.

Station_JointPose​

Station_JointPose(arms: dict[str, arm_types.MotorizedArm_JointPose])

One absolute joint configuration for every arm of a station.

Station_JointPose.arms​

arms: dict[str, arm_types.MotorizedArm_JointPose]

Station_JointPose.validate​

validate(station: Station_Spec) -> None

Check the pose names exactly the station's arms with the right shapes.

Station_ActionChunk​

Station_ActionChunk(
timestamp: float,
rate: float,
arms: dict[str, arm_types.MotorizedArm_ActionChunk],
)

A chunk of horizon absolute joint-position targets for every arm of a station.

Row i of every arm is the target at timestamp + i / rate. The station interpolates rows up to each arm's control_rate and executes them until the policy returns a new chunk, which replaces the remainder of the current one.

Station_ActionChunk.timestamp​

timestamp: float

Station-clock time of the observation this chunk was predicted from, unit: [s].

Station_ActionChunk.rate​

rate: float

Spacing between consecutive rows, unit: [Hz]. Chosen by the policy per chunk.

Station_ActionChunk.arms​

arms: dict[str, arm_types.MotorizedArm_ActionChunk]

Station_ActionChunk.horizon​

horizon: int

Read-only property.

Station_ActionChunk.__len__​

__len__() -> int

Station_ActionChunk.__getitem__​

__getitem__(index: int) -> Station_JointPose

Row index of the chunk, for every arm, as one station pose. Negative indices count from the end.

Station_ActionChunk.validate​

validate(station: Station_Spec) -> None

Check the chunk names exactly the station's arms, with the right shapes and a feasible rate.