Skip to content

TelemetrySolver production readiness - critical integration work #23

@jonnyspicer

Description

@jonnyspicer

Summary

Complete the critical production readiness work for TelemetrySolver integration beyond the basic MVP from issue #22. These are essential items needed for TelemetrySolver to function properly in the 3lips system.

Prerequisites

Critical Work Items

1. Add TelemetrySolver to API Configuration

  • Update localisations array in api.py to include TelemetrySolver option
  • Add entry: {"name": "TelemetrySolver (LM)", "id": "telemetry-solver"}
  • Test that option appears in web UI dropdown
  • Verify API validation accepts "telemetry-solver" as valid localisation

Files to modify:

  • 3lips/api/api.py (lines 67-73, 85)

Without this: Web UI won't show TelemetrySolver as selectable option

2. Dependency Management & Compatibility

  • Compare TelemetrySolver/requirements.txt with 3lips/event/requirements.txt
  • Identify version conflicts (numpy, scipy, etc.)
  • Update 3lips requirements.txt to include compatible versions
  • Test that existing 3lips functionality still works with new dependencies
  • Update Docker build process if needed

Potential conflicts to check:

  • numpy version differences
  • scipy version differences
  • Any unique TelemetrySolver dependencies

Risk: Version conflicts could break existing localization methods

3. Error Handling & Fallback Logic

  • Implement graceful handling when TelemetrySolver fails to converge
  • Add fallback to another localization method (suggest ellipse-parametric-mean)
  • Log solver failures for debugging
  • Ensure system doesn't crash on solver exceptions
  • Test with problematic detection geometries

Implementation approach:

def process(self, assoc_detections, radar_data):
    for target in assoc_detections:
        try:
            result = solve_lm(triple, initial_guess)
            if result and "error" not in result:
                # Use TelemetrySolver result
                output[target] = {...}
            else:
                # Fallback to backup method
                output[target] = self.fallback_method(...)
        except Exception as e:
            print(f"TelemetrySolver failed for {target}: {e}")
            # Use fallback method

Files to modify:

  • 3lips/event/algorithm/localisation/TelemetrySolverLocalisation.py

Testing Requirements

Pre-deployment Testing

  • Test TelemetrySolver option appears in web UI
  • Test API accepts "telemetry-solver" requests
  • Test fallback behavior with invalid detection data
  • Test with real radar data to verify no crashes
  • Test dependency compatibility with existing methods

Integration Testing

  • Run full pipeline: radar → association → TelemetrySolver → tracker → API
  • Verify tracks appear correctly on map interface
  • Compare results with other localization methods
  • Test with synthetic-adsb data

Acceptance Criteria

  • Issue Integrate TelemetrySolver as new localization algorithm #22 completed (TelemetrySolver integration)
  • TelemetrySolver appears as option in web UI
  • Can successfully make API calls with "localisation": "telemetry-solver"
  • System handles solver failures gracefully without crashing
  • No dependency conflicts with existing functionality
  • Positions from TelemetrySolver appear correctly on map
  • Fallback works when solver fails to converge

Definition of Done

  • All checklist items completed
  • Integration tests pass
  • Real radar testing shows stable operation
  • No regressions in existing localization methods
  • Documentation updated (if needed)

Time Estimate

~4-6 hours total

  • API configuration: 1 hour
  • Dependency management: 2-3 hours
  • Error handling: 1-2 hours

Priority

Critical - Required for TelemetrySolver to be usable in production with real radar units

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions