parent
871d5b3c99
commit
8df126cd65
1 changed files with 52 additions and 0 deletions
@ -0,0 +1,52 @@ |
||||
# Kalman filter library |
||||
|
||||
## Introduction |
||||
The kalman filter framework described here is an incredibly powerful tool for any optimization problem, |
||||
but particularly for visual odometry, sensor fusion localization or SLAM. It is designed to provide the very |
||||
accurate results, work online or offline, be fairly computationally efficient, be easy to design filters with in |
||||
python. |
||||
|
||||
## Feature walkthrough |
||||
|
||||
### Extended Kalman Filter with symbolic Jacobian computation |
||||
Most dynamic systems can be described as a Hidden Markov Process. To estimate the state of such a system with noisy |
||||
measurements one can use a Recursive Bayesian estimator. For a linear Markov Process a regular linear Kalman filter is optimal. |
||||
Unfortunately, a lot of systems are non-linear. Extended Kalman Filters can model systems by linearizing the non-linear |
||||
system at every step, this provides a close to optimal estimator when the linearization is good enough. If the linearization |
||||
introduces too much noise, one can use an Iterated Extended Kalman Filter, Unscented Kalman Filter or a Particle Filter. For |
||||
most applications those estimators are overkill and introduce too much complexity and require a lot of additional compute. |
||||
|
||||
Conventionally Extended Kalman Filters are implemented by writing the system's dynamic equations and then manually symbolically |
||||
calculating the Jacobians for the linearization. For complex systems this is time consuming and very prone to calculation errors. |
||||
This library symbolically computes the Jacobians using sympy to remove the possiblity of introducing calculation errors. |
||||
|
||||
### Error State Kalman Filter |
||||
3D localization algorithms ussually also require estimating orientation of an object in 3D. Orientation is generally represented |
||||
with euler angles or quaternions. |
||||
|
||||
Euler angles have several problems, there are mulitple ways to represent the same orientation, |
||||
gimbal lock can cause the loss of a degree of freedom and lastly their behaviour is very non-linear when errors are large. |
||||
Quaternions with one strictly positive dimension don't suffer from these issues, but have another set of problems. |
||||
Quaternions need to be normalized otherwise they will grow unbounded, this is cannot be cleanly enforced in a kalman filter. |
||||
Most importantly though a quaternion has 4 dimensions, but only represents 3 DOF. It is problematic to describe the error-state, |
||||
with redundant dimensions. |
||||
|
||||
The solution is to have a compromise, use the quaternion to represent the system's state and use euler angles to describe |
||||
the error-state. This library supports and defining an arbitrary error-state that is different from the state. |
||||
|
||||
### Multi-State Constraint Kalman Filter |
||||
paper: |
||||
|
||||
###Rauch–Tung–Striebel smoothing |
||||
When doing offline estimation with a kalman filter there can be an initialzition period where states are badly estimated. |
||||
Global estimators don't suffer from this, to make our kalman filter competitive with global optimizers when can run the filter |
||||
backwards using an RTS smoother. Those combined with potentially multiple forward and backwards passes of the data should make |
||||
performance very close to global optimization. |
||||
|
||||
###Mahalanobis distance outlier rejector |
||||
A lot of measurements do not come from a Gaussian distribution and as such have outliers that do not fit the statistical model |
||||
of the Kalman filter. This can cause a lot of performance issues if not dealt with. This library allows the use of a mahalanobis |
||||
distance statistical test on the incoming measurements to deal with this. Note that good initialization is critical to prevent |
||||
good measurements from being rejected. |
||||
|
||||
|
Loading…
Reference in new issue