From 302a12e927ed3c61bb7c4aa52bc60145647ac635 Mon Sep 17 00:00:00 2001 From: Roger Labbe Date: Sun, 6 Jul 2014 01:28:17 -0700 Subject: [PATCH] Got wind for baseball working. But, don't think I want to include it. Going to remove wind in the next check in. --- Designing_Kalman_Filters.ipynb | 4556 +++++++++++++++++--------------- 1 file changed, 2421 insertions(+), 2135 deletions(-) diff --git a/Designing_Kalman_Filters.ipynb b/Designing_Kalman_Filters.ipynb index 685664c..7b08a3a 100644 --- a/Designing_Kalman_Filters.ipynb +++ b/Designing_Kalman_Filters.ipynb @@ -1,2136 +1,2422 @@ -{ - "metadata": { - "name": "", - "signature": "sha256:5ba808975bc75525256c18351b0bb8c88908c9c502698b658b254d0d151f24e6" - }, - "nbformat": 3, - "nbformat_minor": 0, - "worksheets": [ - { - "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Designing Kalman Filters" - ] - }, - { - "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()\n", - "\n", - "%install_ext secnum.py\n", - "%load_ext secnum\n", - "%secnum" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "Installed secnum.py. To use it, type:\n", - " %load_ext secnum\n", - "The secnum extension is already loaded. To reload it, use:\n", - " %reload_ext secnum\n" - ] - }, - { - "javascript": [ - "console.log(\"Section numbering...\");\n", - "\n", - "function number_sections(threshold) {\n", - "\n", - " var h1_number = 0;\n", - " var h2_number = 0;\n", - "\n", - " if (threshold === undefined) {\n", - " threshold = 2; // does nothing so far\n", - " }\n", - "\n", - " var cells = IPython.notebook.get_cells();\n", - " \n", - " for (var i=0; i < cells.length; i++) {\n", - "\n", - " var cell = cells[i];\n", - " if (cell.cell_type !== 'heading') continue;\n", - " \n", - " var level = cell.level;\n", - " if (level > threshold) continue;\n", - " \n", - " if (level === 1) {\n", - " \n", - " h1_number ++;\n", - " var h1_element = cell.element.find('h1');\n", - " var h1_html = h1_element.html();\n", - " \n", - " console.log(\"h1_html: \" + h1_html);\n", - "\n", - " var patt = /^[0-9]+\\.\\s(.*)/; // section number at start of string\n", - " var title = h1_html.match(patt); // just the title\n", - "\n", - " if (title != null) { \n", - " h1_element.html(h1_number + \". \" + title[1]);\n", - " }\n", - " else {\n", - " h1_element.html(h1_number + \". \" + h1_html);\n", - " }\n", - " \n", - " h2_number = 0;\n", - " \n", - " }\n", - " \n", - " if (level === 2) {\n", - " \n", - " h2_number ++;\n", - " \n", - " var h2_element = cell.element.find('h2');\n", - " var h2_html = h2_element.html();\n", - "\n", - " console.log(\"h2_html: \" + h2_html);\n", - "\n", - " \n", - " var patt = /^[0-9]+\\.[0-9]+\\.\\s/;\n", - " var result = h2_html.match(patt);\n", - "\n", - " if (result != null) {\n", - " h2_html = h2_html.replace(result, \"\");\n", - " }\n", - "\n", - " h2_element.html(h1_number + \".\" + h2_number + \". \" + h2_html);\n", - " \n", - " }\n", - " \n", - " }\n", - " \n", - "}\n", - "\n", - "number_sections();\n", - "\n", - "// $([IPython.evnts]).on('create.Cell', number_sections);\n", - "\n", - "$([IPython.events]).on('selected_cell_type_changed.Notebook', number_sections);\n", - "\n" - ], - "metadata": {}, - "output_type": "display_data" - } - ], - "prompt_number": 2 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Introduction" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this chapter we will work through the design of several Kalman filters to gain experience and confidence with the various equations and techniques. \n", - "\n", - "For our first multidimensional problem we will track a robot in a 2D space, such as a field. We will start with a simple noisy sensor that outputs noisy $(x,y)$ coordinates which we will need to filter to generate a 2D track. Once we have mastered this concept, we will extend the problem significantly with more sensors and then adding control inputs. \n", - "blah blah" - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Tracking a Robot" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This first attempt at tracking a robot will closely resemble the 1-D dog tracking problem of previous chapters. This will allow us to 'get our feet wet' with Kalman filtering. So, instead of a sensor that outputs position in a hallway, we now have a sensor that supplies a noisy measurement of position in a 2-D space, such as an open field. That is, at each time $T$ it will provide an $(x,y)$ coordinate pair specifying the measurement of the sensor's position in the field.\n", - "\n", - "Implemention of code to interact with real sensors is beyond the scope of this book, so as before we will program simple simuations in Python to represent the sensors. We will develop several of these sensors as we go, each with more complications, so as I program them I will just append a number to the function name. $\\verb,pos_sensor1 (),$ is the first sensor we write, and so on. \n", - "\n", - "So let's start with a very simple sensor, one that travels in a straight line. It takes as input the last position, velocity, and how much noise we want, and returns the new position. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import numpy.random as random\n", - "import copy\n", - "class PosSensor1(object):\n", - " def __init__(self, pos = [0,0], vel = (0,0), noise_scale = 1.):\n", - " self.vel = vel\n", - " self.noise_scale = noise_scale\n", - " self.pos = copy.deepcopy(pos)\n", - " \n", - " def read(self):\n", - " self.pos[0] += self.vel[0]\n", - " self.pos[1] += self.vel[1]\n", - " \n", - " return [self.pos[0] + random.randn() * self.noise_scale,\n", - " self.pos[1] + random.randn() * self.noise_scale]" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 3 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A quick test to verify that it works as we expect." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "pos = [4,3]\n", - "s = PosSensor1 (pos, (2,1), 1)\n", - "\n", - "for i in range (50):\n", - " pos = s.read() \n", - " plt.scatter(pos[0], pos[1])\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n4Z7+rDUAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 4 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "That looks correct. The slope is 1/2, as we would expect with a velocity of (2,1), and the data seems to start at near (6,4).\n", - "\n", - "##### Step 1: Choose the State Variables\n", - "\n", - "As always, the first step is to choose our state variables. We are tracking in two dimensions and have a sensor that gives us a reading in each of those two dimensions, so we know that we have the two *observed variables* $x$ and $y$. If we created our Kalman filter using only those two variables the performance would not be very good because we would be ignoring the information velocity can provide to us. We will want to incorporate velocity into our equations as well. I will represent this as\n", - "\n", - "$$\\mathbf{x} = \n", - "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$\n", - "\n", - "There is nothing special about this organization. I could have listed the (xy) coordinates first followed by the velocities, and/or I could done this as a row matrix instead of a column matrix. For example, I could have chosen:\n", - "\n", - "$$\\mathbf{x} = \n", - "\\begin{bmatrix}x&y&v_x&v_y\\end{bmatrix}$$\n", - "\n", - "All that matters is that the rest of my derivation uses this same scheme. However, it is typical to use column matrices for state variables, and I prefer it, so that is what we will use. \n", - "\n", - "It might be a good time to pause and address how you identify the unobserved variables. This particular example is somewhat obvious because we already worked through the 1D case in the previous chapters. Would it be so obvious if we were filtering market data, population data from a biology experiement, and so on? Probably not. There is no easy answer to this question. The first thing to ask yourself is what is the interpretation of the first and second derivatives of the data from the sensors. We do that because obtaining the first and second derivatives is mathematically trivial if you are reading from the sensors using a fixed time step. The first derivative is just the difference between two successive readings. In our tracking case the first derivative has an obvious physical interpretation: the difference between two successive positions is velocity. \n", - "\n", - "Beyond this you can start looking at how you might combine the data from two or more different sensors to produce more information. This opens up the field of *sensor fusion*, and we will be covering examples of this in later sections. For now, recognize that choosing the appropriate state variables is paramount to getting the best possible performance from your filter. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### **Step 2:** Design State Transition Function\n", - "\n", - "Our next step is to design the state transistion function. Recall that the state transistion function is implemented as a matrix $\\mathbf{F}$ that we multipy with the previous state of our system to get the next state, like so. \n", - "\n", - "$$\\mathbf{x}' = \\mathbf{Fx}$$\n", - "\n", - "I will not belabor this as it is very similar to the 1-D case we did in the previous chapter. Our state equations for position and velocity would be:\n", - "\n", - "$$\n", - "\\begin{aligned}\n", - "x' &= (1*x) + (\\Delta t * v_x) + (0*y) + (0 * v_y) \\\\\n", - "v_x &= (0*x) + (1*v_x) + (0*y) + (0 * v_y) \\\\\n", - "y' &= (0*x) + (0* v_x) + (1*y) + (\\Delta t * v_y) \\\\\n", - "v_y &= (0*x) + (0*v_x) + (0*y) + (1 * v_y)\n", - "\\end{aligned}\n", - "$$\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Laying it out that way shows us both the values and row-column organization required for $\\small\\mathbf{F}$. In linear algebra, we would write this as:\n", - "\n", - "$$\n", - "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}' = \\begin{bmatrix}1& \\Delta t& 0& 0\\\\0& 1& 0& 0\\\\0& 0& 1& \\Delta t\\\\ 0& 0& 0& 1\\end{bmatrix}\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$\n", - "\n", - "So, let's do this in Python. It is very simple:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from KalmanFilter import KalmanFilter\n", - "import numpy as np\n", - "\n", - "f1 = KalmanFilter(dim=4)\n", - "dt = 1. # time step\n", - "\n", - "f1.F = np.mat ([[1, dt, 0, 0],\n", - " [0, 1, 0, 0],\n", - " [0, 0, 1, dt],\n", - " [0, 0, 0, 1]])" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 5 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### **Step 3**: Design the Motion Function\n", - "We have no control inputs to our robot (yet!), so this step is trivial - set the motion transition function $\\small\\mathbf{B}$ to zero. This is done for us by the class when it is created so we can skip this step, but for completeness we will be explicit." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1.B = 0." - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 6 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "\n", - "##### **Step 4**: Design the Measurement Function\n", - "The measurement function defines how we go from the state variables to the measurements using the equation $\\mathbf{z} = \\mathbf{Hx}$. At first this is a bit counterintuitive, after all, we use the Kalman filter to go from measurements to state. But the update step needs to compute the residual between the current measurement and the measurement represented by the prediction step. Therefore $\\textbf{H}$ is multiplied by the state $\\textbf{x}$ to produce a measurement $\\textbf{z}$. \n", - "\n", - "In this case we have measurements for (x,y), so z must be of dimension $2\\times 1$. Our state variable is size $4\\times 1$. We can deduce the required size for $\\textbf{H}$ by recalling that multiplying a matrix of size $m\\times n$ by $n\\times p$ yields a matrix of size $m\\times p$. Thus,\n", - "\n", - "$$ \n", - "\\begin{aligned}\n", - "(2\\times 1) &= (a\\times b)(4 \\times 1) \\\\\n", - "&= (a\\times 4)(4\\times 1) \\\\\n", - "&= (2\\times 4)(4\\times 1)\n", - "\\end{aligned}$$\n", - "\n", - "So, $\\textbf{H}$ is of size $2\\times 4$.\n", - "\n", - "Filling in the values for $\\textbf{H}$ is easy in this case because the measurement is the position of the robot, which is the $x$ and $y$ variables of the state $\\textbf{x}$. Let's make this just slightly more interesting by deciding we want to change units. So we will assume that the measurements are returned in feet, and that we desire to work in meters. Converting from feet to meters is a simple as multiplying by 0.3048. However, we are converting from state (meters) to measurements (feet) so we need to divide by 0.3048. So\n", - "\n", - "$$\\mathbf{H} =\n", - "\\begin{bmatrix} \n", - "\\frac{1}{0.3048} & 0 & 0 & 0 \\\\\n", - "0 & 0 & \\frac{1}{0.3048} & 0\n", - "\\end{bmatrix}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "which corresponds to these linear equations\n", - "$$\n", - "\\begin{aligned}\n", - "z_x' &= (\\frac{x}{0.3048}) + (0* v_x) + (0*y) + (0 * v_y) \\\\\n", - "z_y' &= (0*x) + (0* v_x) + (\\frac{y}{0.3048}) + (0 * v_y) \\\\\n", - "\\end{aligned}\n", - "$$\n", - "\n", - "To be clear about my intentions here, this is a pretty simple problem, and we could have easily found the equations directly without going through the dimensional analysis that I did above. In fact, an earlier draft did just that. But it is useful to remember that the equations of the Kalman filter imply a specific dimensionality for all of the matrices, and when I start to get lost as to how to design something it is often extremely useful to look at the matrix dimensions. Not sure how to design $\\textbf{H}$? \n", - "Here is the Python that implements this:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", - " [0, 0, 1/0.3048, 0]])\n", - "print(f1.H)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[ 3.2808399 0. 0. 0. ]\n", - " [ 0. 0. 3.2808399 0. ]]\n" - ] - } - ], - "prompt_number": 7 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### **Step 5**: Design the Measurement Noise Matrix\n", - "\n", - "In this step we need to mathematically model the noise in our sensor. For now we will make the simple assumption that the $x$ and $y$ variables are independent Gaussian processes. That is, the noise in x is not in any way dependent on the noise in y, and the noise is normally distributed about the mean. For now let's set the variance for $x$ and $y$ to be 5 for each. They are independent, so there is no covariance, and our off diagonals will be 0. This gives us:\n", - "\n", - "$$\\mathbf{R} = \\begin{bmatrix}5&0\\\\0&5\\end{bmatrix}$$\n", - "\n", - "It is a $2{\\times}2$ matrix because we have 2 sensor inputs, and covariance matrices are always of size $n{\\times}n$ for $n$ variables. In Python we write:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1.R = np.mat([[5,0],\n", - " [0, 5]])\n", - "print (f1.R)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[5 0]\n", - " [0 5]]\n" - ] - } - ], - "prompt_number": 8 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### Step 6: Design the Process Noise Matrix\n", - "Finally, we design the process noise. We don't yet have a good way to model process noise, so for now we will assume there is a small amount of process noise, say 0.1 for each state variable. Later we will tackle this admittedly difficult topic in more detail. We have 4 state variables, so we need a $4{\\times}4$ covariance matrix:\n", - "\n", - "$$\\mathbf{Q} = \\begin{bmatrix}0.1&0&0&0\\\\0&0.1&0&0\\\\0&0&0.1&0\\\\0&0&0&0.1\\end{bmatrix}$$\n", - "\n", - "In Pyton I will use the numpy eye helper function to create an identity matrix for us, and multipy it by 0.1 to get the desired result." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1.Q = np.eye(4) * 0.1\n", - "print(f1.Q)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[ 0.1 0. 0. 0. ]\n", - " [ 0. 0.1 0. 0. ]\n", - " [ 0. 0. 0.1 0. ]\n", - " [ 0. 0. 0. 0.1]]\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "##### **Step 7**: Design Initial Conditions\n", - "\n", - "For our simple problem we will set the initial position at (0,0) with a velocity of (0,0). Since that is a pure guess, we will set the covariance matrix $\\small\\mathbf{P}$ to a large value.\n", - "$$ \\mathbf{x} = \\begin{bmatrix}0\\\\0\\\\0\\\\0\\end{bmatrix}\\\\\n", - "\\mathbf{P} = \\begin{bmatrix}500&0&0&0\\\\0&500&0&0\\\\0&0&500&0\\\\0&0&0&500\\end{bmatrix}$$\n", - "\n", - "In Python we implement that with" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1.x = np.mat([0,0,0,0]).T\n", - "f1.P = np.eye(4) * 500.\n", - "print(f1.x)\n", - "print()\n", - "print (f1.P)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[0]\n", - " [0]\n", - " [0]\n", - " [0]]\n", - "\n", - "[[ 500. 0. 0. 0.]\n", - " [ 0. 500. 0. 0.]\n", - " [ 0. 0. 500. 0.]\n", - " [ 0. 0. 0. 500.]]\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Implement the Filter Code" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Design is complete, now we just have to write the Python code to run our filter, and output the data in the format of our choice. To keep the code clear, let's just print a plot of the track. We will run the code for 30 iterations." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "f1 = KalmanFilter(dim=4)\n", - "dt = 1.0 # time step\n", - "\n", - "f1.F = np.mat ([[1, dt, 0, 0],\n", - " [0, 1, 0, 0],\n", - " [0, 0, 1, dt],\n", - " [0, 0, 0, 1]])\n", - "f1.B = 0.\n", - "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", - " [0, 0, 1/0.3048, 0]])\n", - "\n", - "f1.R = np.eye(2) * 5\n", - "f1.Q = np.eye(4) * .1\n", - "\n", - "f1.x = np.mat([0,0,0,0]).T\n", - "f1.P = np.eye(4) * 500.\n", - "\n", - "# initialize storage and other variables for the run\n", - "count = 30\n", - "xs, ys = [],[]\n", - "pxs, pys = [],[]\n", - "\n", - "s = PosSensor1 ([0,0], (2,1), 1.)\n", - "\n", - "for i in range(count):\n", - " pos = s.read()\n", - " z = np.mat([[pos[0]],[pos[1]]])\n", - "\n", - " f1.predict ()\n", - " f1.update (z)\n", - "\n", - " xs.append (f1.x[0,0])\n", - " ys.append (f1.x[2,0])\n", - " pxs.append (pos[0]*.3048)\n", - " pys.append(pos[1]*.3048)\n", - "\n", - "p1, = plt.plot (xs, ys, 'r--')\n", - "p2, = plt.plot (pxs, pys)\n", - "plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "I encourage you to play with this, setting $\\mathbf{Q}$ and $\\mathbf{R}$ to various values. However, we did a fair amount of that sort of thing in the last chapters, and we have a lot of material to cover, so I will move on to more complicated cases where we will also have a chance to experience changing these values.\n", - "\n", - "Now I will run the same Kalman filter with the same settings, but also plot the covariance ellipse for $x$ and $y$. First, the code without explanation, so we can see the output. I print the last covariance to see what it looks like. But before you scroll down to look at the results, what do you think it will look like? You have enough information to figure this out but this is still new to you, so don't be discouraged if you get it wrong." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import stats\n", - "\n", - "f1 = KalmanFilter(dim=4)\n", - "dt = 1.0 # time step\n", - "\n", - "f1.F = np.mat ([[1, dt, 0, 0],\n", - " [0, 1, 0, 0],\n", - " [0, 0, 1, dt],\n", - " [0, 0, 0, 1]])\n", - "f1.B = 0.\n", - "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", - " [0, 0, 1/0.3048, 0]])\n", - "\n", - "f1.R = np.eye(2) * 5\n", - "f1.Q = np.eye(4) * .1\n", - "\n", - "f1.x = np.mat([0,0,0,0]).T\n", - "f1.P = np.eye(4) * 500.\n", - "\n", - "# initialize storage and other variables for the run\n", - "count = 30\n", - "xs, ys = [],[]\n", - "pxs, pys = [],[]\n", - "\n", - "s = PosSensor1 ([0,0], (2,1), 1.)\n", - "\n", - "for i in range(count):\n", - " pos = s.read()\n", - " z = np.mat([[pos[0]],[pos[1]]])\n", - "\n", - " f1.predict ()\n", - " f1.update (z)\n", - "\n", - " xs.append (f1.x[0,0])\n", - " ys.append (f1.x[2,0])\n", - " pxs.append (pos[0]*.3048)\n", - " pys.append(pos[1]*.3048)\n", - "\n", - " # plot covariance of x and y\n", - " cov = np.mat([[f1.P[0,0], f1.P[2,0]], \n", - " [f1.P[0,2], f1.P[2,2]]])\n", - " \n", - " e = stats.sigma_ellipse (cov=cov, x=f1.x[0,0], y=f1.x[2,0])\n", - " stats.plot_sigma_ellipse(ellipse=e)\n", - " \n", - "p1, = plt.plot (xs, ys, 'r--')\n", - "p2, = plt.plot (pxs, pys)\n", - "plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", - "plt.show()\n", - "print(\"final P is:\")\n", - "print(f1.P)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "final P is:\n", - "[[ 0.30660483 0.12566239 0. 0. ]\n", - " [ 0.12566239 0.24399092 0. 0. ]\n", - " [ 0. 0. 0.30660483 0.12566239]\n", - " [ 0. 0. 0.12566239 0.24399092]]\n" - ] - } - ], - "prompt_number": 11 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Did you correctly predict what the covariance matrix and plots would look like? Perhaps you were expecting a tilted ellipse, as in the last chapters. If so, recall that in those chapters we were not plotting $x$ against $y$, but $x$ against $\\dot{x}$. $x$ *is correlated* to $\\dot{x}$, but $x$ is not correlated or dependent on $y$. Therefore our ellipses are not tilted. Furthermore, the noise for both $x$ and $y$ are modelled to have the same value, 5, in $\\mathbf{R}$. If we were to set R to, for example,\n", - "\n", - "$$\\mathbf{R} = \\begin{bmatrix}10&0\\\\0&5\\end{bmatrix}$$\n", - "\n", - "we would be telling the Kalman filter that there is more noise in $x$ than $y$, and our ellipses would be longer than they are tall.\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The final P tells us everything we need to know about the correlation beween the state variables. If we look at the diagonal alone we see the variance for each variable. In other words $\\mathbf{P}_{0,0}$ is the variance for x, $\\mathbf{P}_{1,1}$ is the variance for $\\dot{x}$, $\\mathbf{P}_{2,2}$ is the variance for y, and $\\mathbf{P}_{3,3}$ is the variance for $\\dot{y}$. We can extract the diagonal of a matrix using *numpy.diag()*." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print(np.diag(f1.P))" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[ 0.30660483 0.24399092 0.30660483 0.24399092]\n" - ] - } - ], - "prompt_number": 12 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The covariance matrix contains four $2{\\times}2$ matrices that you should be able to easily pick out. This is due to the correlation of $x$ to $\\dot{x}$, and of $y$ to $\\dot{y}$. The upper left hand side shows the covariance of $x$ to $\\dot{x}$. Let's extract and print, and plot it." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "c = f1.P[0:2,0:2]\n", - "print(c)\n", - "stats.plot_covariance_ellipse(c)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[ 0.30660483 0.12566239]\n", - " [ 0.12566239 0.24399092]]\n" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 13 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The covariance contains the data for $x$ and $\\dot{x}$ in the upper left because of how it is organized. Recall that entries $\\mathbf{P}_{i,j}$ and $\\mathbf{P}_{j,i}$ contain $p\\sigma_1\\sigma_2$.\n", - "\n", - "Finally, let's look at the lower left side of $\\mathbf{P}$, which is all 0s. Why 0s? Consider $\\mathbf{P}_{3,0}$. That stores the term $p\\sigma_3\\sigma_0$, which is the covariance between $\\dot{y}$ and $x$. These are independent, so the term will be 0. The rest of the terms are for similarly independent variables." - ] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Tracking a Ball" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we are prepared to start considering a more realistic scenario. The example above of tracking a dog is instructive but leaves many unanswered questions. For example, because we don't know where the dog is moving, or when it changes direction, we cannot model its movements using the Kalman filter, nor can we evaluate how well the prediction step performs. -noise, track initiation, \n", - "blah blah blah\n", - "\n", - "\n", - "For this problem we will track a ball in flight through the air. blah blah\n", - "\n", - "\n", - "\n", - "\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To avoid getting bogged down in numerical simulation issues I will use a very simple Euler " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class BallPath(object):\n", - " def __init__(self, x, y, angle_deg, velocity):\n", - " " - ], - "language": "python", - "metadata": {}, - "outputs": [] - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Realistic 2D Position Sensors" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The position sensor in the last example are not very realistic. In general there is no 'raw' sensor that provides (x,y) coordinates. We have GPS, but GPS already uses a Kalman filter to create a filtered output; we should not be able to improve the signal by passing it through another Kalman filter unless we incorporate additional sensors to provide additional information. We will tackle that problem later. \n", - "\n", - "Consider the following set up. In an open field we put two transmitters at a known location, each transmitting a signal that we can detect. We process the signal and determine how far we are from that signal, with some noise. First, let's look at a visual depiction of that." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "\n", - "circle1=plt.Circle((-4,0),5,color='r',fill=False,linewidth=10, alpha=.7)\n", - "circle2=plt.Circle((4,0),5,color='b', fill=False, linewidth=5, alpha=.7)\n", - "\n", - "fig = plt.gcf()\n", - "ax = fig.gca()\n", - "\n", - "plt.axis('equal')\n", - "plt.xlim((-10,10))\n", - "plt.ylim((-10,10))\n", - "\n", - "plt.plot ([-4,0], [0,3], 'r')\n", - "plt.plot ([4,0], [0,3], 'b')\n", - "plt.text(-4, -.5, \"A\", fontsize=16, horizontalalignment='center')\n", - "plt.text(4, -.5, \"B\", fontsize=16, horizontalalignment='center')\n", - "#plt.scatter ([-4],[0], 'r')\n", - "\n", - "ax.add_artist(circle1)\n", - "ax.add_artist(circle2)\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nc0Az2wAAAABJRU5ErkJggg==\n", - "text": [ - "" - ] - } - ], - "prompt_number": 14 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here I have attempted to show transmitter A, drawn in red, at (-4,0) and a second one B, drawn in blue, at (4,0). The red and blue circles show the range from the transmitters to the robot, with the width illustrating the effect of the $1\\sigma$ angular error for each transmitter. Here I have given the red transmitter more error than the blue one. The most probable position for the robot is where the two circles intersect, which I have depicted with the red and blue lines. You will object that we have two intersections, not one, but we will see how we deal with that when we design the measurement function.\n", - "\n", - "This is a very common sensor set up. Aircraft still use this system to navigate, where it is called DME (Distance Measuring Equipment). Today GPS is a much more common navigation sytem, but I have worked on an aircraft where we integrated sensors like this into our filter along with the GPS, INS, altimeters, etc. We will tackle what is called *multi-sensor fusion* later; for now we will just address this simple configuration.\n", - "\n", - "The first step is to design our state variables. We will assume that the robot is travelling in a straight direction with constant velocity. This is unlikely to be true for a long period of time, but is acceptable for short periods of time. This does not differ from the previous problem - we will want to track the values for the robot's position and velocity. Hence,\n", - "\n", - "$$\\mathbf{x} = \n", - "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The next step is to design the state transistion function. This also will be the same as the previous problem, so without further ado,\n", - "\n", - "$$\n", - "\\mathbf{x}' = \\begin{bmatrix}1& \\Delta t& 0& 0\\\\0& 1& 0& 0\\\\0& 0& 1& \\Delta t\\\\ 0& 0& 0& 1\\end{bmatrix}\\mathbf{x}$$\n", - "\n", - "The next step is to design the control inputs. We have none, so we set ${\\mathbf{B}}=0$.\n", - "\n", - "The next step is to design the measurement function $\\mathbf{z} = \\mathbf{Hx}$. We can model the measurement using the Pythagorean theorem.\n", - "\n", - "$$\n", - "z_a = \\sqrt{(x-x_A)^2 + (y-y_A)^2} + v_a\\\\[1em]\n", - "z_b = \\sqrt{(x-x_B])^2 + (y-y_B)^2} + v_b\n", - "$$\n", - "\n", - "where $v_a$ and $v_b$ are white noise.\n", - "\n", - "We see an immediate problem. The Kalman filter is designed for linear equations, and this is obviously nonlinear. In the next chapters we will look at several ways to handle nonlinear problems in a robust way, but for now we will do something simpler. If we know the approximate position of the robot than we can linearize these equations around that point. I could develop the generalized mathematics for this technique now, but instead let me just present the worked example to give context to that development." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Instead of computing $\\mathbf{H}$ we will compute the partial derivative of $\\mathbf{H}$ with respect to the robot's position $\\mathbf{x}$. You are probably familiar with the concept of partial derivative, but if not, it just means how $\\mathbf{H}$ changes with respect to the robot's position.\n", - "\n", - "$$\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}=\n", - "\\small\\begin{bmatrix}\n", - "\\frac{(x_r - x_A)}{\\sqrt{(x_r-x_A)^2 + (y_r-y_A)^2}} & 0 & \n", - "\\frac{(y_r - y_A)}{\\sqrt{(x_r-x_A)^2 + (y_r-y_A)^2}} & 0 \\\\\n", - "\\frac{(x_r - x_B)}{\\sqrt{(x_r-x_B)^2 + (y_r-y_B)^2}} & 0 &\n", - "\\frac{(y_r - y_B)}{\\sqrt{(x_r-x_B)^2 + (y_r-y_B)^2}} & 0 \\\\\n", - "\\end{bmatrix}\n", - "$$" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In a nutshell, the entry (0,0) contains the difference between the x coordinate of the robot and transmitter A's x coordinate divided by the distance between the robot and A. (2,0) contains the same, except for the y coordintates of the robot and transmitters. The bottom row contains the same computations, except for transmitter B. The 0 entries account for the velocity components of the state variables; naturally the range does notvide us with velocity.\n", - "\n", - "The values in this matrix change as the robot's position changes, so this is no longer a constant; we will have to recompute it for every time step of the filter.\n", - "\n", - "If you look at this you may realize that this is just a computation of x/dist and y/dist, so we can switch this to a trigometic form with no loss of generality:\n", - "\n", - "$$\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}=\n", - "\\begin{bmatrix}\n", - "-\\cos{\\theta_A} & 0 & -\\sin{\\theta_A} & 0 \\\\\n", - "-\\cos{\\theta_B} & 0 & -\\sin{\\theta_B} & 0\n", - "\\end{bmatrix}\n", - "$$\n", - "\n", - "However, this raises a huge problem. We are no longer computing $\\mathbf{H}$, but $\\Delta\\mathbf{H}$, the change of $\\mathbf{H}$. If we passed this into our Kalman filter without altering the rest of the design the output would be nonsense. Recall, for example, that we multiply $\\mathbf{Hx}$ to generate the measurements that would result from the given estimate of $\\mathbf{x}$ But now that $\\mathbf{H}$ is linearized around our position it contains the *change* in the measurement function. \n", - "\n", - "We are forced, therefore, to use the *change* in $\\mathbf{x}$ for our state variables. So we have to go back and redesign our state variables. \n", - "\n", - ">Please note this is a completely normal occurance in designing Kalman filters. The textbooks present examples like this as *fait accompli*, as if it is trivially obvious that the state variables needed to be velocities, not positions. Perhaps once you do enough of these problems it would be trivially obvious, but at that point why are you reading a textbook? I find myself reading through a presentation multiple times, trying to figure out why they made a choice, finally to realize that it is because of the consequences of something on the next page. My presentation is longer, but it reflects what actually happens when you design a filter. You make what seem reasonable design choices, and as you move forward you discover properties that require you to recast your earlier steps. As a result, I am going to somewhat abandon my **step 1**, **step 2**, etc., approach, since so many real problems are not quite that straightforward." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If our state variables contain the velocities of the robot and not the position then how do we track where the robot is? We can't. Kalman filters that are linearized in this fashion use what is called a *nominal trajectory* - i.e. you assume a position and track direction, and then apply the changes in velocity and acceleration to compute the changes in that trajectory. How could it be otherwise? Recall the graphic showing the intersection of the two range circles - there are two areas of intersection. Think of what this would look like if the two transmitters were very close to each other - the intersections would be two very long cresent shapes. This Kalman filter, as designed, has no way of knowing your true position from only distance measurements to the transmitters. Perhaps your mind is already leaping to ways of working around this problem. If so, stay engaged, as later sections and chapters will provide you with these techniques. Presenting the full solution all at once leads to more confusion than insight, in my opinion. \n", - "\n", - "So let's redesign our *state transition function*. We are assuming constant velocity and no acceleration, giving state equations of\n", - "$$\n", - "\\dot{x}' = \\dot{x} \\\\\n", - "\\ddot{x}' = 0 \\\\\n", - "\\dot{y}' = \\dot{y} \\\\\n", - "\\dot{y}' = 0$$\n", - "\n", - "This gives us the the *state transition function* of\n", - "\n", - "$$\n", - "\\mathbf{F} = \\begin{bmatrix}0 &1 & 0& 0\\\\0& 0& 0& 0\\\\0& 0& 0& 1\\\\ 0& 0& 0& 0\\end{bmatrix}$$\n", - "\n", - "A final complication comes from the measurements that we pass in. $\\mathbf{Hx}$ is now computing the *change* in the measurement from our nominal position, so the measurement that we pass in needs to be not the range to A and B, but the *change* in range from our measured range to our nomimal position. \n", - "\n", - "There is a lot here to take in, so let's work through the code bit by bit. First we will define a function to compute $\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}$ for each time step." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def H_of (pos, pos_A, pos_B):\n", - " \"\"\" Given the position of our object at 'pos' in 2D, and two transmitters\n", - " A and B at positions 'pos_A' and 'pos_B', return the partial derivative\n", - " of H\n", - " \"\"\"\n", - " \n", - " from math import sin, cos, atan2\n", - "\n", - " theta_a = atan2(pos_a[1]-pos[1], pos_a[0] - pos[0])\n", - " theta_b = atan2(pos_b[1]-pos[1], pos_b[0] - pos[0])\n", - "\n", - " return np.mat([[-cos(theta_a), 0, -sin(theta_a), 0],\n", - " [-cos(theta_b), 0, -sin(theta_b), 0]])" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 15 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we need to create our simulated sensor. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "class DMESensor(object):\n", - " def __init__(self, pos_a, pos_b, noise_factor=1.0):\n", - " self.A = pos_a\n", - " self.B = pos_b\n", - " self.noise_factor = noise_factor\n", - " \n", - " def range_of (self, pos):\n", - " \"\"\" returns tuple containing noisy range data to A and B\n", - " given a position 'pos'\n", - " \"\"\"\n", - " \n", - " ra = math.sqrt((self.A[0] - pos[0])**2 + (self.A[1] - pos[1])**2)\n", - " rb = math.sqrt((self.B[0] - pos[0])**2 + (self.B[1] - pos[1])**2)\n", - " \n", - " return (ra + random.randn()*self.noise_factor, \n", - " rb + random.randn()*self.noise_factor)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 16 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's write the code to compute $\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}$." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def dist(a,b):\n", - " return math.sqrt ((a[0]-b[0])**2 + (a[1]-b[1])**2)\n", - "\n", - "def H_of (pos, pos_A, pos_B):\n", - " dist_a = dist(pos, pos_A)\n", - " dist_b = dist(pos, pos_B)\n", - " \n", - " return np.mat([[0, (pos[0]-pos_A[0])/dist_a, 0, (pos[1]-pos_A[1])/dist_a],\n", - " [0, (pos[0]-pos_B[0])/dist_b, 0, (pos[1]-pos_B[1])/dist_b]])\n", - " '''\n", - " return np.mat([[(pos[0]-pos_A[0])/dist_a, 0, (pos[1]-pos_A[1])/dist_a,0],\n", - " [(pos[0]-pos_B[0])/dist_b, 0, (pos[1]-pos_B[1])/dist_b,0]])\n", - " '''" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 17 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we are ready for the Kalman filter code. I will position the transmitters at x=-100 and 100, both with y=-20. This gives me enough space to get good triangulation from both as the robot moves. I will start the robot at (0,0) and move by (1,1) each time step. \n", - "\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import math\n", - "\n", - "pos_a = (100,-20)\n", - "pos_b = (-100, -20)\n", - "\n", - "f1 = KalmanFilter(dim=4)\n", - "\n", - "f1.F = np.mat ([[0, 1, 0, 0],\n", - " [0, 0, 0, 0],\n", - " [0, 0, 0, 1],\n", - " [0, 0, 0, 0]])\n", - "\n", - "f1.B = 0.\n", - "\n", - "f1.R = np.eye(2) * 1.\n", - "f1.Q = np.eye(4) * .1\n", - "\n", - "f1.x = np.mat([1,0,1,0]).T\n", - "f1.P = np.eye(4) * 5.\n", - "\n", - "# initialize storage and other variables for the run\n", - "count = 30\n", - "xs, ys = [],[]\n", - "pxs, pys = [],[]\n", - "\n", - "# create the simulated sensor\n", - "d = DMESensor (pos_a, pos_b, noise_factor=3.)\n", - "\n", - "# pos will contain our nominal position since the filter does not\n", - "# maintain position.\n", - "pos = [0,0]\n", - "\n", - "for i in range(count):\n", - " # move (1,1) each step, so just use i\n", - " pos = [i,i]\n", - " \n", - " # compute the difference in range between the nominal track and measured \n", - " # ranges\n", - " ra,rb = d.range_of(pos)\n", - " rx,ry = d.range_of((i+f1.x[0,0], i+f1.x[2,0]))\n", - " z = np.mat([[ra-rx],[rb-ry]])\n", - "\n", - " # compute linearized H for this time step\n", - " f1.H = H_of (pos, pos_a, pos_b)\n", - "\n", - " # store stuff so we can plot it later\n", - " xs.append (f1.x[0,0]+i)\n", - " ys.append (f1.x[2,0]+i)\n", - " pxs.append (pos[0])\n", - " pys.append(pos[1])\n", - " \n", - " # perform the Kalman filter steps\n", - " f1.predict ()\n", - " f1.update(z)\n", - "\n", - "\n", - "p1, = plt.plot (xs, ys, 'r--')\n", - "p2, = plt.plot (pxs, pys)\n", - "plt.legend([p1,p2], ['filter', 'ideal'], 2)\n", - "plt.show()\n", - "\n" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nitKwYcPUunVrHTlyRDNmzNDkyZO5/wxRVX733HMP958BYmNjdfPNN8vhcKioqEhPP/20zjnnnHrd\ne36vPWRnZys5OVnx8fFKTExUQkKC9u7d6+9vA0BSSkqKmjRpUn7M/WeWyvnBHE2bNi1fIUxMTFRp\naamysrK4/wxRVX4lJSUhHhXqwm63y+FwSJKOHTsmu92uXbt21eve8/vKb0FBgZo1a6bVq1erSZMm\natq0qfLz83Xaaaf5+1shAEpKSjR9+vTyXwO1b98+1ENCPXD/mY970Dzbtm1TmzZtVFhYyP1noBP5\nRUdHc/8ZwuVyacaMGTp06JCuvfbaev+3LyCdX0nq3bu3JGnTpk1VPvoY4emee+5R06ZNtXv3bs2e\nPVt33nmnoqMD9q8JAoT7z1zcg2bJz8/Xxx9/rN/85jfas2ePJO4/k5ycn8T9Z4rY2Fjddtttys3N\n1euvv65f/vKXkup+7/m99tCsWTPl5+eXH5+YjcMMTZs2lSS1bdtWzZs31+HDh0M8ItQH95/5uAfN\n4fF4lJGRoUGDBqlFixbcf4apnJ/E/WeapKQkJSYmKjExsV73nt9/nGnbtq1ycnJUWFgoj8ejvLy8\n8l4NwtuxY8cUHR2tmJgYHT58WHl5eUpMTAz1sFAP3H9mKyoqUkxMDPegAbxer+bNm6fu3burU6dO\nkrj/TFJVfvw30Ax5eXmKjo5WkyZNlJ+frwMHDqhVq1b1uvcC8oS3E9tNSNKQIUPUuXNnf38LBEBW\nVpbmzZun6Oho2Ww2DRgwoPz/FBCe5s+fr82bN6uoqEjx8fEaNmyYPB4P958hKufXq1cvrV+/nnvQ\nADt37tSrr76q5OTk8tfGjBmjnTt3cv8ZoKr80tLS+G+gAXbt2qX333+//Lh///4VtjqTar/3eLwx\nAAAALIMnvAEAAMAymPwCAADAMpj8AgAAwDKY/AIAAMAymPwCAADAMpj8AgAAwDKY/AIAAMAymPwC\nAADAMv4/j52kmglEsMAAAAAASUVORK5CYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 18 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Linearizing the Kalman Filter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now that we have seen an example of linearizing the Kalman filter we are in a position to better understand the math. \n", - "\n", - "We start by assuming some function $\\mathbf f$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 18 - }, - { - "cell_type": "heading", - "level": 2, - "metadata": {}, - "source": [ - "Tracking a Ball" - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Physics of a Ball in a Vacuum" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's turn our attention to a situation where the physics of the object that we are tracking is constrained. A ball thrown in a vacuum must obey Newtonian laws. In a constant gravitational field it will travel in a parabola. I will assume you are familiar with the derivation of the formula:\n", - "\n", - "$$\n", - "\\begin{aligned}\n", - "y &= \\frac{g}{2}t^2 + v_{y0} t + y_0 \\\\\n", - "x &= v_{x0} t + x_0\n", - "\\end{aligned}\n", - "$$\n", - "\n", - "where $g$ is the gravational constant, $t$ is time, $v_{x0}$ and $v_{y0}$ are the initial velocities in the x and y plane. If the ball is thrown with an initial velocity of $v$ at angle $\\theta$ above the horizon, we can compute $v_{x0}$ and $v_{y0}$ as\n", - "\n", - "$$\n", - "\\begin{aligned}\n", - "v_{x0} = v \\cos{\\theta} \\\\\n", - "v_{y0} = v \\sin{\\theta}\n", - "\\end{aligned}\n", - "$$\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can simulate this with the following code. I added a way to specify the initial angle in either radians or degrees, and a noise scaling factor which will be useful when we test our Kalman filter. " - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "from math import cos, tan, radians\n", - "from numpy.random import randn\n", - "\n", - "def sec (x):\n", - " return 1. / cos(x)\n", - "\n", - "class BallTrajectory2D(object):\n", - " def __init__(self, v0, angle_radians=0., x0=0., angle_degrees=None, noise_scale=0.0):\n", - " if angle_degrees is not None:\n", - " self.theta = radians(angle_degrees)\n", - " else:\n", - " self.theta = angle_radians\n", - " \n", - " self.x = self.x0 = x0\n", - " self.y = self.y0 = 0\n", - " \n", - " self.v0_y = v0 * math.sin(self.theta)\n", - " self.v0_x = v0 * math.cos(self.theta)\n", - " \n", - " self.noise_scale = noise_scale\n", - " \n", - " def update(self, t):\n", - " self.x = self.v0_x*t + self.x0\n", - " self.y = -0.5*9.8*t**2 + self.v0_y*t + self.y0\n", - " \n", - " self.x += randn() * self.noise_scale\n", - " self.y += randn() * self.noise_scale\n", - " return (self.x, self.y)" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 19 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So to create a trajectory with a velocity of $60 \\frac{m}{s}$ and an angle of $65^\\circ$ we would write:\n", - "\n", - " traj = BallTrajectory2D (60, angle_degrees=65)\n", - " \n", - "and then call $\\verb,update(t),$ for each time step. For example:" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "traj = BallTrajectory2D (60, angle_degrees=65)\n", - "t = 0.0\n", - "while t >= 0 and traj.y >= 0:\n", - " traj.update(t)\n", - " plt.scatter(traj.x, traj.y)\n", - " t += 0.1\n", - "plt.axis('equal')\n", - "plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "iVBORw0KGgoAAAANSUhEUgAAAsgAAAFtCAYAAAAakpy2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4lNXd//H3PUv2BQIJCUtAIBCBKCC2KqmCCwGEggsK\nVsFaWivupepTbB/aytPHDautpWpbH1yqCFVR/EGFAi6IK6iAyqIgJAgkrFkns92/P0YSUGRJJjmz\nfF7X1evKmWaSw8c7k2/OfO9zrA0bNtiIiIiIiAgADtMTEBERERGJJCqQRUREREQOoQJZREREROQQ\nKpBFRERERA6hAllERERE5BAqkEVEREREDuFqzW+2fft2gsFga35LEREREYlDwWCQrl27Num5rVog\nB4NBBg4c2JrfUg6xYMECRo8ebXoacUv5m6PszVL+Zil/c5S9WatXr27yc9ViEUe2bdtmegpxTfmb\no+zNUv5mKX9zlH30UoEsIiIiInIIFchx5Pzzzzc9hbim/M1R9mYpf7OUvznKPnpZGzZssFvrm5WW\nlqoHWURERERa3OrVq+nSpUuTnqsV5DiyYsUK01OIa8rfHGVvlvI3S/mbo+yjlwpkEREREZFDqMVC\nRERERGKOWixERERERMJEBXIcUS+UWcrfHGX/bT4fbN5ssXVr46+BXbss3n7bydq1DgKB0GOlpRYr\nVzrZsKHx8/bssfj8cwd79x7f91L+Zil/c5R99GrVk/RERKTlbdnioLYWOncOkpkZKoSffDKRykqL\nyZPrKSgIMn++mylTUklIgH/+s5p+/QLcdlsyr7ySiMtlM2dONT17BrjyyjTWrXORnm4zf34VWVk2\nU6ak8PbbboYO9fHggzUkJcErr7j58EMnl17qY/BgP05naB4eDyQkZJmORETkhKgHWUQkSvn9sGaN\nk507LXr0CNK7d5D333dy6aXpVFVZXHuth6lT67j55lQWLUoAoEuXAM89V80552Tg81kA9OgR4OGH\naxgxIqPhaw8b5uWnP61n3Lj0hsd+85s6unUL8JOfpDU89vTTVVRWWkyZEnrM5bJZurSSmhqLyy5L\np7ra4rbb6rjhBg9+P3z8sYtAAE45JUB2dqv9+hGROKQeZBGRGGfb8OGHTl54wc2qVU4CAXj/fScl\nJelceWU6Y8aks22bxZ//nERVVajwffTRJHbscPDZZ86Gr1NW5sC2ITW1sTjNzAySmRkkPb3xsQED\n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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 20 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If you are not completely familiar with this math I suggest playing with the velocity and angle parameters to see how changing each affects the trajectory. " - ] - }, - { - "cell_type": "heading", - "level": 3, - "metadata": {}, - "source": [ - "Designing the Kalman Filter" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our assumption is that the ball is travelling in a vacuum, so the velocity in x is a constant, and the acceleration in y is solely due to the gravitational constant $g$. The Newtonian equations for $x$ and $y$ in terms of $\\Delta t$ are:\n", - "\n", - "$$\\begin{aligned}\n", - "y_t &= \\frac{g}{2} {\\Delta t}^2 + v_{y(t-1)} {\\Delta t} + y_{t-1} \\\\\n", - "v_{yt} &= g {\\Delta t} + v_{y(t-1)} \\\\\n", - "\\\\\n", - "x_t &= v_{x(t-1)} {\\Delta t} \\\\\n", - "v_{xt} &= v_{x(t-1)}\n", - "\\end{aligned}\n", - "$$\n", - "\n", - "We need to incorporate acceleration for $y$ into the Kalman filter, but not for $x$. This suggests the following state variables.\n", - "\n", - "$$\n", - "\\mathbf{x} = \n", - "\\begin{bmatrix}\n", - "x \\\\\n", - "\\dot{x} \\\\\n", - "y \\\\\n", - "\\dot{y} \\\\\n", - "\\ddot{y}\n", - "\\end{bmatrix}\n", - "$$" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def ball_filter(dt,R=1., Q = 0.1):\n", - " f1 = KalmanFilter(dim=5)\n", - " g = -9.8\n", - "\n", - " f1.F = np.mat ([[1., dt, 0, 0, 0],\n", - " [0, 1., 0, 0, 0],\n", - " [0, 0, 1., dt, dt*dt*g],\n", - " [0, 0, 0, 1., dt],\n", - " [0, 0, 0, 0, 1.]])\n", - "\n", - " f1.H = np.mat([[1,0,0,0,0],\n", - " [0,0,0,0,0],\n", - " [0,0,1,0,0],\n", - " [0,0,0,0,0],\n", - " [0,0,0,0,0]])\n", - "\n", - "\n", - " f1.R = np.mat(np.eye(5)) * R \n", - " \n", - " f1.Q = np.zeros((5,5))\n", - " f1.Q[4,4] = Q\n", - " f1.x = np.mat([0, 0 , 0, 0, 0]).T\n", - " f1.P = np.eye(5) * 5.\n", - " f1.B = 0.\n", - " f1.u = 0\n", - " \n", - " return f1" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 21 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def plot_ball_filter (traj):\n", - " xs, ys = [],[]\n", - " pxs, pys = [],[]\n", - " \n", - " for z in zs:\n", - " m = np.mat([z[0], 0, z[1], 0, 0]).T\n", - "\n", - " f1.predict ()\n", - " f1.update (m)\n", - "\n", - " xs.append (f1.x[0,0])\n", - " ys.append (f1.x[2,0])\n", - " pxs.append (z[0])\n", - " pys.append(z[1])\n", - " \n", - " if z[1] < 0:\n", - " break;\n", - "\n", - " p1, = plt.plot (xs, ys, 'r--')\n", - " p2, = plt.plot (pxs, pys)\n", - " plt.axis('equal')\n", - " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", - " plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 22 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "dt = 0.1\n", - "f1 = ball_filter(dt,R=0.1, Q=0.1)\n", - "\n", - "traj = BallTrajectory2D (20., angle_degrees=60., noise_scale=0.0)\n", - "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", - "\n", - "plot_ball_filter (zs)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 23 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here, we can see that the filter tracks the trajectory quite closely, but not perfectly. Let's look at the effect of a slower and faster initial velocity." - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "dt = 0.1\n", - "f1 = ball_filter(dt,R=.1, Q=.1)\n", - "traj = BallTrajectory2D (10., angle_degrees=60., noise_scale=0.0)\n", - "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", - "plot_ball_filter (zs)\n", - "\n", - "f1 = ball_filter(dt, R=0.1, Q=0.1)\n", - "traj = BallTrajectory2D (60., angle_degrees=60., noise_scale=0.0)\n", - "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", - "plot_ball_filter (zs)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nwZ/rt/WWAAAAAElFTkSuQmCC\n", - "text": [ - "" - ] - } - ], - "prompt_number": 24 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Can you explain what is happening here?\n", - "\n", - "When the initial velocity is low, the change in velocity per time period is large compared to the velocity. In the physical world the ball's velocity is changing continuously, but we are imposing a step function on it because we are stepping by $0.1s$. This means our model of the ball does not exactly match the true behavior of the ball, and so the Kalman filter will not exactly predict the ball's behavior. A slow initial velcocity exaberates that \n", - "\n", - "**author's note** complete this" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "So we seem to be doing a good job of tracking the ball. What happens if we inject noise?" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "dt = 0.1\n", - "f1 = ball_filter(dt, R=.16, Q=0.0)\n", - "\n", - "traj = BallTrajectory2D (40., angle_degrees=60., noise_scale=0.4)\n", - "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", - "plot_ball_filter (zs)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 25 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "You can see that the filter follows an almost perfect parabola despite the noise in the signal. Because I know the noise characteristic of my filter, $\\sigma=0.4$, I was able to specify the variance as $\\mathbf{R} = \\sigma^2=0.16$." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's make this more realistic. We don't have much call to track balls thrown on airless planets. On Earth, balls are subject to the effects of the atmosphere. \n", - "\n", - "blah blah\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "import baseball\n", - "dt = 0.01\n", - "f1 = ball_filter(dt, R=1.16, Q=5.5)\n", - "\n", - "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", - "zs = zip (x,y)\n", - "plot_ball_filter (zs)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n", - "text": [ - "" - ] - } - ], - "prompt_number": 26 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def ball_filter6(dt,R=1., Q = 0.1):\n", - " f1 = KalmanFilter(dim=6)\n", - " g = -9.8\n", - " g=1\n", - "\n", - " f1.F = np.mat ([[1., dt, dt**2, 0, 0, 0],\n", - " [0, 1., dt, 0, 0, 0],\n", - " [0, 0, 1., 0, 0, 0],\n", - " [0, 0, 0., 1., dt, dt*dt*g],\n", - " [0, 0, 0, 0, 1., dt],\n", - " [0, 0, 0, 0, 0., 1.]])\n", - "\n", - " f1.H = np.mat([[1,0,0,0,0,0],\n", - " [0,0,0,0,0,0],\n", - " [0,0,0,0,0,0],\n", - " [0,0,0,1,0,0],\n", - " [0,0,0,0,0,0],\n", - " [0,0,0,0,0,0]])\n", - "\n", - "\n", - " f1.R = np.mat(np.eye(6)) * R \n", - " \n", - " f1.Q = np.zeros((6,6))\n", - " f1.Q[2,2] = Q \n", - " f1.Q[5,5] = Q\n", - " f1.x = np.mat([0, 0 , 0, 0, 0, 0]).T\n", - " f1.P = np.eye(6) * 50.\n", - " f1.B = 0.\n", - " f1.u = 0\n", - " \n", - " return f1" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 27 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def plot_ball_filter6 (zs):\n", - " xs, ys = [],[]\n", - " pxs, pys = [],[]\n", - " \n", - " for i,z in enumerate(zs):\n", - " m = np.mat([z[0], 0, 0, z[1], 0, 0]).T\n", - "\n", - " f1.predict ()\n", - " f1.update (m)\n", - "\n", - " xs.append (f1.x[0,0])\n", - " ys.append (f1.x[3,0])\n", - " pxs.append (z[0])\n", - " pys.append(z[1])\n", - " \n", - " if i > 0 and z[1] < 0:\n", - " break;\n", - "\n", - " p1, = plt.plot (xs, ys, 'r--')\n", - " p2, = plt.plot (pxs, pys)\n", - " plt.axis('equal')\n", - " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", - " plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 28 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "dt = 0.1\n", - "noise = 0.2\n", - "f1 = ball_filter6(dt, R=.16, Q=0.1)\n", - "\n", - "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", - "znoise = [(i+randn()*noise,j+randn()*noise) for (i,j) in zip(x,y)]\n", - "plot_ball_filter6 (znoise)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "metadata": {}, - "output_type": "display_data", - "png": "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\nYII=\n", - "text": [ - "" - ] - } - ], - "prompt_number": 29 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "look at P" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "print (f1.P)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "[[ 0.05261574 0.09937383 0.10362656 0. 0. 0. ]\n", - " [ 0.09937383 0.29131298 0.41184609 0. 0. 0. ]\n", - " [ 0.10362656 0.41184609 0.95895574 0. 0. 0. ]\n", - " [ 0. 0. 0. 0.05261574 0.09937383 0.10362656]\n", - " [ 0. 0. 0. 0.09937383 0.29131298 0.41184609]\n", - " [ 0. 0. 0. 0.10362656 0.41184609 0.95895574]]\n" - ] - } - ], - "prompt_number": 30 - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "now what if some measurements missing blah blah\n" - ] - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "def plot_ball_filter6_miss (zs, miss_ratio=0.2):\n", - " xs, ys = [],[]\n", - " pxs, pys = [],[]\n", - " \n", - " for i,z in enumerate(zs):\n", - " m = np.mat([z[0], 0, 0, z[1], 0, 0]).T\n", - "\n", - " f1.predict ()\n", - " print (i, f1.x) \n", - " \n", - " if i < 20 or i > 40:\n", - " #if random.rand() >= miss_ratio:\n", - " f1.update (m)\n", - "\n", - "\n", - " xs.append (f1.x[0,0])\n", - " ys.append (f1.x[3,0])\n", - " pxs.append (z[0])\n", - " pys.append(z[1])\n", - " \n", - " if i > 0 and z[1] < 0:\n", - " break;\n", - "\n", - " p1, = plt.plot (xs, ys, 'r--')\n", - " p2, = plt.plot (pxs, pys)\n", - " plt.axis('equal')\n", - " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", - " plt.show()" - ], - "language": "python", - "metadata": {}, - "outputs": [], - "prompt_number": 44 - }, - { - "cell_type": "code", - "collapsed": false, - "input": [ - "dt = 0.1\n", - "noise = 0.0\n", - "f1 = ball_filter6(dt, R=.16, Q=0.1)\n", - "\n", - "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", - "znoise = [(i+randn()*noise,j+randn()*noise) for (i,j) in zip(x,y)]\n", - "plot_ball_filter6_miss (znoise)" - ], - "language": "python", - "metadata": {}, - "outputs": [ - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "0 [[ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]]\n", - "1 [[ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]\n", - " [ 0.]]\n", - "2 [[ 2.44405979]\n", - " [ 10.68643825]\n", - " [ 2.02487675]\n", - " [ 5.24130313]\n", - " [ 22.91714079]\n", - " [ 4.34236221]]\n", - "3 [[ 4.66270121]\n", - " [ 15.0959457 ]\n", - " [ 3.41998384]\n", - " [ 9.8787654 ]\n", - " [ 31.92489774]\n", - " [ 7.1854626 ]]\n", - "4 [[ 6.53889664]\n", - " [ 16.51155164]\n", - " [ 4.13016625]\n", - " [ 13.68152078]\n", - " [ 34.38243413]\n", - " [ 8.33579 ]]\n", - "5 [[ 8.26612083]\n", - " [ 17.03075509]\n", - " [ 4.25071537]\n", - " [ 17.06352352]\n", - " [ 34.78964978]\n", - " [ 7.8517589 ]]\n", - "6 [[ 9.89364089]\n", - " [ 17.09199018]\n", - " [ 3.69648655]\n", - " [ 20.11627647]\n", - " [ 34.01938789]\n", - " [ 5.48237438]]\n", - "7 [[ 11.42611493]\n", - " [ 16.79051327]\n", - " [ 2.55972089]\n", - " [ 22.84083372]\n", - " [ 32.26802293]\n", - " [ 1.5872627 ]]\n", - "8 [[ 12.87107224]\n", - " [ 16.23334243]\n", - " [ 1.17838404]\n", - " [ 25.26137529]\n", - " [ 29.85249228]\n", - " [ -2.78578886]]\n", - "9 [[ 14.24807549]\n", - " [ 15.56446867]\n", - " [ -0.09987618]\n", - " [ 27.43868368]\n", - " [ 27.19628665]\n", - " [ -6.64898788]]\n", - "10 [[ 15.57762857]\n", - " [ 14.89469275]\n", - " [ -1.10589939]\n", - " [ 29.43283218]\n", - " [ 24.60662615]\n", - " [ -9.58380039]]\n", - "11 [[ 16.87332115]\n", - " [ 14.27675526]\n", - " [ -1.82766582]\n", - " [ 31.28127693]\n", - " [ 22.21442747]\n", - " [-11.6235898 ]]\n", - "12 [[ 18.14212805]\n", - " [ 13.7239801 ]\n", - " [ -2.31896548]\n", - " [ 33.00164543]\n", - " [ 20.0392546 ]\n", - " [-12.9684103 ]]\n", - "13 [[ 19.3872636 ]\n", - " [ 13.23249429]\n", - " [ -2.64174192]\n", - " [ 34.60092379]\n", - " [ 18.05657215]\n", - " [-13.82119383]]\n", - "14 [[ 20.61032298]\n", - " [ 12.79363675]\n", - " [ -2.84612871]\n", - " [ 36.08182295]\n", - " [ 16.23273747]\n", - " [-14.33801914]]\n", - "15 [[ 21.81236356]\n", - " [ 12.39889874]\n", - " [ -2.96807894]\n", - " [ 37.44581783]\n", - " [ 14.53772217]\n", - " [-14.62728128]]\n", - "16 [[ 22.99434735]\n", - " [ 12.0413384 ]\n", - " [ -3.03216273]\n", - " [ 38.69430853]\n", - " [ 12.94798303]\n", - " [-14.7612569 ]]\n", - "17 [[ 24.15728912]\n", - " [ 11.71569135]\n", - " [ -3.05485765]\n", - " [ 39.82896024]\n", - " [ 11.44599382]\n", - " [-14.78742499]]\n", - "18 [[ 25.30228828]\n", - " [ 11.41810935]\n", - " [ -3.04713115]\n", - " [ 40.851739 ]\n", - " [ 10.01900867]\n", - " [-14.73682841]]\n", - "19 [[ 26.43052127]\n", - " [ 11.14585251]\n", - " [ -3.01624667]\n", - " [ 41.76485573]\n", - " [ 8.65788025]\n", - " [-14.6297248 ]]\n", - "20 [[ 27.54322312]\n", - " [ 10.89702311]\n", - " [ -2.96698642]\n", - " [ 42.57069332]\n", - " [ 7.35611195]\n", - " [-14.47931437]]\n", - "21 [[ 28.60325556]\n", - " [ 10.60032446]\n", - " [ -2.96698642]\n", - " [ 43.16151138]\n", - " [ 5.90818051]\n", - " [-14.47931437]]\n", - "22 [[ 29.63361814]\n", - " [ 10.30362582]\n", - " [ -2.96698642]\n", - " [ 43.60753628]\n", - " [ 4.46024908]\n", - " [-14.47931437]]\n", - "23 [[ 30.63431086]\n", - " [ 10.00692718]\n", - " [ -2.96698642]\n", - " [ 43.90876805]\n", - " [ 3.01231764]\n", - " [-14.47931437]]\n", - "24 [[ 31.60533372]\n", - " [ 9.71022854]\n", - " [ -2.96698642]\n", - " [ 44.06520667]\n", - " [ 1.5643862 ]\n", - " [-14.47931437]]\n", - "25 [[ 32.54668671]\n", - " [ 9.4135299 ]\n", - " [ -2.96698642]\n", - " [ 44.07685214]\n", - " [ 0.11645477]\n", - " [-14.47931437]]\n", - "26 [[ 33.45836983]\n", - " [ 9.11683125]\n", - " [ -2.96698642]\n", - " [ 43.94370448]\n", - " [ -1.33147667]\n", - " [-14.47931437]]\n", - "27 [[ 34.34038309]\n", - " [ 8.82013261]\n", - " [ -2.96698642]\n", - " [ 43.66576367]\n", - " [ -2.77940811]\n", - " [-14.47931437]]\n", - "28 [[ 35.19272649]\n", - " [ 8.52343397]\n", - " [ -2.96698642]\n", - " [ 43.24302971]\n", - " [ -4.22733955]\n", - " [-14.47931437]]\n", - "29 [[ 36.01540002]\n", - " [ 8.22673533]\n", - " [ -2.96698642]\n", - " [ 42.67550261]\n", - " [ -5.67527098]\n", - " [-14.47931437]]\n", - "30 [[ 36.80840369]\n", - " [ 7.93003669]\n", - " [ -2.96698642]\n", - " [ 41.96318237]\n", - " [ -7.12320242]\n", - " [-14.47931437]]\n", - "31 [[ 37.57173749]\n", - " [ 7.63333804]\n", - " [ -2.96698642]\n", - " [ 41.10606899]\n", - " [ -8.57113386]\n", - " [-14.47931437]]\n", - "32 [[ 38.30540143]\n", - " [ 7.3366394 ]\n", - " [ -2.96698642]\n", - " [ 40.10416246]\n", - " [-10.01906529]\n", - " [-14.47931437]]\n", - "33 [[ 39.00939551]\n", - " [ 7.03994076]\n", - " [ -2.96698642]\n", - " [ 38.95746278]\n", - " [-11.46699673]\n", - " [-14.47931437]]\n", - "34 [[ 39.68371972]\n", - " [ 6.74324212]\n", - " [ -2.96698642]\n", - " [ 37.66596997]\n", - " [-12.91492817]\n", - " [-14.47931437]]\n", - "35 [[ 40.32837407]\n", - " [ 6.44654348]\n", - " [ -2.96698642]\n", - " [ 36.22968401]\n", - " [-14.3628596 ]\n", - " [-14.47931437]]\n", - "36 [[ 40.94335855]\n", - " [ 6.14984483]\n", - " [ -2.96698642]\n", - " [ 34.6486049 ]\n", - " [-15.81079104]\n", - " [-14.47931437]]\n", - "37 [[ 41.52867317]\n", - " [ 5.85314619]\n", - " [ -2.96698642]\n", - " [ 32.92273265]\n", - " [-17.25872248]\n", - " [-14.47931437]]\n", - "38 [[ 42.08431793]\n", - " [ 5.55644755]\n", - " [ -2.96698642]\n", - " [ 31.05206726]\n", - " [-18.70665391]\n", - " [-14.47931437]]\n", - "39 [[ 42.61029282]\n", - " [ 5.25974891]\n", - " [ -2.96698642]\n", - " [ 29.03660873]\n", - " [-20.15458535]\n", - " [-14.47931437]]\n", - "40 [[ 43.10659784]\n", - " [ 4.96305027]\n", - " [ -2.96698642]\n", - " [ 26.87635705]\n", - " [-21.60251679]\n", - " [-14.47931437]]\n", - "41 [[ 43.57323301]\n", - " [ 4.66635162]\n", - " [ -2.96698642]\n", - " [ 24.57131223]\n", - " [-23.05044822]\n", - " [-14.47931437]]\n", - "42 [[ 49.53875091]\n", - " [ 8.41022586]\n", - " [ -1.35829677]\n", - " [ 36.25872343]\n", - " [-14.16609388]\n", - " [-10.36567957]]\n", - "43 [[ 50.41875369]\n", - " [ 8.33134456]\n", - " [ -1.32141671]\n", - " [ 34.91649773]\n", - " [-15.00976788]\n", - " [-10.24076045]]\n", - "44 [[ 51.27664835]\n", - " [ 8.25959907]\n", - " [ -1.27392093]\n", - " [ 33.47134349]\n", - " [-15.78218742]\n", - " [-10.04285686]]\n", - "45 [[ 52.12583444]\n", - " [ 8.20292466]\n", - " [ -1.21554564]\n", - " [ 31.96934394]\n", - " [-16.43913584]\n", - " [ -9.75614053]]\n", - "46 [[ 52.96740558]\n", - " [ 8.15248606]\n", - " [ -1.1568817 ]\n", - " [ 30.42208773]\n", - " [-17.00163737]\n", - " [ -9.41536186]]" - ] - }, - { - "output_type": "stream", - "stream": "stdout", - "text": [ - "\n", - "47 [[ 53.79863088]\n", - " [ 8.09573592]\n", - " [ -1.10900586]\n", - " [ 28.82446485]\n", - " [-17.52231427]\n", - " [ -9.07349441]]\n", - "48 [[ 54.61635331]\n", - " [ 8.02488892]\n", - " [ -1.07699429]\n", - " [ 27.16568144]\n", - " [-18.04621201]\n", - " [ -8.76703269]]\n", - "49 [[ 55.41860877]\n", - " [ 7.93827355]\n", - " [ -1.06032042]\n", - " [ 25.43776715]\n", - " [-18.59398868]\n", - " [ -8.50690811]]\n", - "50 [[ 56.20461371]\n", - " [ 7.83758198]\n", - " [ -1.05610405]\n", - " [ 23.63768075]\n", - " [-19.16739559]\n", - " [ -8.2879896 ]]\n", - "51 [[ 56.97422095]\n", - " [ 7.72532752]\n", - " [ -1.0613927 ]\n", - " [ 21.76593979]\n", - " [-19.75952268]\n", - " [ -8.09959974]]\n", - "52 [[ 57.72749988]\n", - " [ 7.60367152]\n", - " [ -1.07395753]\n", - " [ 19.82490448]\n", - " [-20.36130989]\n", - " [ -7.93102968]]\n", - "53 [[ 58.46453621]\n", - " [ 7.47415459]\n", - " [ -1.09230102]\n", - " [ 17.81769808]\n", - " [-20.96425829]\n", - " [ -7.77334825]]\n", - "54 [[ 59.18537127]\n", - " [ 7.3377984 ]\n", - " [ -1.11541441]\n", - " [ 15.74768189]\n", - " [-21.56116738]\n", - " [ -7.61961252]]\n", - "55 [[ 59.89000815]\n", - " [ 7.19530697]\n", - " [ -1.14251657]\n", - " [ 13.61822836]\n", - " [-22.14615781]\n", - " [ -7.46464341]]\n", - "56 [[ 60.5784447 ]\n", - " [ 7.04726395]\n", - " [ -1.17284942]\n", - " [ 11.43261659]\n", - " [-22.71455044]\n", - " [ -7.30479717]]\n", - "57 [[ 61.25071319]\n", - " [ 6.89428876]\n", - " [ -1.20555065]\n", - " [ 9.19396376]\n", - " [-23.26278579]\n", - " [ -7.13781556]]\n", - "58 [[ 61.9069146 ]\n", - " [ 6.73713538]\n", - " [ -1.23960771]\n", - " [ 6.90516348]\n", - " [-23.78839568]\n", - " [ -6.96270983]]\n", - "59 [[ 62.54723957]\n", - " [ 6.57672729]\n", - " [ -1.27388497]\n", - " [ 4.56883211]\n", - " [-24.28997646]\n", - " [ -6.77961145]]\n", - "60 [[ 63.17197196]\n", - " [ 6.41413318]\n", - " [ -1.30720331]\n", - " [ 2.18727552]\n", - " [-24.7671111 ]\n", - " [ -6.58955065]]\n", - "61 [[ 63.781476 ]\n", - " [ 6.25050063]\n", - " [ -1.33844179]\n", - " [ -0.23751324]\n", - " [-25.22021619]\n", - " [ -6.39416907]]\n", - "62 [[ 64.37617233]\n", - " [ 6.0869722 ]\n", - " [ -1.36663031]\n", - " [ -2.70382451]\n", - " [-25.65032694]\n", - " [ -6.19540949]]\n" - ] - }, - { - "metadata": {}, - "output_type": "display_data", - "png": "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\n3AAAAABJRU5ErkJggg==\n", - "text": [ - "" - ] - } - ], - "prompt_number": 46 - } - ], - "metadata": {} - } - ] +{ + "metadata": { + "name": "", + "signature": "sha256:1176e606a0fbcfee32c2c1282d705afff40c345291d62a713bbb17979900fd8d" + }, + "nbformat": 3, + "nbformat_minor": 0, + "worksheets": [ + { + "cells": [ + { + "cell_type": "heading", + "level": 1, + "metadata": {}, + "source": [ + "Designing Kalman Filters" + ] + }, + { + "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()\n", + "\n", + "#%install_ext secnum.py\n", + "#%load_ext secnum\n", + "#%secnum" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "html": [ + "\n", + "\n" + ], + "metadata": {}, + "output_type": "pyout", + "prompt_number": 93, + "text": [ + "" + ] + } + ], + "prompt_number": 93 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Introduction" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this chapter we will work through the design of several Kalman filters to gain experience and confidence with the various equations and techniques. \n", + "\n", + "For our first multidimensional problem we will track a robot in a 2D space, such as a field. We will start with a simple noisy sensor that outputs noisy $(x,y)$ coordinates which we will need to filter to generate a 2D track. Once we have mastered this concept, we will extend the problem significantly with more sensors and then adding control inputs. \n", + "blah blah" + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Tracking a Robot" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This first attempt at tracking a robot will closely resemble the 1-D dog tracking problem of previous chapters. This will allow us to 'get our feet wet' with Kalman filtering. So, instead of a sensor that outputs position in a hallway, we now have a sensor that supplies a noisy measurement of position in a 2-D space, such as an open field. That is, at each time $T$ it will provide an $(x,y)$ coordinate pair specifying the measurement of the sensor's position in the field.\n", + "\n", + "Implemention of code to interact with real sensors is beyond the scope of this book, so as before we will program simple simuations in Python to represent the sensors. We will develop several of these sensors as we go, each with more complications, so as I program them I will just append a number to the function name. $\\verb,pos_sensor1 (),$ is the first sensor we write, and so on. \n", + "\n", + "So let's start with a very simple sensor, one that travels in a straight line. It takes as input the last position, velocity, and how much noise we want, and returns the new position. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy.random as random\n", + "import copy\n", + "class PosSensor1(object):\n", + " def __init__(self, pos = [0,0], vel = (0,0), noise_scale = 1.):\n", + " self.vel = vel\n", + " self.noise_scale = noise_scale\n", + " self.pos = copy.deepcopy(pos)\n", + " \n", + " def read(self):\n", + " self.pos[0] += self.vel[0]\n", + " self.pos[1] += self.vel[1]\n", + " \n", + " return [self.pos[0] + random.randn() * self.noise_scale,\n", + " self.pos[1] + random.randn() * self.noise_scale]" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 94 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A quick test to verify that it works as we expect." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "pos = [4,3]\n", + "s = PosSensor1 (pos, (2,1), 1)\n", + "\n", + "for i in range (50):\n", + " pos = s.read() \n", + " plt.scatter(pos[0], pos[1])\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 95 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That looks correct. The slope is 1/2, as we would expect with a velocity of (2,1), and the data seems to start at near (6,4).\n", + "\n", + "##### Step 1: Choose the State Variables\n", + "\n", + "As always, the first step is to choose our state variables. We are tracking in two dimensions and have a sensor that gives us a reading in each of those two dimensions, so we know that we have the two *observed variables* $x$ and $y$. If we created our Kalman filter using only those two variables the performance would not be very good because we would be ignoring the information velocity can provide to us. We will want to incorporate velocity into our equations as well. I will represent this as\n", + "\n", + "$$\\mathbf{x} = \n", + "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$\n", + "\n", + "There is nothing special about this organization. I could have listed the (xy) coordinates first followed by the velocities, and/or I could done this as a row matrix instead of a column matrix. For example, I could have chosen:\n", + "\n", + "$$\\mathbf{x} = \n", + "\\begin{bmatrix}x&y&v_x&v_y\\end{bmatrix}$$\n", + "\n", + "All that matters is that the rest of my derivation uses this same scheme. However, it is typical to use column matrices for state variables, and I prefer it, so that is what we will use. \n", + "\n", + "It might be a good time to pause and address how you identify the unobserved variables. This particular example is somewhat obvious because we already worked through the 1D case in the previous chapters. Would it be so obvious if we were filtering market data, population data from a biology experiement, and so on? Probably not. There is no easy answer to this question. The first thing to ask yourself is what is the interpretation of the first and second derivatives of the data from the sensors. We do that because obtaining the first and second derivatives is mathematically trivial if you are reading from the sensors using a fixed time step. The first derivative is just the difference between two successive readings. In our tracking case the first derivative has an obvious physical interpretation: the difference between two successive positions is velocity. \n", + "\n", + "Beyond this you can start looking at how you might combine the data from two or more different sensors to produce more information. This opens up the field of *sensor fusion*, and we will be covering examples of this in later sections. For now, recognize that choosing the appropriate state variables is paramount to getting the best possible performance from your filter. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### **Step 2:** Design State Transition Function\n", + "\n", + "Our next step is to design the state transistion function. Recall that the state transistion function is implemented as a matrix $\\mathbf{F}$ that we multipy with the previous state of our system to get the next state, like so. \n", + "\n", + "$$\\mathbf{x}' = \\mathbf{Fx}$$\n", + "\n", + "I will not belabor this as it is very similar to the 1-D case we did in the previous chapter. Our state equations for position and velocity would be:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "x' &= (1*x) + (\\Delta t * v_x) + (0*y) + (0 * v_y) \\\\\n", + "v_x &= (0*x) + (1*v_x) + (0*y) + (0 * v_y) \\\\\n", + "y' &= (0*x) + (0* v_x) + (1*y) + (\\Delta t * v_y) \\\\\n", + "v_y &= (0*x) + (0*v_x) + (0*y) + (1 * v_y)\n", + "\\end{aligned}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Laying it out that way shows us both the values and row-column organization required for $\\small\\mathbf{F}$. In linear algebra, we would write this as:\n", + "\n", + "$$\n", + "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}' = \\begin{bmatrix}1& \\Delta t& 0& 0\\\\0& 1& 0& 0\\\\0& 0& 1& \\Delta t\\\\ 0& 0& 0& 1\\end{bmatrix}\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$\n", + "\n", + "So, let's do this in Python. It is very simple; the only thing new here is setting $\\vert,dim_z,$ to 2. We will see why it is set to 2 in step 4." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from KalmanFilter import KalmanFilter\n", + "import numpy as np\n", + "\n", + "f1 = KalmanFilter(dim_x=4, dim_z=2)\n", + "dt = 1. # time step\n", + "\n", + "f1.F = np.mat ([[1, dt, 0, 0],\n", + " [0, 1, 0, 0],\n", + " [0, 0, 1, dt],\n", + " [0, 0, 0, 1]])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 96 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### **Step 3**: Design the Motion Function\n", + "We have no control inputs to our robot (yet!), so this step is trivial - set the motion transition function $\\small\\mathbf{B}$ to zero. This is done for us by the class when it is created so we can skip this step, but for completeness we will be explicit." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1.B = 0." + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 97 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "##### **Step 4**: Design the Measurement Function\n", + "The measurement function defines how we go from the state variables to the measurements using the equation $\\mathbf{z} = \\mathbf{Hx}$. At first this is a bit counterintuitive, after all, we use the Kalman filter to go from measurements to state. But the update step needs to compute the residual between the current measurement and the measurement represented by the prediction step. Therefore $\\textbf{H}$ is multiplied by the state $\\textbf{x}$ to produce a measurement $\\textbf{z}$. \n", + "\n", + "In this case we have measurements for (x,y), so z must be of dimension $2\\times 1$. Our state variable is size $4\\times 1$. We can deduce the required size for $\\textbf{H}$ by recalling that multiplying a matrix of size $m\\times n$ by $n\\times p$ yields a matrix of size $m\\times p$. Thus,\n", + "\n", + "$$ \n", + "\\begin{aligned}\n", + "(2\\times 1) &= (a\\times b)(4 \\times 1) \\\\\n", + "&= (a\\times 4)(4\\times 1) \\\\\n", + "&= (2\\times 4)(4\\times 1)\n", + "\\end{aligned}$$\n", + "\n", + "So, $\\textbf{H}$ is of size $2\\times 4$.\n", + "\n", + "Filling in the values for $\\textbf{H}$ is easy in this case because the measurement is the position of the robot, which is the $x$ and $y$ variables of the state $\\textbf{x}$. Let's make this just slightly more interesting by deciding we want to change units. So we will assume that the measurements are returned in feet, and that we desire to work in meters. Converting from feet to meters is a simple as multiplying by 0.3048. However, we are converting from state (meters) to measurements (feet) so we need to divide by 0.3048. So\n", + "\n", + "$$\\mathbf{H} =\n", + "\\begin{bmatrix} \n", + "\\frac{1}{0.3048} & 0 & 0 & 0 \\\\\n", + "0 & 0 & \\frac{1}{0.3048} & 0\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "which corresponds to these linear equations\n", + "$$\n", + "\\begin{aligned}\n", + "z_x' &= (\\frac{x}{0.3048}) + (0* v_x) + (0*y) + (0 * v_y) \\\\\n", + "z_y' &= (0*x) + (0* v_x) + (\\frac{y}{0.3048}) + (0 * v_y) \\\\\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "To be clear about my intentions here, this is a pretty simple problem, and we could have easily found the equations directly without going through the dimensional analysis that I did above. In fact, an earlier draft did just that. But it is useful to remember that the equations of the Kalman filter imply a specific dimensionality for all of the matrices, and when I start to get lost as to how to design something it is often extremely useful to look at the matrix dimensions. Not sure how to design $\\textbf{H}$? \n", + "Here is the Python that implements this:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", + " [0, 0, 1/0.3048, 0]])\n", + "print(f1.H)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[ 3.2808399 0. 0. 0. ]\n", + " [ 0. 0. 3.2808399 0. ]]\n" + ] + } + ], + "prompt_number": 98 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### **Step 5**: Design the Measurement Noise Matrix\n", + "\n", + "In this step we need to mathematically model the noise in our sensor. For now we will make the simple assumption that the $x$ and $y$ variables are independent Gaussian processes. That is, the noise in x is not in any way dependent on the noise in y, and the noise is normally distributed about the mean. For now let's set the variance for $x$ and $y$ to be 5 for each. They are independent, so there is no covariance, and our off diagonals will be 0. This gives us:\n", + "\n", + "$$\\mathbf{R} = \\begin{bmatrix}5&0\\\\0&5\\end{bmatrix}$$\n", + "\n", + "It is a $2{\\times}2$ matrix because we have 2 sensor inputs, and covariance matrices are always of size $n{\\times}n$ for $n$ variables. In Python we write:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1.R = np.mat([[5,0],\n", + " [0, 5]])\n", + "print (f1.R)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[5 0]\n", + " [0 5]]\n" + ] + } + ], + "prompt_number": 99 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Step 6: Design the Process Noise Matrix\n", + "Finally, we design the process noise. We don't yet have a good way to model process noise, so for now we will assume there is a small amount of process noise, say 0.1 for each state variable. Later we will tackle this admittedly difficult topic in more detail. We have 4 state variables, so we need a $4{\\times}4$ covariance matrix:\n", + "\n", + "$$\\mathbf{Q} = \\begin{bmatrix}0.1&0&0&0\\\\0&0.1&0&0\\\\0&0&0.1&0\\\\0&0&0&0.1\\end{bmatrix}$$\n", + "\n", + "In Python I will use the numpy eye helper function to create an identity matrix for us, and multipy it by 0.1 to get the desired result." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1.Q = np.eye(4) * 0.1\n", + "print(f1.Q)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[ 0.1 0. 0. 0. ]\n", + " [ 0. 0.1 0. 0. ]\n", + " [ 0. 0. 0.1 0. ]\n", + " [ 0. 0. 0. 0.1]]\n" + ] + } + ], + "prompt_number": 100 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### **Step 7**: Design Initial Conditions\n", + "\n", + "For our simple problem we will set the initial position at (0,0) with a velocity of (0,0). Since that is a pure guess, we will set the covariance matrix $\\small\\mathbf{P}$ to a large value.\n", + "$$ \\mathbf{x} = \\begin{bmatrix}0\\\\0\\\\0\\\\0\\end{bmatrix}\\\\\n", + "\\mathbf{P} = \\begin{bmatrix}500&0&0&0\\\\0&500&0&0\\\\0&0&500&0\\\\0&0&0&500\\end{bmatrix}$$\n", + "\n", + "In Python we implement that with" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1.x = np.mat([0,0,0,0]).T\n", + "f1.P = np.eye(4) * 500.\n", + "print(f1.x)\n", + "print()\n", + "print (f1.P)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[0]\n", + " [0]\n", + " [0]\n", + " [0]]\n", + "\n", + "[[ 500. 0. 0. 0.]\n", + " [ 0. 500. 0. 0.]\n", + " [ 0. 0. 500. 0.]\n", + " [ 0. 0. 0. 500.]]\n" + ] + } + ], + "prompt_number": 101 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Implement the Filter Code" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Design is complete, now we just have to write the Python code to run our filter, and output the data in the format of our choice. To keep the code clear, let's just print a plot of the track. We will run the code for 30 iterations." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "f1 = KalmanFilter(dim_x=4, dim_z=2)\n", + "dt = 1.0 # time step\n", + "\n", + "f1.F = np.mat ([[1, dt, 0, 0],\n", + " [0, 1, 0, 0],\n", + " [0, 0, 1, dt],\n", + " [0, 0, 0, 1]])\n", + "f1.B = 0.\n", + "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", + " [0, 0, 1/0.3048, 0]])\n", + "\n", + "f1.R = np.eye(2) * 5\n", + "f1.Q = np.eye(4) * .1\n", + "\n", + "f1.x = np.mat([0,0,0,0]).T\n", + "f1.P = np.eye(4) * 500.\n", + "\n", + "# initialize storage and other variables for the run\n", + "count = 30\n", + "xs, ys = [],[]\n", + "pxs, pys = [],[]\n", + "\n", + "s = PosSensor1 ([0,0], (2,1), 1.)\n", + "\n", + "for i in range(count):\n", + " pos = s.read()\n", + " z = np.mat([[pos[0]],[pos[1]]])\n", + "\n", + " f1.predict ()\n", + " f1.update (z)\n", + "\n", + " xs.append (f1.x[0,0])\n", + " ys.append (f1.x[2,0])\n", + " pxs.append (pos[0]*.3048)\n", + " pys.append(pos[1]*.3048)\n", + "\n", + "p1, = plt.plot (xs, ys, 'r--')\n", + "p2, = plt.plot (pxs, pys)\n", + "plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nDRErekUfOgAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 102 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "I encourage you to play with this, setting $\\mathbf{Q}$ and $\\mathbf{R}$ to various values. However, we did a fair amount of that sort of thing in the last chapters, and we have a lot of material to cover, so I will move on to more complicated cases where we will also have a chance to experience changing these values.\n", + "\n", + "Now I will run the same Kalman filter with the same settings, but also plot the covariance ellipse for $x$ and $y$. First, the code without explanation, so we can see the output. I print the last covariance to see what it looks like. But before you scroll down to look at the results, what do you think it will look like? You have enough information to figure this out but this is still new to you, so don't be discouraged if you get it wrong." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import stats\n", + "\n", + "f1 = KalmanFilter(dim_x=4, dim_z=2)\n", + "dt = 1.0 # time step\n", + "\n", + "f1.F = np.mat ([[1, dt, 0, 0],\n", + " [0, 1, 0, 0],\n", + " [0, 0, 1, dt],\n", + " [0, 0, 0, 1]])\n", + "f1.B = 0.\n", + "f1.H = np.mat ([[1/0.3048, 0, 0, 0],\n", + " [0, 0, 1/0.3048, 0]])\n", + "\n", + "f1.R = np.eye(2) * 5\n", + "f1.Q = np.eye(4) * .1\n", + "\n", + "f1.x = np.mat([0,0,0,0]).T\n", + "f1.P = np.eye(4) * 500.\n", + "\n", + "# initialize storage and other variables for the run\n", + "count = 30\n", + "xs, ys = [],[]\n", + "pxs, pys = [],[]\n", + "\n", + "s = PosSensor1 ([0,0], (2,1), 1.)\n", + "\n", + "for i in range(count):\n", + " pos = s.read()\n", + " z = np.mat([[pos[0]],[pos[1]]])\n", + "\n", + " f1.predict ()\n", + " f1.update (z)\n", + "\n", + " xs.append (f1.x[0,0])\n", + " ys.append (f1.x[2,0])\n", + " pxs.append (pos[0]*.3048)\n", + " pys.append(pos[1]*.3048)\n", + "\n", + " # plot covariance of x and y\n", + " cov = np.mat([[f1.P[0,0], f1.P[2,0]], \n", + " [f1.P[0,2], f1.P[2,2]]])\n", + " \n", + " #e = stats.sigma_ellipse (cov=cov, x=f1.x[0,0], y=f1.x[2,0])\n", + " #stats.plot_sigma_ellipse(ellipse=e)\n", + " stats.plot_covariance_ellipse((f1.x[0,0], f1.x[2,0]), cov=cov)\n", + "\n", + " \n", + "p1, = plt.plot (xs, ys, 'r--')\n", + "p2, = plt.plot (pxs, pys)\n", + "plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", + "plt.show()\n", + "print(\"final P is:\")\n", + "print(f1.P)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "final P is:\n", + "[[ 0.30660483 0.12566239 0. 0. ]\n", + " [ 0.12566239 0.24399092 0. 0. ]\n", + " [ 0. 0. 0.30660483 0.12566239]\n", + " [ 0. 0. 0.12566239 0.24399092]]\n" + ] + } + ], + "prompt_number": 103 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Did you correctly predict what the covariance matrix and plots would look like? Perhaps you were expecting a tilted ellipse, as in the last chapters. If so, recall that in those chapters we were not plotting $x$ against $y$, but $x$ against $\\dot{x}$. $x$ *is correlated* to $\\dot{x}$, but $x$ is not correlated or dependent on $y$. Therefore our ellipses are not tilted. Furthermore, the noise for both $x$ and $y$ are modelled to have the same value, 5, in $\\mathbf{R}$. If we were to set R to, for example,\n", + "\n", + "$$\\mathbf{R} = \\begin{bmatrix}10&0\\\\0&5\\end{bmatrix}$$\n", + "\n", + "we would be telling the Kalman filter that there is more noise in $x$ than $y$, and our ellipses would be longer than they are tall.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final P tells us everything we need to know about the correlation beween the state variables. If we look at the diagonal alone we see the variance for each variable. In other words $\\mathbf{P}_{0,0}$ is the variance for x, $\\mathbf{P}_{1,1}$ is the variance for $\\dot{x}$, $\\mathbf{P}_{2,2}$ is the variance for y, and $\\mathbf{P}_{3,3}$ is the variance for $\\dot{y}$. We can extract the diagonal of a matrix using *numpy.diag()*." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print(np.diag(f1.P))" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0.30660483 0.24399092 0.30660483 0.24399092]\n" + ] + } + ], + "prompt_number": 104 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The covariance matrix contains four $2{\\times}2$ matrices that you should be able to easily pick out. This is due to the correlation of $x$ to $\\dot{x}$, and of $y$ to $\\dot{y}$. The upper left hand side shows the covariance of $x$ to $\\dot{x}$. Let's extract and print, and plot it." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "c = f1.P[0:2,0:2]\n", + "print(c)\n", + "stats.plot_covariance_ellipse((0,0), cov=c)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[[ 0.30660483 0.12566239]\n", + " [ 0.12566239 0.24399092]]\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 105 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The covariance contains the data for $x$ and $\\dot{x}$ in the upper left because of how it is organized. Recall that entries $\\mathbf{P}_{i,j}$ and $\\mathbf{P}_{j,i}$ contain $p\\sigma_1\\sigma_2$.\n", + "\n", + "Finally, let's look at the lower left side of $\\mathbf{P}$, which is all 0s. Why 0s? Consider $\\mathbf{P}_{3,0}$. That stores the term $p\\sigma_3\\sigma_0$, which is the covariance between $\\dot{y}$ and $x$. These are independent, so the term will be 0. The rest of the terms are for similarly independent variables." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Tracking a Ball" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's turn our attention to a situation where the physics of the object that we are tracking is constrained. A ball thrown in a vacuum must obey Newtonian laws. In a constant gravitational field it will travel in a parabola. I will assume you are familiar with the derivation of the formula:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "y &= \\frac{g}{2}t^2 + v_{y0} t + y_0 \\\\\n", + "x &= v_{x0} t + x_0\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "where $g$ is the gravational constant, $t$ is time, $v_{x0}$ and $v_{y0}$ are the initial velocities in the x and y plane. If the ball is thrown with an initial velocity of $v$ at angle $\\theta$ above the horizon, we can compute $v_{x0}$ and $v_{y0}$ as\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "v_{x0} = v \\cos{\\theta} \\\\\n", + "v_{y0} = v \\sin{\\theta}\n", + "\\end{aligned}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Because we don't have real data we will start by writing a simulator for a ball. As always, we add a noise term independent of time so we can simulate noise sensors." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from math import radians, sin, cos\n", + "class BallTrajectory2D(object):\n", + " def __init__(self, x0, y0, velocity, theta_deg=0., g=9.8, noise=[0.0,0.0]):\n", + " theta = radians(theta_deg)\n", + " self.vx0 = velocity * cos(theta)\n", + " self.vy0 = velocity * sin(theta)\n", + " \n", + " self.x0 = x0\n", + " self.y0 = y0\n", + " \n", + " self.g = g\n", + " self.noise = noise\n", + " \n", + " def position(self, t):\n", + " \"\"\" returns (x,y) tuple of ball position at time t\"\"\"\n", + " \n", + " x = self.vx0*t + self.x0\n", + " y = -0.5*self.g*t**2 + self.vy0*t + self.y0\n", + " \n", + " return (x +random.randn()*self.noise[0], y +random.randn()*self.noise[1])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 106 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So to create a trajectory starting at (0,15) with a velocity of $60 \\frac{m}{s}$ and an angle of $65^\\circ$ we would write:\n", + "\n", + " traj = BallTrajectory2D (x0=0, y0=15, velocity=100, theta_deg=60)\n", + " \n", + "and then call $\\verb,traj.position(t),$ for each time step. Let's test this " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def test_ball_vacuum(noise):\n", + " y = 15\n", + " x = 0\n", + " ball = BallTrajectory2D(x0=x, y0=y, theta_deg=60., velocity=100., noise=noise)\n", + " t = 0\n", + " dt = 0.25\n", + " while y >= 0:\n", + " x,y = ball.position(t)\n", + " t += dt\n", + " if y >= 0:\n", + " plt.scatter(x,y)\n", + " \n", + " plt.axis('equal')\n", + " plt.show()\n", + " \n", + "test_ball_vacuum([0,0]) # plot ideal ball position\n", + "test_ball_vacuum([1,1]) # plot with noise " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 107 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "test_ball_vacuum([3,0]) # plot with noise in x onlyThis looks reasonable, so let's continue (excercise for the reader: validate this simulation more robustly)." + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "Step 1: Choose the State Variables" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We might think to use the same state variables as used for tracking the dog. However, this will not work. Recall that the Kalman filter state transition must be written as $\\mathbf{x}' = \\mathbf{F x}$, which means we must calculate the current state from the previous state. Our assumption is that the ball is travelling in a vacuum, so the velocity in x is a constant, and the acceleration in y is solely due to the gravitational constant $g$. We can discretize the Newtonian equations using the well known Euler method in terms of $\\Delta t$ are:\n", + "\n", + "$$\\begin{aligned}\n", + "x_t &= v_{x(t-1)} {\\Delta t} \\\\\n", + "v_{xt} &= vx_{t-1}\n", + "\\\\\n", + "y_t &= -\\frac{g}{2} {\\Delta t}^2 + vy_{t-1} {\\Delta t} + y_{t-1} \\\\\n", + "v_{yt} &= -g {\\Delta t} + v_{y(t-1)} \\\\\n", + "\\end{aligned}\n", + "$$\n", + "> **sidebar**: *Euler's method integrates a differential equation stepwise by assuming the slope (derivative) is constant at time $t$. In this case the derivative of the position is velocity. At each time step $\\Delta t$ we assume a constant velocity, compute the new position, and then update the velocity for the next time step. There are more accurate methods, such as Runge-Kutta available to us, but because we are updating the state with a measurement in each step Euler's method is very accurate.*\n", + "\n", + "This implies that we need to incorporate acceleration for $y$ into the Kalman filter, but not for $x$. This suggests the following state variables.\n", + "\n", + "$$\n", + "\\mathbf{x} = \n", + "\\begin{bmatrix}\n", + "x \\\\\n", + "\\dot{x} \\\\\n", + "y \\\\\n", + "\\dot{y} \\\\\n", + "\\ddot{y}\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "**Step 2:** Design State Transition Function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our next step is to design the state transistion function. Recall that the state transistion function is implemented as a matrix $\\mathbf{F}$ that we multipy with the previous state of our system to get the next state$\\mathbf{x}' = \\mathbf{Fx}$.\n", + "\n", + "I will not belabor this as it is very similar to the 1-D case we did in the previous chapter. Our state equations for position and velocity would be:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "x' &= (1*x) + (\\Delta t * v_x) + (0*y) + (0 * v_y) + (0 * a_y) \\\\\n", + "v_x &= (0*x) + (1*v_x) + (0*y) + (0 * v_y) + (0 * a_y) \\\\\n", + "y' &= (0*x) + (0* v_x) + (1*y) + (\\Delta t * v_y) + (\\frac{1}{2}{\\Delta t}^2*a_y) \\\\\n", + "v_y &= (0*x) + (0*v_x) + (0*y) + (1*v_y) + (\\Delta t * a_y) \\\\\n", + "a_y &= (0*x) + (0*v_x) + (0*y) + (0*v_y) + (1 * a_y) \n", + "\\end{aligned}\n", + "$$\n", + "\n", + "Note that none of the terms include $g$, the gravitational constant. This is because the state variable $\\ddot{y}$ will be initialized with $g$, or -9.81. Thus the function $\\mathbf{F}$ will propagate $g$ through the equations correctly. \n", + "\n", + "In matrix form we write this as:\n", + "\n", + "$$\n", + "\\mathbf{F} = \\begin{bmatrix}\n", + "1 & \\Delta t & 0 & 0 & 0 \\\\\n", + "0 & 1 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 1 & \\Delta t & \\frac{1}{2}{\\Delta t}^2 \\\\\n", + "0 & 0 & 0 & 1 & \\Delta t \\\\\n", + "0 & 0 & 0 & 0 & 1\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "Interlude: Test State Transition" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The Kalman filter class provides us with useful defaults for all of the class variables, so let's take advantage of that and test the state transistion function before continuing. Here we construct a filter as specified in Step 2 above. We compute the initial velocity in x and y using trigonometry, and then set the initial condition for $x$. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from KalmanFilter import KalmanFilter\n", + "from math import sin,cos,radians\n", + "\n", + "def ball_kf(x, y, omega, v0, dt):\n", + "\n", + " g = 9.8 # gravitational constant\n", + "\n", + " f1 = KalmanFilter(dim_x=5, dim_z=2)\n", + "\n", + "\n", + " ay = .5*dt**2\n", + "\n", + " f1.F = np.mat ([[1, dt, 0, 0, 0], # x = x0+dx*dt\n", + " [0, 1, 0, 0, 0], # dx = dx\n", + " [0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2\n", + " [0, 0, 0, 1, dt], # dy = dy0 + ddy*dt \n", + " [0, 0, 0, 0, 1]]) # ddy = -g.\n", + " \n", + " # compute velocity in x and y\n", + " omega = radians(omega)\n", + " vx = cos(omega) * v0\n", + " vy = sin(omega) * v0\n", + "\n", + " f1.x = np.mat([x, vx, y, vy, -g]).T\n", + " \n", + " return f1" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 108 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can test the filter by calling predict until $y=0$, which corresponds to the ball hitting the ground. We will graph the output against the idealized computation of the ball's position. If the model is correct, the Kalman filter prediction should match the ideal model very closely. We will draw the ideal position with a green circle, and the Kalman filter's output with '+' marks." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "y = 15.\n", + "x = 0.\n", + "theta = 20. # launch angle\n", + "v0 = 100.\n", + "dt = 0.1 # time step\n", + "\n", + "ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[0,0])\n", + "f1 = ball_kf(x,y,theta,v0,dt)\n", + "\n", + "t = 0\n", + "while f1.x[2,0] > 0:\n", + " t += dt\n", + " f1.predict() \n", + " x,y = ball.position(t)\n", + " p1 = plt.scatter(f1.x[0,0], f1.x[2,0], color='black', marker='+', s=75)\n", + " p2 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n", + "\n", + "plt.legend([p1,p2], ['Kalman filter', 'idealized'])\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 109 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see, the Kalman filter agrees with the physics model very closely. If you are interested in pursuing this further, try altering the initial velocity, the size of dt, and $\\theta$, and plot the error at each step. However, the important point is to test your design as soon as possible; if the design of the state transistion is wrong all subsequent effort may be wasted. More importantly, it can be extremely difficult to tease out an error in the state transition function when the filter incorporates measurment updates." + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "**Step 3**: Design the Motion Function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We have no control inputs to the ball flight, so this step is trivial - set the motion transition function $\\small\\mathbf{B}=0$. This is done for us by the class when it is created so we can skip this step." + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "**Step 4**: Design the Measurement Function" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The measurement function defines how we go from the state variables to the measurements using the equation $\\mathbf{z} = \\mathbf{Hx}$. We will assume that we have a sensor that provides us with the position of the ball in (x,y), but cannot measure velocities or accelerations. Therefore our function must be:\n", + "\n", + "$$\n", + "\\begin{bmatrix}z_x \\\\ z_y \\end{bmatrix}= \n", + "\\begin{bmatrix}\n", + "1 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 & 0\n", + "\\end{bmatrix} * \n", + "\\begin{bmatrix}\n", + "x \\\\\n", + "\\dot{x} \\\\\n", + "y \\\\\n", + "\\dot{y} \\\\\n", + "\\ddot{y}\\end{bmatrix}$$\n", + "\n", + "where\n", + "\n", + "$$\\mathbf{F} = \\begin{bmatrix}\n", + "1 & 0 & 0 & 0 & 0 \\\\\n", + "0 & 0 & 1 & 0 & 0\n", + "\\end{bmatrix}$$" + ] + }, + { + "cell_type": "heading", + "level": 5, + "metadata": {}, + "source": [ + "**Step 5**: Design the Measurement Noise Matrix" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As with the robot, we will assume that the error is independent in $x$ and $y$. In this case we will start by assuming that the measurement error in x and y are 0.5 meters. Hence,\n", + "\n", + "$$\\mathbf{R} = \\begin{bmatrix}0.5&0\\\\0&0.5\\end{bmatrix}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Step 6: Design the Process Noise Matrix\n", + "Finally, we design the process noise. As with the robot tracking example, we don't yet have a good way to model process noise. However, we are assuming a ball moving in a vacuum, so there should be little to no process noise. For now we will assume the process noise is 0.02 for each state variable. This is a bit silly - if we were in a perfect vacuum then our predictions would be perfect, and we would have no need for a Kalman filter. We will soon alter this example to be more realistic by incorporating air drag and ball spin. \n", + "\n", + "We have 5 state variables, so we need a $5{\\times}5$ covariance matrix:\n", + "\n", + "$$\\mathbf{Q} = \\begin{bmatrix}0.02&0&0&0&0\\\\0&0.02&0&0&0\\\\0&0&0.02&0&0\\\\0&0&0&0.02&0\\\\0&0&0&0&0.02\\end{bmatrix}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Step 7: Design the Initial Conditions\n", + "\n", + "We already performed this step when we tested the state transistion function. Recall that we computed the initial velocity for $x$ and $y$ using trigonometry, and set the value of $\\mathbf{x}$ with:\n", + "\n", + " omega = radians(omega)\n", + " vx = cos(omega) * v0\n", + " vy = sin(omega) * v0\n", + "\n", + " f1.x = np.mat([x, vx, y, vy, -g]).T\n", + " \n", + " \n", + "With all the steps done we are ready to implement our filter and test it. First, the implementation:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from KalmanFilter import KalmanFilter\n", + "from math import sin,cos,radians\n", + "\n", + "def ball_kf(x, y, omega, v0, dt):\n", + "\n", + " g = 9.8 # gravitational constant\n", + "\n", + " f1 = KalmanFilter(dim_x=5, dim_z=2)\n", + "\n", + "\n", + " ay = .5*dt**2\n", + "\n", + " f1.F = np.mat ([[1, dt, 0, 0, 0], # x = x0+dx*dt\n", + " [0, 1, 0, 0, 0], # dx = dx\n", + " [0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2\n", + " [0, 0, 0, 1, dt], # dy = dy0 + ddy*dt \n", + " [0, 0, 0, 0, 1]]) # ddy = -g.\n", + "\n", + " f1.H = np.mat([\n", + " [1, 0, 0, 0, 0],\n", + " [0, 0, 1, 0, 0]])\n", + " \n", + " f1.R *= 0.5\n", + " f1.Q *= 0.02\n", + "\n", + " omega = radians(omega)\n", + " vx = cos(omega) * v0\n", + " vy = sin(omega) * v0\n", + "\n", + " f1.x = np.mat([x,vx,y,vy,-9.8]).T\n", + " \n", + " return f1" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 110 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will test the filter by generating measurements for the ball using the ball simulation class." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "y = 15.\n", + "x = 0.\n", + "theta = 20. # launch angle\n", + "v0 = 100.\n", + "dt = 1/10. # time step\n", + "\n", + "ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[1,1])\n", + "f1 = ball_kf(x,y,theta,v0,dt)\n", + "\n", + "t = 0\n", + "xs = []\n", + "ys = []\n", + "while f1.x[2,0] > 0:\n", + " t += dt\n", + " x,y = ball.position(t)\n", + " z = np.mat([[x,y]]).T\n", + "\n", + " f1.update(z)\n", + " xs.append(f1.x[0,0])\n", + " ys.append(f1.x[2,0])\n", + " \n", + " f1.predict() \n", + " \n", + " #p1 = plt.scatter(f1.x[0,0], f1.x[2,0], color='black', marker='+', s=75)\n", + " p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n", + "\n", + "p2, = plt.plot (xs, ys,lw=2)\n", + "plt.legend([p2,p1], ['Kalman filter', 'Measurements'])\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 111 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We see that the Kalman filter reasonably tracks the ball. However, as already explained, this is a silly example; we can predict trajectories in a vacuum with arbitrary precision; using a Kalman filter in this example is a needless complication." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Tracking a Ball in Air" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are now ready to design a practical Kalman filter application. For this problem we assume that we are tracking a ball travelling through the Earth's atmosphere. The path of the ball is influenced by wind, drag, and the rotation of the ball. We will assume that our sensor is a camera; code that we will not implement will perform some type of image processing to detect the position of the ball. This is typically called *blob detection* in computer vision. However, image processing code is not perfect; in any given frame it is possible to either detect no blob or to detect spurious blobs that do not correspond to the ball. Finally, we will not assume that we know the starting position, angle, or rotation of the ball; the tracking code will have to initiate tracking based on the measurements that are provided. The main simplification that we are making here is a 2D world; we assume that the ball is always travelling orthogonal to the plane of the camera's sensor. We have to make that simplification at this point because we have not yet discussed how we might extract 3D information from a camera, which necessarily provides only 2D data. \n", + "\n", + "Our first step is to learn the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a nonspinning, smooth ball, such as a cannonball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n", + "\n", + "A ball moving through air encounters wind resistance. This imparts a force on the wall, called *drag*, which alters the flight of the ball. In Giordano this is denoted as\n", + "\n", + "$$F_{drag} = -B_2v^2$$\n", + "\n", + "where $B_2$ is a coefficient derived experimentally, and $v$ is the velocity of the object. $F_{drag}$ can be factored into $x$ and $y$ components with\n", + "\n", + "$$F_{drag,x} = -B_2v v_x\\\\\n", + "F_{drag,y} = -B_2v v_y\n", + "$$\n", + "\n", + "If $m$ is the mass of the ball, we can use $F=ma$ to compute the acceleration as\n", + "\n", + "$$ a_x = -\\frac{B_2}{m}v v_x\\\\\n", + "a_y = -\\frac{B_2}{m}v v_y$$\n", + "\n", + "Giordano provides this function for $\\frac{B_2}{m}$, which takes air density, the cross section of a baseball, and its roughness into account. Understand that this is an approximation based on wind tunnel tests and several simplifying assumptions. \n", + "\n", + "$$\\frac{B_2}{m} = 0.0039 + \\frac{0.0058}{1+e^{(v-35)/5}}$$\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from math import sqrt, exp\n", + "def a_drag(v):\n", + " #return 4.0E-5 * v\n", + " return 0.0039 + 0.0058 / (1. + exp((v-35.)/5.))\n", + "\n", + "mph_to_m_s = 0.447 # mph to meters/sec\n", + "v = 50\n", + "y = 1\n", + "x = 0\n", + "dt = .001\n", + "theta = radians(35)\n", + "\n", + "def solve(x,y,v, v_wind):\n", + " vx = v*cos(theta)\n", + " vy = v*sin(theta)\n", + " while y >= 0:\n", + " # Euler equations for x and y\n", + " x += vx*dt\n", + " y += vy*dt\n", + "\n", + " # force due to air drag \n", + " v = sqrt ((vx-v_wind)**2 + vy**2) \n", + " F = a_drag(v)*v\n", + "\n", + " # euler's equations for vx and vy\n", + " vx = vx - F*(vx-v_wind)*dt\n", + " vy = vy - 9.8*dt - F*vy*dt\n", + " \n", + " #plt.scatter(x,y)\n", + " return x, y\n", + " \n", + "x,y = solve(0, 1, v, 10*mph_to_m_s)\n", + "x2,y2 = solve(0, 1, v, -10*mph_to_m_s)\n", + "print (x,x2)\n", + "(x-x2)*3.28" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "132.904542049 115.061343571\n" + ] + }, + { + "metadata": {}, + "output_type": "pyout", + "prompt_number": 289, + "text": [ + "58.52569100894303" + ] + } + ], + "prompt_number": 289 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Realistic 2D Position Sensors" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The position sensor in the last example are not very realistic. In general there is no 'raw' sensor that provides (x,y) coordinates. We have GPS, but GPS already uses a Kalman filter to create a filtered output; we should not be able to improve the signal by passing it through another Kalman filter unless we incorporate additional sensors to provide additional information. We will tackle that problem later. \n", + "\n", + "Consider the following set up. In an open field we put two transmitters at a known location, each transmitting a signal that we can detect. We process the signal and determine how far we are from that signal, with some noise. First, let's look at a visual depiction of that." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "\n", + "circle1=plt.Circle((-4,0),5,color='r',fill=False,linewidth=10, alpha=.7)\n", + "circle2=plt.Circle((4,0),5,color='b', fill=False, linewidth=5, alpha=.7)\n", + "\n", + "fig = plt.gcf()\n", + "ax = fig.gca()\n", + "\n", + "plt.axis('equal')\n", + "plt.xlim((-10,10))\n", + "plt.ylim((-10,10))\n", + "\n", + "plt.plot ([-4,0], [0,3], 'r')\n", + "plt.plot ([4,0], [0,3], 'b')\n", + "plt.text(-4, -.5, \"A\", fontsize=16, horizontalalignment='center')\n", + "plt.text(4, -.5, \"B\", fontsize=16, horizontalalignment='center')\n", + "#plt.scatter ([-4],[0], 'r')\n", + "\n", + "ax.add_artist(circle1)\n", + "ax.add_artist(circle2)\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 113 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here I have attempted to show transmitter A, drawn in red, at (-4,0) and a second one B, drawn in blue, at (4,0). The red and blue circles show the range from the transmitters to the robot, with the width illustrating the effect of the $1\\sigma$ angular error for each transmitter. Here I have given the red transmitter more error than the blue one. The most probable position for the robot is where the two circles intersect, which I have depicted with the red and blue lines. You will object that we have two intersections, not one, but we will see how we deal with that when we design the measurement function.\n", + "\n", + "This is a very common sensor set up. Aircraft still use this system to navigate, where it is called DME (Distance Measuring Equipment). Today GPS is a much more common navigation sytem, but I have worked on an aircraft where we integrated sensors like this into our filter along with the GPS, INS, altimeters, etc. We will tackle what is called *multi-sensor fusion* later; for now we will just address this simple configuration.\n", + "\n", + "The first step is to design our state variables. We will assume that the robot is travelling in a straight direction with constant velocity. This is unlikely to be true for a long period of time, but is acceptable for short periods of time. This does not differ from the previous problem - we will want to track the values for the robot's position and velocity. Hence,\n", + "\n", + "$$\\mathbf{x} = \n", + "\\begin{bmatrix}x\\\\v_x\\\\y\\\\v_y\\end{bmatrix}$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The next step is to design the state transistion function. This also will be the same as the previous problem, so without further ado,\n", + "\n", + "$$\n", + "\\mathbf{x}' = \\begin{bmatrix}1& \\Delta t& 0& 0\\\\0& 1& 0& 0\\\\0& 0& 1& \\Delta t\\\\ 0& 0& 0& 1\\end{bmatrix}\\mathbf{x}$$\n", + "\n", + "The next step is to design the control inputs. We have none, so we set ${\\mathbf{B}}=0$.\n", + "\n", + "The next step is to design the measurement function $\\mathbf{z} = \\mathbf{Hx}$. We can model the measurement using the Pythagorean theorem.\n", + "\n", + "$$\n", + "z_a = \\sqrt{(x-x_A)^2 + (y-y_A)^2} + v_a\\\\[1em]\n", + "z_b = \\sqrt{(x-x_B])^2 + (y-y_B)^2} + v_b\n", + "$$\n", + "\n", + "where $v_a$ and $v_b$ are white noise.\n", + "\n", + "We see an immediate problem. The Kalman filter is designed for linear equations, and this is obviously nonlinear. In the next chapters we will look at several ways to handle nonlinear problems in a robust way, but for now we will do something simpler. If we know the approximate position of the robot than we can linearize these equations around that point. I could develop the generalized mathematics for this technique now, but instead let me just present the worked example to give context to that development." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Instead of computing $\\mathbf{H}$ we will compute the partial derivative of $\\mathbf{H}$ with respect to the robot's position $\\mathbf{x}$. You are probably familiar with the concept of partial derivative, but if not, it just means how $\\mathbf{H}$ changes with respect to the robot's position.\n", + "\n", + "$$\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}=\n", + "\\small\\begin{bmatrix}\n", + "\\frac{(x_r - x_A)}{\\sqrt{(x_r-x_A)^2 + (y_r-y_A)^2}} & 0 & \n", + "\\frac{(y_r - y_A)}{\\sqrt{(x_r-x_A)^2 + (y_r-y_A)^2}} & 0 \\\\\n", + "\\frac{(x_r - x_B)}{\\sqrt{(x_r-x_B)^2 + (y_r-y_B)^2}} & 0 &\n", + "\\frac{(y_r - y_B)}{\\sqrt{(x_r-x_B)^2 + (y_r-y_B)^2}} & 0 \\\\\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In a nutshell, the entry (0,0) contains the difference between the x coordinate of the robot and transmitter A's x coordinate divided by the distance between the robot and A. (2,0) contains the same, except for the y coordintates of the robot and transmitters. The bottom row contains the same computations, except for transmitter B. The 0 entries account for the velocity components of the state variables; naturally the range does notvide us with velocity.\n", + "\n", + "The values in this matrix change as the robot's position changes, so this is no longer a constant; we will have to recompute it for every time step of the filter.\n", + "\n", + "If you look at this you may realize that this is just a computation of x/dist and y/dist, so we can switch this to a trigometic form with no loss of generality:\n", + "\n", + "$$\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}=\n", + "\\begin{bmatrix}\n", + "-\\cos{\\theta_A} & 0 & -\\sin{\\theta_A} & 0 \\\\\n", + "-\\cos{\\theta_B} & 0 & -\\sin{\\theta_B} & 0\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "However, this raises a huge problem. We are no longer computing $\\mathbf{H}$, but $\\Delta\\mathbf{H}$, the change of $\\mathbf{H}$. If we passed this into our Kalman filter without altering the rest of the design the output would be nonsense. Recall, for example, that we multiply $\\mathbf{Hx}$ to generate the measurements that would result from the given estimate of $\\mathbf{x}$ But now that $\\mathbf{H}$ is linearized around our position it contains the *change* in the measurement function. \n", + "\n", + "We are forced, therefore, to use the *change* in $\\mathbf{x}$ for our state variables. So we have to go back and redesign our state variables. \n", + "\n", + ">Please note this is a completely normal occurance in designing Kalman filters. The textbooks present examples like this as *fait accompli*, as if it is trivially obvious that the state variables needed to be velocities, not positions. Perhaps once you do enough of these problems it would be trivially obvious, but at that point why are you reading a textbook? I find myself reading through a presentation multiple times, trying to figure out why they made a choice, finally to realize that it is because of the consequences of something on the next page. My presentation is longer, but it reflects what actually happens when you design a filter. You make what seem reasonable design choices, and as you move forward you discover properties that require you to recast your earlier steps. As a result, I am going to somewhat abandon my **step 1**, **step 2**, etc., approach, since so many real problems are not quite that straightforward." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If our state variables contain the velocities of the robot and not the position then how do we track where the robot is? We can't. Kalman filters that are linearized in this fashion use what is called a *nominal trajectory* - i.e. you assume a position and track direction, and then apply the changes in velocity and acceleration to compute the changes in that trajectory. How could it be otherwise? Recall the graphic showing the intersection of the two range circles - there are two areas of intersection. Think of what this would look like if the two transmitters were very close to each other - the intersections would be two very long cresent shapes. This Kalman filter, as designed, has no way of knowing your true position from only distance measurements to the transmitters. Perhaps your mind is already leaping to ways of working around this problem. If so, stay engaged, as later sections and chapters will provide you with these techniques. Presenting the full solution all at once leads to more confusion than insight, in my opinion. \n", + "\n", + "So let's redesign our *state transition function*. We are assuming constant velocity and no acceleration, giving state equations of\n", + "$$\n", + "\\dot{x}' = \\dot{x} \\\\\n", + "\\ddot{x}' = 0 \\\\\n", + "\\dot{y}' = \\dot{y} \\\\\n", + "\\dot{y}' = 0$$\n", + "\n", + "This gives us the the *state transition function* of\n", + "\n", + "$$\n", + "\\mathbf{F} = \\begin{bmatrix}0 &1 & 0& 0\\\\0& 0& 0& 0\\\\0& 0& 0& 1\\\\ 0& 0& 0& 0\\end{bmatrix}$$\n", + "\n", + "A final complication comes from the measurements that we pass in. $\\mathbf{Hx}$ is now computing the *change* in the measurement from our nominal position, so the measurement that we pass in needs to be not the range to A and B, but the *change* in range from our measured range to our nomimal position. \n", + "\n", + "There is a lot here to take in, so let's work through the code bit by bit. First we will define a function to compute $\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}$ for each time step." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def H_of (pos, pos_A, pos_B):\n", + " \"\"\" Given the position of our object at 'pos' in 2D, and two transmitters\n", + " A and B at positions 'pos_A' and 'pos_B', return the partial derivative\n", + " of H\n", + " \"\"\"\n", + " \n", + " from math import sin, cos, atan2\n", + "\n", + " theta_a = atan2(pos_a[1]-pos[1], pos_a[0] - pos[0])\n", + " theta_b = atan2(pos_b[1]-pos[1], pos_b[0] - pos[0])\n", + "\n", + " return np.mat([[-cos(theta_a), 0, -sin(theta_a), 0],\n", + " [-cos(theta_b), 0, -sin(theta_b), 0]])" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 114 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we need to create our simulated sensor. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "class DMESensor(object):\n", + " def __init__(self, pos_a, pos_b, noise_factor=1.0):\n", + " self.A = pos_a\n", + " self.B = pos_b\n", + " self.noise_factor = noise_factor\n", + " \n", + " def range_of (self, pos):\n", + " \"\"\" returns tuple containing noisy range data to A and B\n", + " given a position 'pos'\n", + " \"\"\"\n", + " \n", + " ra = math.sqrt((self.A[0] - pos[0])**2 + (self.A[1] - pos[1])**2)\n", + " rb = math.sqrt((self.B[0] - pos[0])**2 + (self.B[1] - pos[1])**2)\n", + " \n", + " return (ra + random.randn()*self.noise_factor, \n", + " rb + random.randn()*self.noise_factor)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 115 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's write the code to compute $\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}$." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def dist(a,b):\n", + " return math.sqrt ((a[0]-b[0])**2 + (a[1]-b[1])**2)\n", + "\n", + "def H_of (pos, pos_A, pos_B):\n", + " dist_a = dist(pos, pos_A)\n", + " dist_b = dist(pos, pos_B)\n", + " \n", + " return np.mat([[0, (pos[0]-pos_A[0])/dist_a, 0, (pos[1]-pos_A[1])/dist_a],\n", + " [0, (pos[0]-pos_B[0])/dist_b, 0, (pos[1]-pos_B[1])/dist_b]])\n", + " '''\n", + " return np.mat([[(pos[0]-pos_A[0])/dist_a, 0, (pos[1]-pos_A[1])/dist_a,0],\n", + " [(pos[0]-pos_B[0])/dist_b, 0, (pos[1]-pos_B[1])/dist_b,0]])\n", + " '''" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 116 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we are ready for the Kalman filter code. I will position the transmitters at x=-100 and 100, both with y=-20. This gives me enough space to get good triangulation from both as the robot moves. I will start the robot at (0,0) and move by (1,1) each time step. \n", + "\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import math\n", + "\n", + "pos_a = (100,-20)\n", + "pos_b = (-100, -20)\n", + "\n", + "f1 = KalmanFilter(dim_x=4, dim_z=2)\n", + "\n", + "f1.F = np.mat ([[0, 1, 0, 0],\n", + " [0, 0, 0, 0],\n", + " [0, 0, 0, 1],\n", + " [0, 0, 0, 0]])\n", + "\n", + "f1.B = 0.\n", + "\n", + "f1.R *= 1.\n", + "f1.Q *= .1\n", + "\n", + "f1.x = np.mat([1,0,1,0]).T\n", + "f1.P = np.eye(4) * 5.\n", + "\n", + "# initialize storage and other variables for the run\n", + "count = 30\n", + "xs, ys = [],[]\n", + "pxs, pys = [],[]\n", + "\n", + "# create the simulated sensor\n", + "d = DMESensor (pos_a, pos_b, noise_factor=3.)\n", + "\n", + "# pos will contain our nominal position since the filter does not\n", + "# maintain position.\n", + "pos = [0,0]\n", + "\n", + "for i in range(count):\n", + " # move (1,1) each step, so just use i\n", + " pos = [i,i]\n", + " \n", + " # compute the difference in range between the nominal track and measured \n", + " # ranges\n", + " ra,rb = d.range_of(pos)\n", + " rx,ry = d.range_of((i+f1.x[0,0], i+f1.x[2,0]))\n", + " z = np.mat([[ra-rx],[rb-ry]])\n", + "\n", + " # compute linearized H for this time step\n", + " f1.H = H_of (pos, pos_a, pos_b)\n", + "\n", + " # store stuff so we can plot it later\n", + " xs.append (f1.x[0,0]+i)\n", + " ys.append (f1.x[2,0]+i)\n", + " pxs.append (pos[0])\n", + " pys.append(pos[1])\n", + " \n", + " # perform the Kalman filter steps\n", + " f1.predict ()\n", + " f1.update(z)\n", + "\n", + "\n", + "p1, = plt.plot (xs, ys, 'r--')\n", + "p2, = plt.plot (pxs, pys)\n", + "plt.legend([p1,p2], ['filter', 'ideal'], 2)\n", + "plt.show()\n", + "\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\ngg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 117 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Linearizing the Kalman Filter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have seen an example of linearizing the Kalman filter we are in a position to better understand the math. \n", + "\n", + "We start by assuming some function $\\mathbf f$" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 117 + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Tracking a Ball" + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Physics of a Ball in a Vacuum" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's turn our attention to a situation where the physics of the object that we are tracking is constrained. A ball thrown in a vacuum must obey Newtonian laws. In a constant gravitational field it will travel in a parabola. I will assume you are familiar with the derivation of the formula:\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "y &= \\frac{g}{2}t^2 + v_{y0} t + y_0 \\\\\n", + "x &= v_{x0} t + x_0\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "where $g$ is the gravational constant, $t$ is time, $v_{x0}$ and $v_{y0}$ are the initial velocities in the x and y plane. If the ball is thrown with an initial velocity of $v$ at angle $\\theta$ above the horizon, we can compute $v_{x0}$ and $v_{y0}$ as\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "v_{x0} = v \\cos{\\theta} \\\\\n", + "v_{y0} = v \\sin{\\theta}\n", + "\\end{aligned}\n", + "$$\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can simulate this with the following code. I added a way to specify the initial angle in either radians or degrees, and a noise scaling factor which will be useful when we test our Kalman filter. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "from math import cos, tan, radians\n", + "from numpy.random import randn\n", + "\n", + "def sec (x):\n", + " return 1. / cos(x)\n", + "\n", + "class BallTrajectory2D(object):\n", + " def __init__(self, v0, angle_radians=0., x0=0., angle_degrees=None, noise_scale=0.0):\n", + " if angle_degrees is not None:\n", + " self.theta = radians(angle_degrees)\n", + " else:\n", + " self.theta = angle_radians\n", + " \n", + " self.x = self.x0 = x0\n", + " self.y = self.y0 = 0\n", + " \n", + " self.v0_y = v0 * sin(self.theta)\n", + " self.v0_x = v0 * cos(self.theta)\n", + " \n", + " self.noise_scale = noise_scale\n", + " \n", + " def update(self, t):\n", + " self.x = self.v0_x*t + self.x0\n", + " self.y = -0.5*9.8*t**2 + self.v0_y*t + self.y0\n", + " \n", + " self.x += randn() * self.noise_scale\n", + " self.y += randn() * self.noise_scale\n", + " return (self.x, self.y)" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 118 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So to create a trajectory with a velocity of $60 \\frac{m}{s}$ and an angle of $65^\\circ$ we would write:\n", + "\n", + " traj = BallTrajectory2D (60, angle_degrees=65)\n", + " \n", + "and then call $\\verb,update(t),$ for each time step. For example:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "traj = BallTrajectory2D (60, angle_degrees=65)\n", + "t = 0.0\n", + "while t >= 0 and traj.y >= 0:\n", + " traj.update(t)\n", + " plt.scatter(traj.x, traj.y)\n", + " t += 0.1\n", + "plt.axis('equal')\n", + "plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 119 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If you are not completely familiar with this math I suggest playing with the velocity and angle parameters to see how changing each affects the trajectory. " + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Designing the Kalman Filter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Our assumption is that the ball is travelling in a vacuum, so the velocity in x is a constant, and the acceleration in y is solely due to the gravitational constant $g$. The Newtonian equations for $x$ and $y$ in terms of $\\Delta t$ are:\n", + "\n", + "$$\\begin{aligned}\n", + "y_t &= \\frac{g}{2} {\\Delta t}^2 + v_{y(t-1)} {\\Delta t} + y_{t-1} \\\\\n", + "v_{yt} &= g {\\Delta t} + v_{y(t-1)} \\\\\n", + "\\\\\n", + "x_t &= v_{x(t-1)} {\\Delta t} \\\\\n", + "v_{xt} &= v_{x(t-1)}\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "We need to incorporate acceleration for $y$ into the Kalman filter, but not for $x$. This suggests the following state variables.\n", + "\n", + "$$\n", + "\\mathbf{x} = \n", + "\\begin{bmatrix}\n", + "x \\\\\n", + "\\dot{x} \\\\\n", + "y \\\\\n", + "\\dot{y} \\\\\n", + "\\ddot{y}\n", + "\\end{bmatrix}\n", + "$$" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def ball_filter(dt,R=1., Q = 0.1):\n", + " f1 = KalmanFilter(dim_x=5, dim_z=2)\n", + " g = -9.8\n", + "\n", + " f1.F = np.mat ([[1., dt, 0, 0, 0],\n", + " [0, 1., 0, 0, 0],\n", + " [0, 0, 1., dt, dt*dt*g],\n", + " [0, 0, 0, 1., dt],\n", + " [0, 0, 0, 0, 1.]])\n", + "\n", + " f1.H = np.mat([[1,0,0,0,0],\n", + " [0,0,0,0,0],\n", + " [0,0,1,0,0],\n", + " [0,0,0,0,0],\n", + " [0,0,0,0,0]])\n", + "\n", + "\n", + " f1.R = np.mat(np.eye(5)) * R \n", + " \n", + " f1.Q = np.zeros((5,5))\n", + " f1.Q[4,4] = Q\n", + " f1.x = np.mat([0, 0 , 0, 0, 0]).T\n", + " f1.P = np.eye(5) * 5.\n", + " f1.B = 0.\n", + " f1.u = 0\n", + " \n", + " return f1" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 120 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_ball_filter (traj):\n", + " xs, ys = [],[]\n", + " pxs, pys = [],[]\n", + " \n", + " for z in zs:\n", + " m = np.mat([z[0], 0, z[1], 0, 0]).T\n", + "\n", + " f1.predict ()\n", + " f1.update (m)\n", + "\n", + " xs.append (f1.x[0,0])\n", + " ys.append (f1.x[2,0])\n", + " pxs.append (z[0])\n", + " pys.append(z[1])\n", + " \n", + " if z[1] < 0:\n", + " break;\n", + "\n", + " p1, = plt.plot (xs, ys, 'r--')\n", + " p2, = plt.plot (pxs, pys)\n", + " plt.axis('equal')\n", + " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", + " plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 121 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "dt = 0.1\n", + "f1 = ball_filter(dt,R=0.1, Q=0.1)\n", + "\n", + "traj = BallTrajectory2D (20., angle_degrees=60., noise_scale=0.0)\n", + "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", + "\n", + "plot_ball_filter (zs)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nB8maQ3wtEcrXAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 122 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here, we can see that the filter tracks the trajectory quite closely, but not perfectly. Let's look at the effect of a slower and faster initial velocity." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "dt = 0.1\n", + "f1 = ball_filter(dt,R=.1, Q=.1)\n", + "traj = BallTrajectory2D (10., angle_degrees=60., noise_scale=0.0)\n", + "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", + "plot_ball_filter (zs)\n", + "\n", + "f1 = ball_filter(dt, R=0.1, Q=0.1)\n", + "traj = BallTrajectory2D (60., angle_degrees=60., noise_scale=0.0)\n", + "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", + "plot_ball_filter (zs)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAgFOsB6aAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 123 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Can you explain what is happening here?\n", + "\n", + "When the initial velocity is low, the change in velocity per time period is large compared to the velocity. In the physical world the ball's velocity is changing continuously, but we are imposing a step function on it because we are stepping by $0.1s$. This means our model of the ball does not exactly match the true behavior of the ball, and so the Kalman filter will not exactly predict the ball's behavior. A slow initial velcocity exaberates that \n", + "\n", + "**author's note** complete this" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So we seem to be doing a good job of tracking the ball. What happens if we inject noise?" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "dt = 0.1\n", + "f1 = ball_filter(dt, R=.16, Q=0.0)\n", + "\n", + "traj = BallTrajectory2D (40., angle_degrees=60., noise_scale=0.4)\n", + "zs = [traj.update(t) for t in np.arange(dt,100,dt)]\n", + "plot_ball_filter (zs)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nWbaPAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 124 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can see that the filter follows an almost perfect parabola despite the noise in the signal. Because I know the noise characteristic of my filter, $\\sigma=0.4$, I was able to specify the variance as $\\mathbf{R} = \\sigma^2=0.16$." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's make this more realistic. We don't have much call to track balls thrown on airless planets. On Earth, balls are subject to the effects of the atmosphere. \n", + "\n", + "blah blah\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import baseball\n", + "dt = 0.01\n", + "f1 = ball_filter(dt, R=1.16, Q=5.5)\n", + "\n", + "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", + "zs = zip (x,y)\n", + "plot_ball_filter (zs)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nSUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 125 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def ball_filter6(dt,R=1., Q = 0.1):\n", + " f1 = KalmanFilter(dim=6)\n", + " g = -9.8\n", + " g=1\n", + "\n", + " f1.F = np.mat ([[1., dt, dt**2, 0, 0, 0],\n", + " [0, 1., dt, 0, 0, 0],\n", + " [0, 0, 1., 0, 0, 0],\n", + " [0, 0, 0., 1., dt, dt*dt*g],\n", + " [0, 0, 0, 0, 1., dt],\n", + " [0, 0, 0, 0, 0., 1.]])\n", + "\n", + " f1.H = np.mat([[1,0,0,0,0,0],\n", + " [0,0,0,0,0,0],\n", + " [0,0,0,0,0,0],\n", + " [0,0,0,1,0,0],\n", + " [0,0,0,0,0,0],\n", + " [0,0,0,0,0,0]])\n", + "\n", + "\n", + " f1.R = np.mat(np.eye(6)) * R \n", + " \n", + " f1.Q = np.zeros((6,6))\n", + " f1.Q[2,2] = Q \n", + " f1.Q[5,5] = Q\n", + " f1.x = np.mat([0, 0 , 0, 0, 0, 0]).T\n", + " f1.P = np.eye(6) * 50.\n", + " f1.B = 0.\n", + " f1.u = 0\n", + " \n", + " return f1" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 126 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_ball_filter6 (zs):\n", + " xs, ys = [],[]\n", + " pxs, pys = [],[]\n", + " \n", + " for i,z in enumerate(zs):\n", + " m = np.mat([z[0], 0, 0, z[1], 0, 0]).T\n", + "\n", + " f1.predict ()\n", + " f1.update (m)\n", + "\n", + " xs.append (f1.x[0,0])\n", + " ys.append (f1.x[3,0])\n", + " pxs.append (z[0])\n", + " pys.append(z[1])\n", + " \n", + " if i > 0 and z[1] < 0:\n", + " break;\n", + "\n", + " p1, = plt.plot (xs, ys, 'r--')\n", + " p2, = plt.plot (pxs, pys)\n", + " plt.axis('equal')\n", + " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", + " plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [], + "prompt_number": 127 + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "dt = 0.1\n", + "noise = 0.2\n", + "f1 = ball_filter6(dt, R=.16, Q=0.1)\n", + "\n", + "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", + "znoise = [(i+randn()*noise,j+randn()*noise) for (i,j) in zip(x,y)]\n", + "plot_ball_filter6 (znoise)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "__init__() got an unexpected keyword argument 'dim'", + "output_type": "pyerr", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0mdt\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mnoise\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.2\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mf1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mball_filter6\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mR\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m.16\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m0.1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mx\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0my\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbaseball\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcompute_trajectory\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mv_0_mph\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m90.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mtheta\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m65.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdt\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mdt\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36mball_filter6\u001b[1;34m(dt, R, Q)\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mball_filter6\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdt\u001b[0m\u001b[1;33m,\u001b[0m\u001b[0mR\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1.\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mQ\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0.1\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mf1\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mKalmanFilter\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdim\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m6\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[0mg\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m-\u001b[0m\u001b[1;36m9.8\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[0mg\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: __init__() got an unexpected keyword argument 'dim'" + ] + } + ], + "prompt_number": 128 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "look at P" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "print (f1.P)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "now what if some measurements missing blah blah\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def plot_ball_filter6_miss (zs, miss_ratio=0.2):\n", + " xs, ys = [],[]\n", + " pxs, pys = [],[]\n", + " \n", + " for i,z in enumerate(zs):\n", + " m = np.mat([z[0], 0, 0, z[1], 0, 0]).T\n", + "\n", + " f1.predict ()\n", + " print (i, f1.x) \n", + " \n", + " if i < 20 or i > 40:\n", + " #if random.rand() >= miss_ratio:\n", + " f1.update (m)\n", + "\n", + "\n", + " xs.append (f1.x[0,0])\n", + " ys.append (f1.x[3,0])\n", + " pxs.append (z[0])\n", + " pys.append(z[1])\n", + " \n", + " if i > 0 and z[1] < 0:\n", + " break;\n", + "\n", + " p1, = plt.plot (xs, ys, 'r--')\n", + " p2, = plt.plot (pxs, pys)\n", + " plt.axis('equal')\n", + " plt.legend([p1,p2], ['filter', 'measurement'], 2)\n", + " plt.show()" + ], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "dt = 0.1\n", + "noise = 0.0\n", + "f1 = ball_filter6(dt, R=.16, Q=0.1)\n", + "\n", + "x,y = baseball.compute_trajectory(v_0_mph = 90., theta=65., dt=dt)\n", + "znoise = [(i+randn()*noise,j+randn()*noise) for (i,j) in zip(x,y)]\n", + "plot_ball_filter6_miss (znoise)" + ], + "language": "python", + "metadata": {}, + "outputs": [] + } + ], + "metadata": {} + } + ] } \ No newline at end of file