Spaces:
Running
Running
// Core models with clean typing | |
export interface JointState { | |
name: string; | |
value: number; // Normalized value (-100 to +100 for regular joints, 0-100 for grippers) | |
limits?: { lower: number; upper: number }; // URDF limits in radians | |
servoId?: number; // For hardware mapping | |
} | |
export interface JointCalibration { | |
isCalibrated: boolean; | |
minServoValue?: number; | |
maxServoValue?: number; | |
} | |
export interface RobotCommand { | |
joints: { name: string; value: number }[]; | |
timestamp?: number; | |
} | |
export interface ConnectionStatus { | |
isConnected: boolean; | |
error?: string; | |
lastConnected?: Date; | |
} | |
export interface Position3D { | |
x: number; | |
y: number; | |
z: number; | |
} | |
// Driver configurations | |
export interface USBDriverConfig { | |
type: 'usb'; | |
baudRate?: number; | |
} | |
export interface RemoteDriverConfig { | |
type: 'remote'; | |
url: string; | |
robotId: string; | |
workspaceId?: string; // Optional workspace ID for remote connections | |
} | |
// Driver base interface | |
export interface Driver { | |
readonly id: string; | |
readonly name: string; | |
readonly status: ConnectionStatus; | |
connect(): Promise<void>; | |
disconnect(): Promise<void>; | |
onStatusChange(callback: (status: ConnectionStatus) => void): () => void; | |
} | |
// Consumer interface (receives commands) - Robot can only have ONE | |
export interface Consumer extends Driver { | |
onCommand(callback: (command: RobotCommand) => void): () => void; | |
startListening?(): Promise<void>; | |
stopListening?(): Promise<void>; | |
} | |
// Producer interface (sends commands) - Robot can have MULTIPLE | |
export interface Producer extends Driver { | |
sendCommand(command: RobotCommand): Promise<void>; | |
} | |
// Calibration state for UI components | |
export interface CalibrationState { | |
isCalibrating: boolean; | |
progress: number; | |
} |