blanchon's picture
Update
d4d25f7

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.