Files
BQP/docs/RobotApp-TunningNav/# ROBOT TUNING SYSTEM - COMPLETE ARCHITE.md
2026-07-13 09:25:40 +07:00

32 KiB
Raw Blame History

ROBOT TUNING SYSTEM - COMPLETE ARCHITECTURE DOCUMENT

Version: 1.0
Date: 2026-01-26
Target Platform: .NET 10 + Blazor
Robot Type: Differential Drive Mobile Robot


TABLE OF CONTENTS

  1. Executive Summary
  2. System Context
  3. Requirements
  4. Architecture Overview
  5. Layer 1: Presentation (Blazor Dashboard)
  6. Layer 2: Application Services
  7. Layer 3: Domain Logic
  8. Layer 4: Robot Control
  9. Layer 5: Hardware Abstraction
  10. Data Models
  11. Database Schema
  12. Control Flow & Data Flow
  13. Configuration Management
  14. Tuning Workflows
  15. Technology Stack
  16. Deployment Architecture
  17. Implementation Phases
  18. API Specifications
  19. Performance Requirements
  20. Security & Safety
  21. Testing Strategy
  22. Appendices

1. EXECUTIVE SUMMARY

1.1. Purpose

This document defines the complete architecture for a Robot Tuning System designed to optimize control parameters for differential drive mobile robots. The system enables:

  • Interactive parameter tuning via web dashboard
  • Automated test execution and performance evaluation
  • Comparative analysis of parameter configurations
  • Historical tracking and reporting

1.2. System Goals

Primary Goal: Find optimal parameter sets for PID velocity control, Pure Pursuit path tracking, and Velocity Estimator that minimize tracking error while maintaining smooth motion.

Secondary Goals:

  • Reduce tuning time from days to hours
  • Enable reproducible, data-driven parameter selection
  • Support multiple test scenarios (straight lines, circles, complex paths)
  • Provide intuitive visualization and analysis tools

1.3. Key Stakeholders

  • Robot Developers: Configure and tune robot behavior
  • Test Engineers: Run validation tests and generate reports
  • AI Systems: Process and analyze this architecture document

1.4. Success Metrics

  • Tracking Accuracy: Cross-track error RMS < 10cm
  • Smoothness: Max jerk < 5 m/s³
  • Efficiency: Path length ratio < 1.15
  • Tuning Speed: Find acceptable parameters within 2 hours
  • Reproducibility: Result variance < 5% across runs

2. SYSTEM CONTEXT

2.1. Robot Overview

Robot Type: Differential Drive Mobile Robot
Physical Characteristics:

  • Wheelbase: 0.35m (distance between left/right wheels)
  • Wheel radius: 0.075m
  • Mass: ~25kg
  • Max linear velocity: 1.5 m/s
  • Max angular velocity: 6 rad/s
  • Max linear acceleration: 1.0 m/s²
  • Max angular acceleration: 1.0 rad/s²

Operating Environment:

  • Indoor spaces (smooth floors)
  • Test area: 10m × 20m
  • No dynamic obstacles during tuning

2.2. Control System Architecture

The robot uses a hierarchical control structure:

Goal Position
    ↓
[Distance-based PID] → Linear Velocity (v_max)
    ↓
[Velocity Estimator] → Estimated Velocity (v_hybrid)
    ↓                          ↓
    └───────→ [Pure Pursuit] ←─┘
                  ↓
            Angular Velocity (ω)
                  ↓
    [Combine (v_max, ω)] → (v_cmd, ω_cmd)
                  ↓
    [Differential Kinematics] → (wheel_left, wheel_right)
                  ↓
            Motor Commands

