se3labs.interface.eval.stationStations
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)
Attributes
Static = 'static'#-
Static manipulation base (the arm is mounted on a fixed, non-mobile base).
Station_Spec
class Station_Spec(ABC)
Attributes
base: Station_BaseSpec#arms: dict[str, arm_types.MotorizedArmSpec]#-
Read-only property. Arm name -> spec. Names are the keys of
Station_Observation.armsandStation_ActionChunk.arms. 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(
)
Attributes
base: Station_BaseSpec#arm: arm_types.MotorizedArmSpec#-
Spec shared by the
leftandrightarms. wrist_camera: camera.Camera_DeviceSpec#-
Spec shared by the
wrist_leftandwrist_rightcameras. topdown_camera: camera.Camera_DeviceSpec#arms: dict[str, arm_types.MotorizedArmSpec]#-
Read-only property.
cameras: dict[str, camera.Camera_DeviceSpec]#-
Read-only property.
Teleop_Bimanual_Station_Spec
Teleop_Bimanual_Station_Spec(
)
A bimanual station with a second pair of arms, leader_left and
leader_right, beside left and right.
Attributes
leader_arm: arm_types.MotorizedArmSpec#arms: dict[str, arm_types.MotorizedArmSpec]#-
Read-only property.
Single_Arm_Station_Spec
Single_Arm_Station_Spec(
)
Attributes
base: Station_BaseSpec#arm: arm_types.MotorizedArmSpec#wrist_camera: camera.Camera_DeviceSpec#arms: dict[str, arm_types.MotorizedArmSpec]#-
Read-only property.
cameras: dict[str, camera.Camera_DeviceSpec]#-
Read-only property.
Station_Observation
Station_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.
Attributes
arms: dict[str, arm_types.MotorizedArm_Observation]#cameras: dict[str, camera.Camera_Observation]#
Methods
validate(station: Station_Spec) -> None#-
Check every arm / camera of
stationis present with the shapes its spec promises.
Station_JointPose
One absolute joint configuration for every arm of a station.
Attributes
arms: dict[str, arm_types.MotorizedArm_JointPose]#
Methods
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,
)
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.
Attributes
timestamp: float#-
Station-clock time of the observation this chunk was predicted from, unit: [s].
rate: float#-
Spacing between consecutive rows, unit: [Hz]. Chosen by the policy per chunk.
arms: dict[str, arm_types.MotorizedArm_ActionChunk]#horizon: int#-
Read-only property.
Methods
__len__() -> int#__getitem__(index: int) -> Station_JointPose#-
Row
indexof the chunk, for every arm, as one station pose. Negative indices count from the end. validate(station: Station_Spec) -> None#-
Check the chunk names exactly the station's arms, with the right shapes and a feasible rate.