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.
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.
The main implementation is in:
tracking_filters.py
It contains two estimator variants:
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.
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.
- 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
.
├── README.md
├── tracking_filters.py
└── visuals/
├── plot_3d.png
├── plot_ekf.png
└── plot_nge.png
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.
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.