Controller Descriptions:

  1. Distance-based PID Controller:

    • Input: Distance to goal (error = distance_to_goal)
    • Output: Maximum linear velocity (v_max)
    • Logic:
      • If distance > 5m: return max velocity (1.5 m/s)
      • If distance ≤ 5m: PID control
      • If velocity < min velocity: return min velocity
    • Parameters to tune: Kp, Ki, Kd
  2. Velocity Estimator:

    • Purpose: Combine encoder measurements with kinematic model for accurate velocity estimation
    • Method: Adaptive blending based on tracking quality
    • Model: First-order system response
      v_predicted = v_actual + (v_cmd - v_actual) × (1 - e^(-t_eff/τ))
      where t_eff = t_ahead - delay
      
    • Blending:
      v_hybrid = blend_ratio × v_model + (1 - blend_ratio) × v_encoder
      
    • Adaptive Logic:
      • Good tracking (error < 12%): blend_ratio = 0.3 (trust encoder 70%)
      • Moderate tracking (error < 30%): blend_ratio = 0.5
      • Poor tracking (error ≥ 30%): blend_ratio = 0.7 (trust model 70%)
    • Parameters to tune: AlphaFilter, blend ratios, confidence decay rate
  3. Pure Pursuit Controller:

    • Input: Current position, v_hybrid, reference path
    • Output: Angular velocity (ω)
    • Lookahead calculation:
      lookahead = clamp(
          LookaheadMin + Kdd × |v_hybrid|,
          LookaheadMin,
          LookaheadMax
      )
      lookahead *= confidence  // Reduce if estimator confidence is low
      
    • Parameters to tune: Kdd, LookaheadMin, LookaheadMax

2.3. Tuning Challenges

Current State:

  • Manual tuning takes days per robot
  • No systematic approach to parameter selection
  • Difficult to validate performance across scenarios
  • Parameters tuned for one trajectory may fail on others

Desired State:

  • Semi-automated tuning process
  • Data-driven parameter optimization
  • Cross-scenario validation
  • Reproducible results with confidence metrics

3. REQUIREMENTS

3.1. Functional Requirements

FR-1: Test Execution

  • FR-1.1: System shall execute single test runs with specified parameters
  • FR-1.2: System shall execute batch tests across multiple configurations
  • FR-1.3: System shall support at least 3 trajectory types: straight line, large circle (2m radius), small circle (0.5m radius)
  • FR-1.4: System shall log all telemetry data at 50Hz during test execution
  • FR-1.5: System shall detect and abort tests on safety violations

FR-2: Parameter Management

  • FR-2.1: System shall allow users to configure all tunable parameters via UI
  • FR-2.2: System shall validate parameters against physical constraints
  • FR-2.3: System shall save/load parameter configurations with versioning
  • FR-2.4: System shall support parameter presets (default, aggressive, smooth)

FR-3: Metrics & Analysis

  • FR-3.1: System shall calculate tracking accuracy metrics (CTE RMS, heading error)
  • FR-3.2: System shall calculate smoothness metrics (jerk, velocity variance)
  • FR-3.3: System shall calculate efficiency metrics (path length ratio, time)
  • FR-3.4: System shall compute overall score based on weighted metrics
  • FR-3.5: System shall compare multiple configurations side-by-side

FR-4: Visualization

  • FR-4.1: System shall display real-time 2D trajectory during test execution
  • FR-4.2: System shall stream live telemetry charts (velocity, CTE, etc.)
  • FR-4.3: System shall visualize post-test analysis with interactive charts
  • FR-4.4: System shall support trajectory replay from logged data

FR-5: Reporting

  • FR-5.1: System shall export test results to CSV format
  • FR-5.2: System shall generate HTML summary reports
  • FR-5.3: System shall maintain test history in database

FR-6: Safety

  • FR-6.1: System shall monitor cross-track error continuously
  • FR-6.2: System shall trigger emergency stop if CTE > 0.5m
  • FR-6.3: System shall trigger emergency stop if heading error > 45°
  • FR-6.4: System shall log all safety violations with timestamps

3.2. Non-Functional Requirements

NFR-1: Performance

  • NFR-1.1: Control loop shall execute at 50Hz (±2ms jitter)
  • NFR-1.2: UI updates shall occur at ≥10Hz with <200ms lag
  • NFR-1.3: Data logging shall not impact control loop performance
  • NFR-1.4: Test completion time shall be <2× trajectory duration

NFR-2: Usability

  • NFR-2.1: Non-technical users shall be able to run basic tests
  • NFR-2.2: Parameter controls shall provide immediate visual feedback
  • NFR-2.3: Error messages shall be clear and actionable
  • NFR-2.4: Dashboard shall be accessible via web browser

NFR-3: Reliability

  • NFR-3.1: System shall recover from SignalR disconnections automatically
  • NFR-3.2: Test data shall not be lost on application crash
  • NFR-3.3: System shall handle encoder noise and wheel slip gracefully

