This repository implements a few tools for proof-of-concept exploration. The high-level problem is to estimate the state of a dynamical system
This definition is in fact more general than this (it appeals to a more differential geometric viewpoint of the observability problem), but for linear systems it reduces to the standard notions of observability based on the observability Gramian/matrix.
The existence of the injective map
This repository implements a generic nonlinear system python class ContinuousTimeSystem
that uses the scipy.integrate.solve_ivp
function to numerically integrate the nonlinear differential equations above.
The repository also contains a python class PolyEstimator
for solving the above problem by fitting finite windows of output function evaluations with a polynomial of degree
The main theoretical contribution is the ability to compute an error bound for this polynomial-based filter in an online fashion. Typical bounds for observer error are of the input-to-error-state variety, where the observer will (asymptotically) converge to the true state up to some neighborhood, the size of which must be determined offline by (for instance) bounding the magnitude of the expected noise. In this approach, however, even if the signal sees less noise than this quantity for some time, the convergence guarantee is inflated for all time. A related notion explored in the past is Quasi-ISS or input-to-state-dynamically-stable (ISDS) observers (see, for example here, here, or here. Even these observers, however, need an estimate of the experienced disturbance/noise to function.
Our theory shows that the polynomial fitting residuals (the quantities
In a single picture, the error bounds we get look more like this, for a basic bicycle/Ackerman steering model:
car_test.mp4
Here we are estimating the vehicle's position (
Some initial testing is in the testing.py
, polyfit_testing.py
, bound_testing.py
and ackerman_testing.py
files.