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.