Skip to main content

Python port of the U.S. Naval Research Laboratory's Tracker Component Library for target tracking algorithms

Project description

Tracker Component Library (Python)

Python 3.10+ License: Public Domain Code style: black

A Python port of the U.S. Naval Research Laboratory's Tracker Component Library, a comprehensive collection of algorithms for target tracking, estimation, coordinate systems, and related mathematical functions.

Overview

The Tracker Component Library provides building blocks for developing target tracking algorithms, including:

  • Coordinate Systems: Conversions between Cartesian, spherical, geodetic, and other coordinate systems
  • Dynamic Models: State transition matrices for constant velocity, coordinated turn, and other motion models
  • Estimation Algorithms: Kalman filters (EKF, UKF, etc.), particle filters, and batch estimation
  • Assignment Algorithms: Hungarian algorithm, auction algorithms, and multi-dimensional assignment
  • Mathematical Functions: Special functions, statistics, numerical integration, and more
  • Astronomical Code: Ephemeris calculations, time systems, celestial mechanics
  • Navigation: Geodetic calculations, INS algorithms, GNSS utilities
  • Geophysical Models: Gravity, magnetism, atmosphere, and terrain models

Installation

Basic Installation

pip install tracker-component-library

With Optional Dependencies

# For astronomy features (ephemerides, celestial mechanics)
pip install tracker-component-library[astronomy]

# For geodesy features (coordinate transforms, map projections)
pip install tracker-component-library[geodesy]

# For visualization
pip install tracker-component-library[visualization]

# For development
pip install tracker-component-library[dev]

# Install everything
pip install tracker-component-library[all]

From Source

git clone https://github.com/your-org/tracker-component-library-python.git
cd tracker-component-library-python
pip install -e ".[dev]"

Quick Start

Coordinate Conversions

import numpy as np
from tracker_component_library.coordinate_systems import cart2sphere, sphere2cart

# Convert Cartesian to spherical coordinates
cart_point = np.array([1.0, 1.0, 1.0])
r, az, el = cart2sphere(cart_point)
print(f"Range: {r:.3f}, Azimuth: {np.degrees(az):.1f}°, Elevation: {np.degrees(el):.1f}°")

# Convert back
cart_recovered = sphere2cart(r, az, el)

Kalman Filter

from tracker_component_library.dynamic_estimation.kalman import KalmanFilter
from tracker_component_library.dynamic_models import constant_velocity_model

# Create a constant velocity model
dt = 0.1
F, Q = constant_velocity_model(dt, dimension=2, process_noise_intensity=1.0)

# Initialize filter
kf = KalmanFilter(
    F=F,  # State transition matrix
    H=np.array([[1, 0, 0, 0], [0, 0, 1, 0]]),  # Measurement matrix
    Q=Q,  # Process noise
    R=np.eye(2) * 10,  # Measurement noise
)

# Run filter
x_est, P_est = kf.predict()
x_est, P_est = kf.update(measurement)

Assignment Problem

from tracker_component_library.assignment_algorithms import hungarian

# Cost matrix (tracks x measurements)
cost_matrix = np.array([
    [10, 5, 13],
    [3, 15, 8],
    [7, 9, 12],
])

# Solve assignment
assignment, total_cost = hungarian(cost_matrix)
print(f"Optimal assignment: {assignment}, Total cost: {total_cost}")

Module Structure

tracker_component_library/
├── core/                    # Foundation utilities and constants
├── mathematical_functions/  # Basic math, statistics, special functions
├── coordinate_systems/      # Coordinate conversions and transforms
├── dynamic_models/          # State transition and process noise models
├── dynamic_estimation/      # Kalman filters, particle filters
├── static_estimation/       # ML, least squares estimation
├── assignment_algorithms/   # 2D and multi-dimensional assignment
├── clustering/              # Mixture reduction, clustering
├── performance_evaluation/  # OSPA, track metrics
├── astronomical/            # Ephemerides, time systems
├── navigation/              # Geodetic, INS, GNSS
├── atmosphere/              # Atmosphere models, refraction
├── gravity/                 # Gravity models
├── magnetism/               # Magnetic field models
├── terrain/                 # Terrain elevation models
└── misc/                    # Utilities, visualization

Documentation

Comparison with Original MATLAB Library

This library aims to provide equivalent functionality to the original MATLAB library with Pythonic APIs:

MATLAB Python
Cart2Sphere(cartPoints) cart2sphere(cart_points)
FPolyKal(T, xDim, order) poly_kalman_F(dt, dim, order)
KalmanUpdate(...) KalmanFilter.update(...)

Key differences:

  • Function names use snake_case instead of PascalCase
  • Arrays are NumPy arrays (row-major) vs MATLAB matrices (column-major)
  • 0-based indexing vs 1-based indexing
  • Object-oriented APIs where appropriate

Testing

# Run all tests
pytest

# Run with coverage
pytest --cov=tracker_component_library

# Run only fast tests
pytest -m "not slow"

# Run tests validated against MATLAB
pytest -m matlab_validated

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Development Setup

git clone https://github.com/your-org/tracker-component-library-python.git
cd tracker-component-library-python
pip install -e ".[dev]"
pre-commit install

Running Quality Checks

# Format code
black .

# Lint
ruff check .

# Type check
mypy tracker_component_library

# Run all checks
pre-commit run --all-files

Citation

If you use this library in your research, please cite the original MATLAB library:

@article{crouse2017tracker,
  title={The Tracker Component Library: Free Routines for Rapid Prototyping},
  author={Crouse, David F.},
  journal={IEEE Aerospace and Electronic Systems Magazine},
  volume={32},
  number={5},
  pages={18--27},
  year={2017},
  publisher={IEEE}
}

License

This project is in the public domain, following the original MATLAB library's license. See LICENSE for details.

Acknowledgments

  • Original MATLAB library by David F. Crouse at the U.S. Naval Research Laboratory
  • This port follows the Federal Source Code Policy (OMB M-16-21)

Related Projects

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nrl_tracker-0.1.0.tar.gz (122.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

nrl_tracker-0.1.0-py3-none-any.whl (141.7 kB view details)

Uploaded Python 3

File details

Details for the file nrl_tracker-0.1.0.tar.gz.

File metadata

  • Download URL: nrl_tracker-0.1.0.tar.gz
  • Upload date:
  • Size: 122.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for nrl_tracker-0.1.0.tar.gz
Algorithm Hash digest
SHA256 76c5d9f57007aa48b54e458260141e4f75fd7502ca1e96c37586fd84aa019fe2
MD5 fafdad877d1cf1d7b02a9fe67535287d
BLAKE2b-256 b1eeac995f354f645fd13447a25d789c27304b6dbcc8bb071025d20a83726ac4

See more details on using hashes here.

File details

Details for the file nrl_tracker-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nrl_tracker-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 141.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for nrl_tracker-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6892a3a520be39f92180a8277fc61b11726ed0102a901d2e73ea538962e4cafe
MD5 49cbd34c109dea207935b3c837f894d6
BLAKE2b-256 ef66ea6660f254453781e777db77bad5096a49019642ab608a5ae9bfd806801c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page