v1.15.0

Target Tracking
Made Pythonic

A comprehensive Python port of the U.S. Naval Research Laboratory's Tracker Component Library. From Kalman filters to orbital mechanics — everything you need for state estimation and tracking.

pip install nrl-tracker
1,421
Functions Implemented
3,122
Test Cases
183
Python Modules
100%
MATLAB Parity

Comprehensive Tracking Toolkit

From basic Kalman filtering to advanced multi-target tracking, pyTCL provides production-ready implementations.

📡

Dynamic Estimation

KF, EKF, UKF, CKF, H-infinity, square-root variants, particle filters, IMM estimator, and smoothing algorithms.

🎯

Data Association

GNN, JPDA, MHT, Hungarian algorithm, auction algorithms, and multi-dimensional assignment.

🌍

Coordinate Systems

Cartesian, spherical, geodetic, ECEF, ENU, NED conversions with full Jacobian support.

🛰️

Orbital Mechanics

SGP4/SDP4 propagation, TLE parsing, Kepler, Lambert problem, GCRF/ITRF/TEME/TOD/MOD frames.

🧭

INS/GNSS Navigation

Strapdown mechanization, coning/sculling corrections, loosely and tightly-coupled integration.

🌐

Geophysical Models

Gravity (EGM2008), magnetism (WMM, IGRF), atmosphere, terrain analysis, and tidal effects.

GPU Acceleration

Dual-backend support for NVIDIA CUDA (CuPy) and Apple Silicon (MLX). 5-15x speedup on batch filtering operations.

Pythonic & Intuitive

Clean APIs that feel natural to Python developers. NumPy arrays, type hints, and comprehensive docstrings throughout.


The library follows consistent naming conventions — MATLAB's Cart2Sphere becomes cart2sphere.

import numpy as np
from pytcl.dynamic_estimation import kf_predict, kf_update
from pytcl.dynamic_models import f_constant_velocity, q_constant_velocity

# Initialize state [x, vx, y, vy]
x = np.array([0.0, 1.0, 0.0, 0.5])
P = np.eye(4) * 0.1

# Motion model
F = f_constant_velocity(T=1.0, num_dims=2)
Q = q_constant_velocity(T=1.0, sigma_a=0.1)

# Predict step
pred = kf_predict(x, P, F, Q)

# Update with measurement
H = np.array([[1, 0, 0, 0], [0, 0, 1, 0]])
z = np.array([1.1, 0.6])
upd = kf_update(pred.x, pred.P, z, H, R)

Modular Architecture

Organized into logical modules for easy discovery and minimal dependencies.

dynamic_estimation
Kalman filters, particle filters, IMM
dynamic_models
CV, CA, Singer, coordinated turn
assignment_algorithms
Hungarian, JPDA, MHT, gating
coordinate_systems
Spherical, geodetic, rotations
astronomical
Orbits, Lambert, reference frames
navigation
INS, GNSS, geodesy
gravity
EGM96/2008, spherical harmonics
magnetism
WMM, IGRF, EMM models
terrain
DEM, visibility, viewshed
signal_processing
Filters, CFAR, matched filter
transforms
FFT, STFT, wavelets
clustering
K-means, DBSCAN, hierarchical
static_estimation
Least squares, MLE, robust
containers
K-D tree, Ball tree, R-tree
mathematical_functions
Special functions, statistics
performance_evaluation
OSPA, NEES, track metrics
gpu
CuPy, MLX, batch Kalman

Ready to Track?

Start building production-grade tracking systems with pyTCL. Comprehensive docs, examples, and community support available.

Read the Docs Star on GitHub