Significant expansion to Kalman filter description.
This commit is contained in:
1 parent
a49a1350ec
commit
4f344d4e11
3 files changed
+776
-170
No files matched your search
+7
-7
@@ -13,27 +13,27 @@ import numpy.random as random
|
||||
class KalmanFilter:
|
||||
|
||||
def __init__(self, dim):
|
||||
self.x = 0 # estimate
|
||||
""" Create a Kalman filter of dimension 'dim'"""
|
||||
|
||||
self.x = 0 # state
|
||||
self.P = np.matrix(np.eye(dim)) # uncertainty covariance
|
||||
self.Q = np.matrix(np.eye(dim)) # process uncertainty
|
||||
self.u = np.matrix(np.zeros((dim,1))) # motion vector
|
||||
self.B = 0
|
||||
self.F = 0 # state transition matrix
|
||||
self.H = 0 # Measurement function (maps state to measurements)
|
||||
self.R = np.matrix(np.eye(1)) # state uncertainty
|
||||
self.I = np.matrix(np.eye(dim))
|
||||
|
||||
|
||||
def measure(self, Z, R=None):
|
||||
def update(self, Z):
|
||||
"""
|
||||
Add a new measurement with an optional state uncertainty (R).
|
||||
The state uncertainty does not alter the class's state uncertainty,
|
||||
it is used only for this call.
|
||||
Add a new measurement to the kalman filter.
|
||||
"""
|
||||
if R is None: R = self.R
|
||||
|
||||
# measurement update
|
||||
y = Z - (self.H * self.x) # error (residual) between measurement and prediction
|
||||
S = (self.H * self.P * self.H.T) + R # project system uncertainty into measurment space + measurement noise(R)
|
||||
S = (self.H * self.P * self.H.T) + self.R # project system uncertainty into measurment space + measurement noise(R)
|
||||
|
||||
|
||||
K = self.P * self.H.T * linalg.inv(S) # map system uncertainty into kalman gain
|
||||
|
||||
File diff suppressed because it is too large.
Load diff
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:6f62f259e5289b9332939632d63f121b9911a52f22ec7c03038d30998a233885"
|
||||
"signature": "sha256:703bbb2a324a363413963c59ffc0352bd2a22c86dd5a5fab42333dd36436566b"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -12,13 +12,293 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"With small exceptions the only mathematics that we truly know how to do is linear algebra, solving\n",
|
||||
"$$ A\\mathbf{x}=\\mathbf{b}$$\n",
|
||||
"<center><h1>Kalman and Bayesian Filters in Python</h1></center>\n",
|
||||
"<center><a href =\"http://nbviewer.ipython.org/urls/raw.github.com/rlabbe/Kalman-and-Bayesian-Filters-in-Python/master/toc.ipynb\">Table of Contents</a></center>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"#format the book\n",
|
||||
"%matplotlib inline\n",
|
||||
"from __future__ import division, print_function\n",
|
||||
"import matplotlib.pyplot as plt\n",
|
||||
"import book_format\n",
|
||||
"book_format.load_style()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"html": [
|
||||
"<style>\n",
|
||||
" div.cell{\n",
|
||||
" width: 850px;\n",
|
||||
" margin-left: 0% !important;\n",
|
||||
" margin-right: auto;\n",
|
||||
" }\n",
|
||||
" h1 {\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
"\t}\n",
|
||||
"\t\n",
|
||||
" div.input_area {\n",
|
||||
" background: #F6F6F9;\n",
|
||||
" border: 1px solid #586e75;\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" .text_cell_render h1 {\n",
|
||||
" font-weight: 200;\n",
|
||||
" font-size: 36pt;\n",
|
||||
" line-height: 100%;\n",
|
||||
" color:#c76c0c;\n",
|
||||
" margin-bottom: 0.5em;\n",
|
||||
" margin-top: 1em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: wrap;\n",
|
||||
" } \n",
|
||||
" h2 {\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" text-indent:1em;\n",
|
||||
" }\n",
|
||||
" .text_cell_render h2 {\n",
|
||||
" font-weight: 200;\n",
|
||||
" font-size: 20pt;\n",
|
||||
" font-style: italic;\n",
|
||||
" line-height: 100%;\n",
|
||||
" color:#c76c0c;\n",
|
||||
" margin-bottom: 1.5em;\n",
|
||||
" margin-top: 0.5em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" } \n",
|
||||
" h3 {\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" }\n",
|
||||
" .text_cell_render h3 {\n",
|
||||
" font-weight: 300;\n",
|
||||
" font-size: 18pt;\n",
|
||||
" line-height: 100%;\n",
|
||||
" color:#d77c0c;\n",
|
||||
" margin-bottom: 0.5em;\n",
|
||||
" margin-top: 2em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" }\n",
|
||||
" h4 {\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" }\n",
|
||||
" .text_cell_render h4 {\n",
|
||||
" font-weight: 300;\n",
|
||||
" font-size: 16pt;\n",
|
||||
" color:#d77c0c;\n",
|
||||
" margin-bottom: 0.5em;\n",
|
||||
" margin-top: 0.5em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" }\n",
|
||||
" h5 {\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" }\n",
|
||||
" .text_cell_render h5 {\n",
|
||||
" font-weight: 300;\n",
|
||||
" font-style: normal;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" font-size: 16pt;\n",
|
||||
" margin-bottom: 0em;\n",
|
||||
" margin-top: 1.5em;\n",
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" }\n",
|
||||
" div.text_cell_render{\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" line-height: 135%;\n",
|
||||
" font-size: 125%;\n",
|
||||
" width:750px;\n",
|
||||
" margin-left:auto;\n",
|
||||
" margin-right:auto;\n",
|
||||
" text-align:justify;\n",
|
||||
" text-justify:inter-word;\n",
|
||||
" }\n",
|
||||
" div.output_subarea.output_text.output_pyout {\n",
|
||||
" overflow-x: auto;\n",
|
||||
" overflow-y: scroll;\n",
|
||||
" max-height: 300px;\n",
|
||||
" }\n",
|
||||
" div.output_subarea.output_stream.output_stdout.output_text {\n",
|
||||
" overflow-x: auto;\n",
|
||||
" overflow-y: scroll;\n",
|
||||
" max-height: 300px;\n",
|
||||
" }\n",
|
||||
" code{\n",
|
||||
" font-size: 78%;\n",
|
||||
" }\n",
|
||||
" .rendered_html code{\n",
|
||||
" background-color: transparent;\n",
|
||||
" }\n",
|
||||
" ul{\n",
|
||||
" margin: 2em;\n",
|
||||
" }\n",
|
||||
" ul li{\n",
|
||||
" padding-left: 0.5em; \n",
|
||||
" margin-bottom: 0.5em; \n",
|
||||
" margin-top: 0.5em; \n",
|
||||
" }\n",
|
||||
" ul li li{\n",
|
||||
" padding-left: 0.2em; \n",
|
||||
" margin-bottom: 0.2em; \n",
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" ol{\n",
|
||||
" margin: 2em;\n",
|
||||
" }\n",
|
||||
" ol li{\n",
|
||||
" padding-left: 0.5em; \n",
|
||||
" margin-bottom: 0.5em; \n",
|
||||
" margin-top: 0.5em; \n",
|
||||
" }\n",
|
||||
" ul li{\n",
|
||||
" padding-left: 0.5em; \n",
|
||||
" margin-bottom: 0.5em; \n",
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" .rendered_html :link {\n",
|
||||
" text-decoration: underline; \n",
|
||||
" }\n",
|
||||
" .rendered_html :hover {\n",
|
||||
" text-decoration: none; \n",
|
||||
" }\n",
|
||||
" .rendered_html :visited {\n",
|
||||
" text-decoration: none;\n",
|
||||
" }\n",
|
||||
" .rendered_html :focus {\n",
|
||||
" text-decoration: none;\n",
|
||||
" }\n",
|
||||
" .rendered_html :active {\n",
|
||||
" text-decoration: none;\n",
|
||||
" }\n",
|
||||
" .warning{\n",
|
||||
" color: rgb( 240, 20, 20 )\n",
|
||||
" } \n",
|
||||
" hr {\n",
|
||||
" color: #f3f3f3;\n",
|
||||
" background-color: #f3f3f3;\n",
|
||||
" height: 1px;\n",
|
||||
" }\n",
|
||||
" blockquote{\n",
|
||||
" display:block;\n",
|
||||
" background: #fcfcfc;\n",
|
||||
" border-left: 5px solid #c76c0c;\n",
|
||||
" font-family: 'Open sans',verdana,arial,sans-serif;\n",
|
||||
" width:680px;\n",
|
||||
" padding: 10px 10px 10px 10px;\n",
|
||||
" text-align:justify;\n",
|
||||
" text-justify:inter-word;\n",
|
||||
" }\n",
|
||||
" blockquote p {\n",
|
||||
" margin-bottom: 0;\n",
|
||||
" line-height: 125%;\n",
|
||||
" font-size: 100%;\n",
|
||||
" }\n",
|
||||
"</style>\n",
|
||||
"<script>\n",
|
||||
" MathJax.Hub.Config({\n",
|
||||
" TeX: {\n",
|
||||
" extensions: [\"AMSmath.js\"]\n",
|
||||
" },\n",
|
||||
" tex2jax: {\n",
|
||||
" inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n",
|
||||
" displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ]\n",
|
||||
" },\n",
|
||||
" displayAlign: 'center', // Change this to 'center' to center equations.\n",
|
||||
" \"HTML-CSS\": {\n",
|
||||
" styles: {'.MathJax_Display': {\"margin\": 4}}\n",
|
||||
" }\n",
|
||||
" });\n",
|
||||
"</script>\n"
|
||||
],
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"<IPython.core.display.HTML at 0x1b6d990>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# Unscented Kalman Filters"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"In the previous chapter we developed the Extended Kalman Filter to allow us to use the Kalman filter with nonlinear problems. It is by far the most commonly used Kalman filter. However, it requires that you be able to analytically derive the Jacobian blah blah limp prose.\n",
|
||||
"\n",
|
||||
"All the nonlinear forms that you have dealt with have been very special. We know how to integrate a polynomial, for example, and so we are able to find the closed form equation for distance given velocity and time:\n",
|
||||
"$$\\int{(vt+v_0)}\\,dt = \\frac{a}{2}t^2+v_0t+d_0$$\n",
|
||||
"\n",
|
||||
"But recall when you leaned that. You learned rules for integrating sums, a different rule for integrating variables raised to a constant power, and so on. And eventually you were handed large tables of integrals. Over the centuries different mathematicians discovered how to integrate differernt equations, and our knowledge of how to integrate was slowly built up. But if I was to give you an arbitrary equation - truly arbitrary, not a polynomial "
|
||||
"However, for many problems finding the Jacobian is either very difficult or impossible. Futhermore, being an approximation, the EKF can diverge. For all these reasons there is a need for a different way to approximate the Gaussian being passed through a nonlinear transfer function. Recall the result of this transform:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from nonlinear_plots import plot_transfer_func\n",
|
||||
"from numpy.random import normal\n",
|
||||
"import numpy as np\n",
|
||||
"\n",
|
||||
"data = normal(loc=0.0, scale=1, size=5000000)\n",
|
||||
"\n",
|
||||
"def g(x):\n",
|
||||
" return (np.cos(4*(x/2+0.7)))*np.sin(0.3*x)-1.6*x\n",
|
||||
"\n",
|
||||
"plot_transfer_func (data, g, lims=(-4,4), num_bins=300)"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3160910>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"For the Kalman filter predict-update cycle to work, we need an approximation of the mean and variance of the Gaussian being passed through the transfer function. The EKF solves this by performing a Taylor Series expansion...\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
|
||||
Reference in new issue
Block a user