NFR-4: Maintainability

  • NFR-4.1: Code shall follow SOLID principles
  • NFR-4.2: Each layer shall have clear interfaces and minimal coupling
  • NFR-4.3: Unit test coverage shall be >80% for domain logic

NFR-5: Scalability

  • NFR-5.1: System shall support multiple test scenarios (target: 10+)
  • NFR-5.2: Database shall handle 1000+ test runs without degradation
  • NFR-5.3: Architecture shall allow future addition of optimization algorithms

3.3. Acceptance Criteria

Primary Metric (Tracking Accuracy):

  • Cross-track error RMS < 0.10m (10cm)
  • Cross-track error peak < 0.20m (20cm)
  • Heading error RMS < 10° (0.174 rad)
  • Goal position error < 0.05m (5cm)

Secondary Metric (Smoothness):

  • Max jerk < 5.0 m/s³
  • Max angular jerk < 10.0 rad/s³
  • Velocity standard deviation < 0.15 m/s

Tertiary Metric (Efficiency):

  • Path length ratio < 1.15 (actual path < 115% of optimal)
  • Success rate > 90% (9 out of 10 runs pass)

4. ARCHITECTURE OVERVIEW

4.1. Architectural Style

Layered Architecture with clean separation between presentation, application logic, domain logic, and infrastructure.

Key Patterns:

  • Repository Pattern: Data access abstraction
  • Service Layer Pattern: Application-level orchestration
  • Domain-Driven Design: Rich domain models
  • CQRS (Light): Separate read/write models for optimization
  • Event-Driven: Real-time updates via SignalR

4.2. Layer Diagram

┌─────────────────────────────────────────────────────────────────────┐
│ LAYER 1: PRESENTATION                                                │
│ ┌─────────────────────────────────────────────────────────────────┐ │
│ │ Blazor Dashboard (Web UI)                                        │ │
│ │ - Real-time Monitoring Pages                                    │ │
│ │ - Parameter Tuning Controls                                     │ │
│ │ - Analysis & Visualization                                      │ │
│ │ - Configuration Management                                      │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└───────────────────────────────┬─────────────────────────────────────┘
                                │ SignalR Hubs / REST API
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│ LAYER 2: APPLICATION SERVICES                                        │
│ ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│ │   Tuning     │  │  Parameter   │  │   Metric     │              │
│ │ Orchestrator │  │   Manager    │  │  Analyzer    │              │
│ └──────────────┘  └──────────────┘  └──────────────┘              │
│ ┌──────────────┐  ┌──────────────┐                                 │
│ │    Report    │  │    Event     │                                 │
│ │  Generator   │  │  Publisher   │                                 │
│ └──────────────┘  └──────────────┘                                 │
└───────────────────────────────┬─────────────────────────────────────┘
                                │ Domain Interfaces
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│ LAYER 3: DOMAIN LOGIC                                                │
│ ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│ │     Test     │  │  Trajectory  │  │  Parameter   │              │
│ │   Executor   │  │  Generator   │  │  Optimizer   │              │
│ └──────────────┘  └──────────────┘  └──────────────┘              │
│ ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│ │    Metric    │  │    Safety    │  │   Scoring    │              │
│ │  Calculator  │  │   Monitor    │  │    Engine    │              │
│ └──────────────┘  └──────────────┘  └──────────────┘              │
└───────────────────────────────┬─────────────────────────────────────┘
                                │ Control Interfaces
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│ LAYER 4: ROBOT CONTROL                                               │
│ ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│ │     PID      │  │   Velocity   │  │     Pure     │              │
│ │  Controller  │  │  Estimator   │  │   Pursuit    │              │
│ └──────────────┘  └──────────────┘  └──────────────┘              │
│ ┌──────────────┐  ┌──────────────┐                                 │
│ │     Data     │  │    State     │                                 │
│ │    Logger    │  │   Manager    │                                 │
│ └──────────────┘  └──────────────┘                                 │
└───────────────────────────────┬─────────────────────────────────────┘
                                │ Hardware Interfaces
                                ▼
┌─────────────────────────────────────────────────────────────────────┐
│ LAYER 5: HARDWARE ABSTRACTION                                        │
│ ┌──────────────┐  ┌──────────────┐  ┌──────────────┐              │
│ │    Motor     │  │   Encoder    │  │    Robot     │              │
│ │    Driver    │  │    Reader    │  │    State     │              │
│ └──────────────┘  └──────────────┘  └──────────────┘              │
└───────────────────────────────┬─────────────────────────────────────┘
                                │
                                ▼
                        [Physical Hardware]
                        - Motors
                        - Encoders
                        - Emergency Stop

