Skip to content

Latest commit

 

History

9 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

Recursive Estimation Tracker

Public portfolio version of a recursive-estimation course project.
The goal was to estimate a hidden nonlinear motion state from noisy position-related sensor measurements over time.

The estimator tracks a 9-dimensional state:

[x, y, z, psi, theta, p, r_psi, r_theta, a]

where the state contains 3D position, orientation, forward speed, angular rates, and acceleration.

This repository is intentionally kept compact and public-safe. It includes my estimator implementation and generated result visualizations, while excluding the original course framework, simulator, Docker setup, constants file, PDFs, and assignment-specific files.

Why This Matters

Recursive state estimation is a core component of autonomous systems. In robotics, the full system state is often not directly measurable; it must be inferred from noisy, partial, delayed, or unreliable sensor observations.

This project demonstrates how a model-based estimator can combine:

  • a nonlinear motion model,
  • noisy measurements,
  • uncertainty propagation,
  • missing-measurement handling,
  • outlier robustness,
  • and trajectory/state reconstruction.

What I Implemented

The main implementation is in:

tracking_filters.py

It contains two estimator variants:

GaussianTrackingEKF

A standard Extended Kalman Filter for the Gaussian-noise case.

Implemented components include:

  • nonlinear state prediction,
  • transition Jacobian,
  • covariance propagation,
  • Kalman gain computation,
  • measurement update,
  • angle normalization,
  • and compact covariance update.

RobustNonGaussianTrackingFilter

A more engineering-driven recursive estimator for non-Gaussian and unreliable measurements.

Additional robustness mechanisms include:

  • missing-measurement handling for sensor dropouts,
  • angle wrapping for orientation states,
  • physical clamping for depth/speed-like states,
  • stronger weighting of informative position measurements,
  • and outlier-aware sonar weighting.

I also compared the Kalman-style robust estimator against a particle-filter prototype. The particle filter was conceptually attractive for non-Gaussian noise, but in this problem it was slower and less accurate because the state is high-dimensional and several states are only indirectly observed.

Skills Demonstrated

  • Nonlinear recursive state estimation
  • Extended Kalman filtering
  • Robust filtering under non-Gaussian noise and outliers
  • Numerical implementation in Python/NumPy
  • Sensor dropout handling
  • State normalization and angle wrapping
  • Simulation-based evaluation
  • Trajectory and state visualization

Visualizations

3D Trajectory Reconstruction

3D trajectory

Gaussian EKF Estimate

Gaussian EKF estimate

Robust Non-Gaussian Estimate

Robust non-Gaussian estimate

Repository Structure

.
├── README.md
├── tracking_filters.py
└── visuals/
    ├── plot_3d.png
    ├── plot_ekf.png
    └── plot_nge.png

What Is Not Included

The original course framework is not included. In particular, this repository does not contain:

  • the provided simulator,
  • the original constants file,
  • Docker setup,
  • assignment statements,
  • grading scripts,
  • or other course-provided infrastructure.

For that reason, this repository is meant as a portfolio/review artifact rather than a fully standalone runnable package.

Notes

The implementation is intentionally compact and numerical rather than framework-heavy. Most of the work is in the modeling choices, Jacobian, uncertainty propagation, noise tuning, and robustness decisions.

About

EKF and robust recursive estimator for nonlinear 3D tracking from noisy measurements.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages