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_posis a normalized open fraction in[0, 1]where0is fully closed and1is 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.