4.3. Component Interactions

Typical Test Execution Flow:

User → UI → TuningOrchestrator → TestExecutor → Controllers → Hardware
                ↓                      ↓             ↓
           ParameterManager      SafetyMonitor   DataLogger
                                       ↓             ↓
                                   [Abort?]      [Database]
                                                     ↓
UI ← SignalR ← EventPublisher ← MetricAnalyzer ← [Results]

4.4. Project Structure

RobotTuning.sln
├── src/
│   ├── RobotTuning.Domain/              # Layer 3: Domain Logic
│   │   ├── Models/                       # Domain entities
│   │   ├── Services/                     # Domain services
│   │   ├── Interfaces/                   # Abstractions
│   │   └── ValueObjects/                 # Value objects
│   │
│   ├── RobotTuning.Application/          # Layer 2: Application Services
│   │   ├── Services/                     # Orchestrators, managers
│   │   ├── DTOs/                         # Data transfer objects
│   │   ├── Interfaces/                   # Service contracts
│   │   └── Mapping/                      # AutoMapper profiles
│   │
│   ├── RobotTuning.Infrastructure/       # Layer 4 & 5: Control & Hardware
│   │   ├── Controllers/                  # PID, Estimator, PurePursuit
│   │   ├── Hardware/                     # Motor drivers, encoder readers
│   │   ├── Logging/                      # Data logger implementation
│   │   ├── Persistence/                  # Database context, repositories
│   │   └── Configuration/                # Config file handling
│   │
│   ├── RobotTuning.Web/                  # Layer 1: Presentation
│   │   ├── Pages/                        # Blazor pages
│   │   ├── Components/                   # Reusable UI components
│   │   ├── Hubs/                         # SignalR hubs
│   │   ├── wwwroot/                      # Static files, JS libraries
│   │   └── Program.cs                    # Application entry point
│   │
│   └── RobotTuning.Shared/               # Shared utilities
│       ├── Constants/
│       ├── Extensions/
│       └── Helpers/
│
└── tests/
    ├── RobotTuning.Domain.Tests/
    ├── RobotTuning.Application.Tests/
    └── RobotTuning.Integration.Tests/

5. LAYER 1: PRESENTATION

5.1. Page Structure

/Pages
├── Index.razor                          # Landing page
├── Dashboard/
│   ├── RealTimeMonitor.razor            # Live test monitoring
│   │   ├── TrajectoryView.razor         # 2D path visualization
│   │   ├── TelemetryPanel.razor         # Live metrics
│   │   └── StatusIndicators.razor       # State, warnings
│   └── LiveCharts.razor                 # Streaming charts
├── Tuning/
│   ├── ManualTuning.razor               # Interactive parameter adjustment
│   │   ├── ParameterSliders.razor       # PID, PP, Estimator controls
│   │   ├── QuickActions.razor           # Run, Stop, Reset buttons
│   │   └── SuggestionPanel.razor        # AI-powered suggestions
│   ├── AutoTuning.razor                 # Automated optimization
│   │   ├── OptimizationConfig.razor     # Algorithm selection, constraints
│   │   └── ProgressView.razor           # Optimization progress
│   └── ParameterComparison.razor        # A/B testing
│       ├── ConfigSelector.razor         # Select configs to compare
│       ├── ComparisonTable.razor        # Side-by-side metrics
│       └── ComparisonCharts.razor       # Visual comparison
├── Analysis/
│   ├── MetricsAnalysis.razor            # Deep-dive metrics
│   │   ├── TrackingAccuracy.razor       # CTE, heading analysis
│   │   ├── SmoothnessAnalysis.razor     # Jerk, acceleration plots
│   │   └── EfficiencyAnalysis.razor     # Path length, time metrics
│   ├── TrajectoryVisualization.razor    # Post-test trajectory viewer
│   │   ├── PathOverlay.razor            # Actual vs reference path
│   │   ├── ErrorHeatmap.razor           # CTE along path
│   │   └── PlaybackControls.razor       # Replay timeline
│   └── PerformanceReport.razor          # Summary reports
│       ├── ScoreCard.razor              # Overall scores
│       ├── MetricsSummary.razor         # Key metrics table
│       └── ExportOptions.razor          # PDF, CSV export
├── Configuration/
│   ├── TestScenarios.razor              # Define test trajectories
│   │   ├── TrajectoryBuilder.razor      # Visual trajectory editor
│   │   └── ScenarioLibrary.razor        # Saved scenarios
│   ├── RobotSettings.razor              # Physical parameters
│   │   ├── PhysicalParams.razor         # Wheelbase, mass, etc.
│   │   └── TimingConfig.razor           # Control loop frequency
│   └── AcceptanceCriteria.razor         # Pass/fail thresholds
│       ├── MetricThresholds.razor       # Set limits
│       └── WeightingConfig.razor        # Metric weights for scoring
└── History/
    ├── TestHistory.razor                # Historical test runs
    │   ├── TestList.razor               # Filterable list
    │   ├── TestDetails.razor            # Drill-down view
    │   └── SearchAndFilter.razor        # Date, config, trajectory filters
    └── ParameterEvolution.razor         # Parameter changes over time
        ├── EvolutionTimeline.razor      # Visual timeline
        └── ChangeLog.razor              # Detailed change log

