Skip to main content

Arms

Module: se3labs.interface.eval.arm

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)

MotorizedArm_ArmType.YAM_6DoF​

YAM_6DoF = 'yam_6dof'

A YAM 6-DoF arm.

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

MotorizedArm_ArmType.n_dof​

n_dof: int

Read-only property.

MotorizedArm_GripperType​

class MotorizedArm_GripperType(Enum)

MotorizedArm_GripperType.I2RT_linear_gripper_1DoF​

I2RT_linear_gripper_1DoF = 'i2rt_linear_gripper_1dof'

I2RT linear gripper with 1 DoF.

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

MotorizedArm_GripperType.n_dof​

n_dof: int

Read-only property.

MotorizedArmSpec​

MotorizedArmSpec(
arm: MotorizedArm_ArmType,
gripper: MotorizedArm_GripperType,
refresh_rate: int,
control_rate: int,
)

MotorizedArmSpec.arm​

arm: MotorizedArm_ArmType

MotorizedArmSpec.gripper​

gripper: MotorizedArm_GripperType

MotorizedArmSpec.refresh_rate​

refresh_rate: int

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

MotorizedArmSpec.control_rate​

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.

MotorizedArmSpec.n_arm_dof​

n_arm_dof: int

Read-only property.

MotorizedArmSpec.n_gripper_dof​

n_gripper_dof: 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],
)

One observation tick of a single arm. Every channel is always populated.

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.

MotorizedArm_Observation.timestamp​

timestamp: float

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

MotorizedArm_Observation.joint_angle_q​

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

Joint positions, unit: [rad].

MotorizedArm_Observation.joint_angle_vel_dq​

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

Joint velocities, unit: [rad/s].

MotorizedArm_Observation.joint_torque​

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

Joint torques, unit: [N*m].

MotorizedArm_Observation.joint_temperature​

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

Motor temperatures, unit: [degC].

MotorizedArm_Observation.gripper_pos​

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

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

MotorizedArm_Observation.validate​

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.

MotorizedArm_JointPose.joint_angle_q​

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

Absolute joint positions, unit: [rad].

MotorizedArm_JointPose.gripper_pos​

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

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

MotorizedArm_JointPose.validate​

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).

MotorizedArm_ActionChunk.joint_angle_q​

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

Absolute joint position targets, unit: [rad].

MotorizedArm_ActionChunk.gripper_pos​

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

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

MotorizedArm_ActionChunk.horizon​

horizon: int

Read-only property.

MotorizedArm_ActionChunk.__len__​

__len__() -> int

MotorizedArm_ActionChunk.__getitem__​

__getitem__(index: int) -> MotorizedArm_JointPose

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

MotorizedArm_ActionChunk.validate​

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

Bind the dims to a concrete arm spec and horizon.