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