5.2. Key UI Components

5.2.1. Real-Time Monitoring Panel

Component: RealTimeMonitor.razor

Features:

  • Trajectory View: 2D canvas showing robot position, reference path, lookahead point
  • Telemetry Gauges: Speed, angular velocity, CTE, heading error (updated 10Hz)
  • Progress Bar: Distance completed / total distance
  • Status Indicators: Running, Paused, Warning, Error states
  • Control Buttons: Pause, Resume, Stop, Emergency Stop

Data Binding:

@code {
    [Inject] IHubConnection HubConnection { get; set; }
    
    private RobotState currentState;
    private List<Vector2> trajectoryHistory = new();
    
    protected override async Task OnInitializedAsync()
    {
        HubConnection.On<RobotState>("ReceiveState", state =>
        {
            currentState = state;
            trajectoryHistory.Add(state.Position);
            StateHasChanged();
        });
        
        await HubConnection.StartAsync();
    }
}

SignalR Messages:

  • ReceiveState: Full robot state (50Hz → throttled to 10Hz)
  • ReceiveMetrics: Current metrics (CTE, heading error, etc.)
  • ReceiveSafetyEvent: Safety violations or warnings
  • ReceiveTestStatus: Test lifecycle events (started, paused, completed, aborted)

5.2.2. Parameter Tuning Panel

Component: ParameterSliders.razor

Features:

  • Grouped Sliders: PID (Kp, Ki, Kd), Pure Pursuit (Kdd, lookahead), Estimator (alpha, blends)
  • Real-time Validation: Show red border if value out of bounds
  • Value Input: Slider + numeric input for precise control
  • Reset Button: Revert to last saved or default values
  • Presets Dropdown: Quick load (Conservative, Balanced, Aggressive)

Example Markup:

<MudCard>
    <MudCardHeader>PID Controller</MudCardHeader>
    <MudCardContent>
        <MudSlider T="double" 
                   @bind-Value="parameters.PID.Kp" 
                   Min="@Bounds.KpRange.Min" 
                   Max="@Bounds.KpRange.Max"
                   Step="0.1"
                   ValueLabel="true">
            Kp: @parameters.PID.Kp.ToString("F2")
        </MudSlider>
        
        <MudTextField @bind-Value="parameters.PID.Kp" 
                      Label="Kp (Precise)" 
                      Variant="Variant.Outlined" 
                      Validation="@ValidateKp" />
        
        <!-- Repeat for Ki, Kd -->
    </MudCardContent>
</MudCard>

5.2.3. Metrics Dashboard

Component: MetricsSummary.razor

Layout:

