Spaces:
Running
Running
# Robot USB Connection System - Summary | |
## Core Components | |
### USBProducer (Output) | |
**Purpose**: Sends software commands to control physical robot hardware | |
- Receives normalized joint commands from software | |
- Converts normalized values to raw servo positions | |
- Sends position commands to physical servos | |
- Locks servos for precise software control | |
### USBConsumer (Input) | |
**Purpose**: Reads physical robot movements and translates to software commands | |
- Continuously monitors physical servo positions | |
- Converts raw servo values to normalized percentages | |
- Detects movement changes and broadcasts updates | |
- Keeps servos unlocked for manual manipulation | |
## Key Features | |
### Calibration System (`USBCalibrationPanel.svelte`) | |
- **Requirement**: All USB connections must be calibrated before use | |
- **Process**: Records min/max physical range for each servo by manual movement | |
- **Result**: Establishes mapping between raw servo values (0-4095) and normalized values | |
### Normalized Communication Protocol | |
- **Standard Joints**: -100% to +100% range (bipolar) | |
- **Gripper/Jaw**: 0% to +100% range (unipolar) | |
- **Benefits**: Consistent software interface across different robots | |
- **Conversion**: Automatic normalization/denormalization based on calibration data | |
### Multi-Port Support | |
- **Capability**: Multiple independent USB connections simultaneously | |
- **Independence**: Each connection has its own calibration and configuration | |
- **Use Case**: Control multiple robots or multiple connections to same robot | |
### Batch Operations | |
- **Sync Read**: Read multiple servo positions simultaneously | |
- **Sync Write**: Send commands to multiple servos in batched operations | |
- **Performance**: Reduces USB communication overhead and latency | |
## Key Constraints | |
### Connection Exclusivity | |
- **Input**: Only one consumer (input source) active per robot at a time | |
- **Output**: Multiple producers (output destinations) can be active simultaneously | |
- **Rationale**: Prevents conflicting input commands while allowing broadcast to multiple destinations | |
### Servo Locking Strategy | |
- **Consumer Mode**: Servos unlocked β manual movement possible + position reading | |
- **Producer Mode**: Servos locked β software control only, no manual movement | |
- **Safety**: Prevents mechanical conflicts between manual and software control | |
### Calibration Dependency | |
- **Mandatory**: USB connections cannot establish without valid calibration | |
- **Per-Connection**: Each USB port requires independent calibration | |
- **Safety**: Prevents commanding impossible positions or damaging hardware | |
## Additional System Requirements (from SPEC.md analysis) | |
### Connection Management | |
- **Auto-Detection**: System should detect available USB ports automatically | |
- **Status Monitoring**: Real-time connection health and error reporting | |
- **Graceful Disconnection**: Safe servo unlocking on disconnect/error | |
### Error Handling & Recovery | |
- **Port Conflicts**: Queue management to prevent "Port is busy" errors | |
- **Retry Logic**: Automatic retry with backoff for failed servo commands | |
- **Connection Recovery**: Automatic reconnection attempts after USB disconnect | |
### User Interface Integration | |
- **Modal Management**: Unified connection setup through calibration panels | |
- **Status Display**: Visual indicators for connection state and calibration status | |
- **Manual Control**: Direct joint manipulation when no input consumer active | |
### Performance Optimizations | |
- **Polling Rates**: Configurable update frequencies for different use cases | |
- **Change Detection**: Only broadcast updates when values actually change | |
- **Queueing**: Serial command processing to prevent USB port conflicts | |
## System Architecture Concepts | |
### Bidirectional Data Flow | |
``` | |
Physical Robot ββ USB Hardware ββ Calibration Layer ββ Normalized Interface ββ Software | |
``` | |
### Connection Patterns | |
- **Teaching Mode**: USB Consumer only (read robot movements) | |
- **Control Mode**: USB Producer only (software controls robot) | |
- **Bidirectional**: Both consumer and producer (full interaction) | |
- **Broadcasting**: Multiple producers (send to hardware + remote systems) | |
### Value Transformation Pipeline | |
``` | |
Raw Servo (0-4095) ββ Calibrated Range ββ Normalized (-100/+100) ββ Software Commands | |
``` | |
This system provides a robust, safe, and flexible interface for robot hardware control while maintaining consistency across different robot configurations and use cases. |