LeRobot-Arena / src /lib /configs /performanceConfig.ts
blanchon's picture
Mostly UI Update
18b0fa5
/**
* 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;