┌─────────────────────────────────────────────────────────┐
│ TRACKING ACCURACY ⭐⭐⭐⭐☆ (92/100)                     │
├─────────────────────────────────────────────────────────┤
│ Cross-Track Error RMS    0.087m  ✅  (< 0.10m)        │
│ Cross-Track Error Peak   0.152m  ✅  (< 0.20m)        │
│ Heading Error RMS        8.3°    ✅  (< 10°)          │
│ Goal Position Error      0.042m  ✅  (< 0.05m)        │
├─────────────────────────────────────────────────────────┤
│ SMOOTHNESS ⭐⭐⭐⭐☆ (88/100)                            │
├─────────────────────────────────────────────────────────┤
│ Max Jerk                 3.2 m/s³ ✅  (< 5.0)         │
│ Velocity Std Dev         0.08 m/s ✅                   │
│ Angular Jerk             6.1 r/s³ ✅  (< 10.0)        │
├─────────────────────────────────────────────────────────┤
│ EFFICIENCY ⭐⭐⭐⭐☆ (85/100)                            │
├─────────────────────────────────────────────────────────┤
│ Path Length Ratio        1.08     ✅  (< 1.15)        │
│ Completion Time          8.5s                          │
│ Average Speed            1.18 m/s                      │
└─────────────────────────────────────────────────────────┘

Color Coding:

  • Green : Metric passes acceptance criteria
  • Yellow ⚠️: Metric close to threshold (within 10%)
  • Red : Metric fails acceptance criteria

5.2.4. Trajectory Visualization

Component: TrajectoryView.razor

Canvas Rendering (using Blazor.Extensions.Canvas or Plotly):

  • Reference Path: Solid blue line
  • Actual Path: Dashed green line (updates real-time)
  • Robot Icon: Oriented triangle at current position
  • Lookahead Point: Red circle on reference path
  • Target Goal: Flag icon
  • Error Bars: Perpendicular lines showing CTE at sample points

Interactive Features:

  • Zoom/pan
  • Click to see metrics at specific point
  • Toggle layers (reference, actual, errors)

5.3. SignalR Hub Definition

File: Hubs/TuningHub.cs

public class TuningHub : Hub
{
    private readonly ITuningOrchestrator _orchestrator;
    
    public TuningHub(ITuningOrchestrator orchestrator)
    {
        _orchestrator = orchestrator;
    }
    
    // Client → Server
    public async Task StartTest(TestScenario scenario, ParameterSet parameters)
    {
        await _orchestrator.StartTest(scenario, parameters, Context.ConnectionId);
    }
    
    public async Task PauseTest()
    {
        await _orchestrator.PauseTest(Context.ConnectionId);
    }
    
    public async Task StopTest()
    {
        await _orchestrator.StopTest(Context.ConnectionId);
    }
    
    public async Task EmergencyStop()
    {
        await _orchestrator.EmergencyStop(Context.ConnectionId);
    }
    
    // Server → Client (called by orchestrator)
    // Clients.Caller.SendAsync("ReceiveState", state);
    // Clients.Caller.SendAsync("ReceiveMetrics", metrics);
    // Clients.Caller.SendAsync("ReceiveTestStatus", status);
    // Clients.Caller.SendAsync("ReceiveSafetyEvent", safetyEvent);
}

Client-side Connection:

@code {
    private HubConnection hubConnection;
    
    protected override async Task OnInitializedAsync()
    {
        hubConnection = new HubConnectionBuilder()
            .WithUrl(NavigationManager.ToAbsoluteUri("/tuninghub"))
            .WithAutomaticReconnect()
            .Build();
        
        hubConnection.On<RobotState>("ReceiveState", HandleStateUpdate);
        hubConnection.On<TestMetrics>("ReceiveMetrics", HandleMetricsUpdate);
        hubConnection.On<TestStatus>("ReceiveTestStatus", HandleStatusUpdate);
        hubConnection.On<SafetyEvent>("ReceiveSafetyEvent", HandleSafetyEvent);
        
        await hubConnection.StartAsync();
    }
}

6. LAYER 2: APPLICATION SERVICES

6.1. TuningOrchestrator

Responsibility: Coordinate the entire tuning workflow from test initiation to result storage.

Interface:

public interface ITuningOrchestrator
{
    // Test execution
    Task<TestResult> RunSingleTest(
        TestScenario scenario, 
        ParameterSet parameters, 
        string connectionId = null
    );
    
    Task<BatchTestResult> RunBatchTests(
        List<TestScenario> scenarios, 
        ParameterSet parameters
    );
    
    Task<ComparisonResult> CompareConfigurations(
        List<ParameterSet> parameterSets, 
        TestScenario scenario
    );
    
    // Real-time control
    Task StartTest(TestScenario scenario, ParameterSet parameters, string connectionId);
    Task PauseTest(string connectionId);
    Task ResumeTest(string connectionId);
    Task StopTest(string connectionId);
    Task EmergencyStop(string connectionId