// Per-motor target range (max - min, in raw motor steps) by device_type. // Derived from observed SO-101 calibration files; values sit slightly below // the smallest observed good range so a real calibration clears the 98% bar. const SO101_LEADER_TARGETS: Record = { shoulder_pan: 2400, shoulder_lift: 2300, elbow_flex: 2150, wrist_flex: 2250, wrist_roll: 3700, gripper: 1150, }; const SO101_FOLLOWER_TARGETS: Record = { shoulder_pan: 2400, shoulder_lift: 2300, elbow_flex: 2150, wrist_flex: 2250, wrist_roll: 3700, gripper: 1400, }; const TARGETS_BY_DEVICE_TYPE: Record> = { teleop: SO101_LEADER_TARGETS, robot: SO101_FOLLOWER_TARGETS, }; const RANGE_TOLERANCE = 0.98; export function isMotorRangeComplete( deviceType: string | null | undefined, motor: string, rangeAchieved: number ): boolean { if (!deviceType) return false; const target = TARGETS_BY_DEVICE_TYPE[deviceType]?.[motor]; if (!target) return false; return rangeAchieved >= target * RANGE_TOLERANCE; }