/** * High-Performance Configuration for Robot Control * Optimized for minimum latency and maximum responsiveness * * These values are hardcoded constants optimized for local network operations. * Modify these values carefully - aggressive settings may cause instability. */ export const PERFORMANCE_CONFIG = { /** * WebSocket Connection Settings * Optimized for minimal connection overhead */ WEBSOCKET: { // Connection timeout - reduced from default 10s to 3s CONNECTION_TIMEOUT_MS: 3000, // Reconnection settings - faster recovery MAX_RECONNECT_ATTEMPTS: 10, INITIAL_RECONNECT_DELAY_MS: 250, // Start with 250ms instead of 1s MAX_RECONNECT_DELAY_MS: 2000, // Cap at 2s instead of exponential growth // Heartbeat frequency - more frequent to detect issues faster HEARTBEAT_INTERVAL_MS: 5000 // Every 5s instead of 30s }, /** * Robot Polling and Update Rates * Optimized for real-time responsiveness */ ROBOT_POLLING: { // USB Master polling - increased from 200ms to 50ms (20Hz) USB_MASTER_POLL_INTERVAL_MS: 50, // Robot sync interval - increased from 100ms to 33ms (~30Hz) ROBOT_SYNC_INTERVAL_MS: 33, // State update frequency for mock/slave drivers STATE_UPDATE_INTERVAL_MS: 33, // ~30Hz instead of 10Hz // Command sequence playback rate SEQUENCE_PLAYBACK_INTERVAL_MS: 16, // ~60Hz for smooth playback // Minimum position change threshold (servo units) POSITION_CHANGE_THRESHOLD: 2 // Reduced from 5 for more sensitivity }, /** * Data Processing Optimizations * Reduce computational overhead */ DATA_PROCESSING: { // Joint smoothing history size - reduced for lower latency SMOOTHING_HISTORY_SIZE: 2, // Reduced from 3 // Enable/disable smoothing by default (can cause latency) ENABLE_SMOOTHING: false // Disabled for minimum latency }, /** * Network and Serial Communication * Optimized for low-latency communication */ COMMUNICATION: { // Serial port settings for USB connections USB_BAUD_RATE: 1000000, // 1Mbps - maximum for most servos BATCH_COMMAND_DELAY_MS: 10 // Minimal delay between batch commands }, /** * Safety and Control Optimizations (inspired by lerobot) * Prevent dangerous movements and ensure smooth operation */ SAFETY: { // Maximum relative movement per step (degrees) MAX_RELATIVE_TARGET_DEG: 15, // Prevent sudden large movements // Maximum joint velocity (degrees/second) MAX_JOINT_VELOCITY_DEG_S: 120, // Limit movement speed // Enable position clamping for safety ENABLE_POSITION_CLAMPING: true, // Emergency stop on large position jumps EMERGENCY_STOP_THRESHOLD_DEG: 45 }, /** * Timing and Synchronization (inspired by lerobot) * Precise timing control for smooth operation */ TIMING: { // Use busy wait for precise timing (like lerobot) USE_BUSY_WAIT: true, // Enable high-precision timing USE_HIGH_PRECISION_TIMING: true, // Warmup time for device synchronization DEVICE_WARMUP_TIME_MS: 2000 }, /** * Logging and Debug Settings * Minimal logging for production performance */ LOGGING: { // Enable performance logging ENABLE_PERFORMANCE_LOGS: false, // Log level for WebSocket traffic WEBSOCKET_LOG_LEVEL: "error", // Only log errors // Enable timing measurements (like lerobot) ENABLE_TIMING_MEASUREMENTS: true, // Console log buffer size LOG_BUFFER_SIZE: 100, // Enable detailed performance metrics ENABLE_DETAILED_METRICS: false } } as const; /** * Performance Presets * Quick configurations for different scenarios */ export const PERFORMANCE_PRESETS = { /** * Ultra Low Latency - For same-network, high-performance scenarios * Maximum responsiveness, minimal buffering */ ULTRA_LOW_LATENCY: { ...PERFORMANCE_CONFIG, ROBOT_POLLING: { ...PERFORMANCE_CONFIG.ROBOT_POLLING, USB_MASTER_POLL_INTERVAL_MS: 20, // 50Hz ROBOT_SYNC_INTERVAL_MS: 16, // ~60Hz STATE_UPDATE_INTERVAL_MS: 16 // ~60Hz }, WEBSOCKET: { ...PERFORMANCE_CONFIG.WEBSOCKET, HEARTBEAT_INTERVAL_MS: 2000, // Every 2s CONNECTION_TIMEOUT_MS: 1500 // 1.5s timeout }, DATA_PROCESSING: { ...PERFORMANCE_CONFIG.DATA_PROCESSING, ENABLE_SMOOTHING: false, // No smoothing POSITION_CHANGE_THRESHOLD: 1 // Maximum sensitivity } }, /** * Balanced - Good performance with stability * Recommended for most use cases */ BALANCED: { ...PERFORMANCE_CONFIG, DATA_PROCESSING: { ...PERFORMANCE_CONFIG.DATA_PROCESSING, ENABLE_SMOOTHING: true, SMOOTHING_HISTORY_SIZE: 3 } }, /** * Stable - Conservative settings for unreliable networks * Prioritizes stability over latency */ STABLE: { ...PERFORMANCE_CONFIG, ROBOT_POLLING: { ...PERFORMANCE_CONFIG.ROBOT_POLLING, USB_MASTER_POLL_INTERVAL_MS: 100, // 10Hz ROBOT_SYNC_INTERVAL_MS: 100 // 10Hz }, WEBSOCKET: { ...PERFORMANCE_CONFIG.WEBSOCKET, HEARTBEAT_INTERVAL_MS: 10000, // Every 10s CONNECTION_TIMEOUT_MS: 5000 // 5s timeout } } } as const; /** * Active configuration - change this to switch presets * ULTRA_LOW_LATENCY: Maximum performance for local networks * BALANCED: Good compromise between speed and stability * STABLE: Conservative settings for unreliable connections */ export const ACTIVE_PERFORMANCE_CONFIG = PERFORMANCE_PRESETS.ULTRA_LOW_LATENCY; /** * Utility functions for configuration access */ export const getWebSocketConfig = () => ACTIVE_PERFORMANCE_CONFIG.WEBSOCKET; export const getRobotPollingConfig = () => ACTIVE_PERFORMANCE_CONFIG.ROBOT_POLLING; export const getDataProcessingConfig = () => ACTIVE_PERFORMANCE_CONFIG.DATA_PROCESSING; export const getCommunicationConfig = () => ACTIVE_PERFORMANCE_CONFIG.COMMUNICATION; export const getSafetyConfig = () => ACTIVE_PERFORMANCE_CONFIG.SAFETY; export const getTimingConfig = () => ACTIVE_PERFORMANCE_CONFIG.TIMING; export const getLoggingConfig = () => ACTIVE_PERFORMANCE_CONFIG.LOGGING;