Skip to main content
se3labs.interface.eval.arm

Arms

Motorized arm hardware spec and the per-arm observation / action containers.

Conventions (all arrays are np.float32):

  • joint angles in radians, joint velocities in rad/s, joint torques in N*m, joint temperatures in degrees Celsius.
  • gripper_pos is a normalized open fraction in [0, 1] where 0 is fully closed and 1 is fully open. The station maps this to the physical gripper travel, so policies never see device units.
  • Action targets are absolute joint positions.

MotorizedArm_ArmType​

class MotorizedArm_ArmType(Enum)

Attributes​

YAM_6DoF = 'yam_6dof'​#

A YAM 6-DoF arm.

Reference: https://i2rt.com/products/yam-6-dof-arm

n_dof: int​#

Read-only property.

MotorizedArm_GripperType​

class MotorizedArm_GripperType(Enum)

Attributes​

I2RT_linear_gripper_1DoF = 'i2rt_linear_gripper_1dof'​#

I2RT linear gripper with 1 DoF.

Reference: https://i2rt.com/products/yam-gripper-1

I2RT_teaching_handle = 'i2rt_teaching_handle'​#

Passive trigger reporting a normalized opening; no gripper actuator.

n_dof: int​#

Read-only property.

MotorizedArmSpec​

MotorizedArmSpec(
refresh_rate: int,
control_rate: int,
)

Attributes​

arm: MotorizedArm_ArmType​#
gripper: MotorizedArm_GripperType​#
refresh_rate: int​#

Rate at which observations are published, unit: [Hz].

control_rate: int​#

Rate at which joint position targets are sent to the motors, unit: [Hz].

Action chunks emitted at a lower rate are interpolated up to this rate by the station.

n_arm_dof: int​#

Read-only property.

n_gripper_dof: int​#

Read-only property.

gripper_actuated: bool​#

Read-only property.

actuated_width: int​#

Read-only property.

MotorizedArm_Observation​

MotorizedArm_Observation(
timestamp: float,
joint_angle_q: jt.Float32[np.ndarray, n_arm_dof],
joint_angle_vel_dq: jt.Float32[np.ndarray, n_arm_dof],
joint_torque: jt.Float32[np.ndarray, n_arm_dof],
joint_temperature: jt.Float32[np.ndarray, n_arm_dof],
gripper_pos: jt.Float32[np.ndarray, n_gripper_dof],
gripper_vel: jt.Float32[np.ndarray, n_gripper_dof],
gripper_torque: jt.Float32[np.ndarray, n_gripper_dof],
gripper_temperature: jt.Float32[np.ndarray, n_gripper_dof],
)

One observation tick of a single arm. Unmeasured channels are NaN.

A teaching handle supplies opening only; its gripper velocity, torque, and temperature are unavailable.

Construction enforces dtype / rank and that every joint channel shares n_arm_dof; validate binds n_arm_dof / n_gripper_dof to a concrete MotorizedArmSpec.

Attributes​

timestamp: float​#

Monotonic capture time on the station clock, unit: [s].

joint_angle_q: jt.Float32[np.ndarray, n_arm_dof]​#

Joint positions, unit: [rad].

joint_angle_vel_dq: jt.Float32[np.ndarray, n_arm_dof]​#

Joint velocities, unit: [rad/s].

joint_torque: jt.Float32[np.ndarray, n_arm_dof]​#

Joint torques, unit: [N*m].

joint_temperature: jt.Float32[np.ndarray, n_arm_dof]​#

Motor temperatures, unit: [degC].

gripper_pos: jt.Float32[np.ndarray, n_gripper_dof]​#

Normalized gripper open fraction in [0, 1]; 0 = closed, 1 = open.

gripper_vel: jt.Float32[np.ndarray, n_gripper_dof]​#

Gripper opening velocity, unit: [1/s] (open fraction per second).

gripper_torque: jt.Float32[np.ndarray, n_gripper_dof]​#

Gripper motor torque, unit: [N*m].

gripper_temperature: jt.Float32[np.ndarray, n_gripper_dof]​#

Gripper motor temperature, unit: [degC].

Methods​

validate(spec: MotorizedArmSpec) -> None​#

MotorizedArm_JointPose​

MotorizedArm_JointPose(
joint_angle_q: jt.Float32[np.ndarray, n_arm_dof],
gripper_pos: jt.Float32[np.ndarray, n_gripper_dof],
)

One absolute joint configuration of a single arm, e.g. the pose the arm walks to before an episode.

Attributes​

joint_angle_q: jt.Float32[np.ndarray, n_arm_dof]​#

Absolute joint positions, unit: [rad].

gripper_pos: jt.Float32[np.ndarray, n_gripper_dof]​#

Normalized gripper open fraction in [0, 1]; 0 = closed, 1 = open.

Methods​

validate(spec: MotorizedArmSpec) -> None​#

Bind the dims to a concrete arm spec.

MotorizedArm_ActionChunk​

MotorizedArm_ActionChunk(
joint_angle_q: jt.Float32[np.ndarray, 'horizon n_arm_dof'],
gripper_pos: jt.Float32[np.ndarray, 'horizon n_gripper_dof'],
)

A horizon of absolute joint position targets for a single arm.

Construction enforces dtype / rank and a shared horizon between joints and gripper; validate binds the dims to a concrete MotorizedArmSpec and horizon.

Row i is the target i / rate seconds after the chunk's reference timestamp (both carried by the enclosing station.Station_ActionChunk).

Attributes​

joint_angle_q: jt.Float32[np.ndarray, 'horizon n_arm_dof']​#

Absolute joint position targets, unit: [rad].

gripper_pos: jt.Float32[np.ndarray, 'horizon n_gripper_dof']​#

Normalized gripper open fraction in [0, 1]; 0 = closed, 1 = open.

horizon: int​#

Read-only property.

Methods​

__len__() -> int​#
__getitem__(index: int) -> MotorizedArm_JointPose​#

Row index of the chunk as a single joint pose. Negative indices count from the end.

validate(spec: MotorizedArmSpec, horizon: int) -> None​#

Bind the dims to a concrete arm spec and horizon.