From 54eb3b693d201eced577a62a706b0b268ac1f24b Mon Sep 17 00:00:00 2001 From: Roger Labbe Date: Mon, 28 Apr 2014 19:12:22 -0500 Subject: [PATCH] First draft finished for the Histogram filter chapter. --- kalman filter 1D.ipynb | 618 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 569 insertions(+), 49 deletions(-) diff --git a/kalman filter 1D.ipynb b/kalman filter 1D.ipynb index ec127c7..45f3240 100644 --- a/kalman filter 1D.ipynb +++ b/kalman filter 1D.ipynb @@ -7,23 +7,16 @@ "worksheets": [ { "cells": [ - { - "cell_type": "heading", - "level": 1, - "metadata": {}, - "source": [ - "Introduction to Tracking" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ + "# Introduction to Tracking\n", "Let us begin with a simple problem. We have a dog friendly workspace, and so people bring their dogs to work. However, occasionally the dogs wander out of your office and down the halls. We want to be able to track them. So during a hackathon somebody created a little sonar sensor to attach to the dog's collar. It emits a signal, listens for the echo, and based on how quickly an echo comes back we can tell whether the dog is in front of an open doorway or not. It also senses when the dog walks, and reports in which direction the dog has moved. It connects to our network via wifi and sends an update once a second.\n", "\n", "I want to track my dog Simon, so I attach the device to his collar and then fire up Python, ready to try to write code to track him through the building. At first blush this may appear impossible. If I start listening to the sensor of Simon's collar I might read 'door', 'hall', 'hall', and so on. How can I use that information to determine where Simon is?\n", "\n", - "To keep the problem small, we will assume that there are only 10 positions in a single hallway to consider. The first position corresponds to the far left end of the corridor, and the last position to the far right. \n", + "To keep the problem small, we will assume that there are only 10 positions in a single hallway to consider, which we will number 0 to 9, where 1 is to the right of 0, 2 is to the right of 1, and so on. For reasons that will be clear later, we will also assume that the hallway is circular or rectangular. If you move right from position 9, you will be at position 0. \n", "\n", "When I begin listening to the sensor I have no reason to believe that Simon is at any particular position in the hallway. He is equally likely to be in any position. The probability that he is in each position is therefore $1/10$ \n", "\n", @@ -72,11 +65,14 @@ "input": [ "pos = array([0.333, 0.333, 0., 0., 0., 0., 0., 0., 0.333, 0.])\n", "\n", - "ax = plt.figure().gca()\n", - "x = np.arange(10)\n", - "ax.bar(x, pos)\n", - "plt.xticks(x+0.5, x)\n", - "plt.show()\n" + "def bar_plot(pos):\n", + " ax = plt.figure().gca()\n", + " x = np.arange(len(pos))\n", + " ax.bar(x, pos)\n", + " plt.xticks(x+0.5, x)\n", + " plt.show()\n", + "\n", + "bar_plot (pos)" ], "language": "python", "metadata": {}, @@ -86,11 +82,11 @@ "output_type": "display_data", "png": "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\nlmPChAk6c+aMrly5omPHjmXt9fM//OEP+vKXv6xQKJQTV82SdPz4cZ0+fVqHDh3Sr3/9a3V2dmYl\nx+DgoE6dOqUf/OAHOnXqlCZNmqSXX345K1nuGRgY0O9//3t961vfylqGt956S7/85S/V09Ojq1ev\n6tatW9qzZ09Wsvj9fv34xz/WsmXLtHz5coVCIccLlc90wXs8HsXj8dR6PB6X1+vNYqLccufOHX3z\nm9/Ud77zHa1cuTLbcSRJU6ZM0Te+8Q2dPHkyK8c/ceKEDhw4oMcee0zPPPOMjhw5orVr12Ylyz2F\nhYWSpIKCAtXW1ioWi2Ulh9frldfrVXl5uSRp1apVOnXqVFay3HPo0CEtWrRIBQUFWctw8uRJPfHE\nE5o+fbry8vJUV1enEydOZC3PunXrdPLkSf35z3/W1KlTNXfu3GHHfqYL/uMvYg0MDKi1tVU1NTXZ\njpUTjDFqaGjQvHnz9MMf/jCrWf773//q+vXrkqTbt2/rT3/6k0KhUFaybNmyRfF4XJcuXdK+ffv0\n9a9/Xbt3785KFknq7+/XzZs3JUl9fX06fPhw1p7CmjlzpoqKivSPf/xD0t173/Pnz89Klnv27t2r\nZ555JqsZ/H6/urq6dPv2bRlj1NHRkdVbjG+//bYk6fLly/rd737nfPtqfH72O3YOHjxoHn/8cTNn\nzhyzZcuWrGapr683hYWF5otf/KLxer1m165dWcvS2dlpXC6XCQaDZuHChWbhwoXm0KFDWcly9uxZ\nEwqFTDAYNKWlpebnP/95VnJ8UjQazfpTNP/85z9NMBg0wWDQzJ8/P+vfw2fOnDHhcNiUlZWZ2tra\nrD5Fc+vWLTN9+nRz48aNrGW4p6mpycybN88sWLDArF271gwMDGQtS2VlpZk3b54JBoPmyJEjjmN5\n0QkALPWZvkUDABgeBQ8AlqLgAcBSFDwAWIqCBwBLUfAAYCkKHgAsRcEDgKX+H365oPMZsojKAAAA\nAElFTkSuQmCC\n", "text": [ - "" + "" ] } ], - "prompt_number": 5 + "prompt_number": 61 }, { "cell_type": "markdown", @@ -121,18 +117,11 @@ ], "prompt_number": 6 }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Extracting Information from Multiple Sensor Readings" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ + "#### Extracting Information from Multiple Sensor Readings\n", "Let's put Python aside and think about the problem a bit. Suppose we were to read the following from Simon's sensor:\n", "\n", " * door\n", @@ -172,18 +161,11 @@ "We could work through the code to implement this solution, but instead let us consider a real world complication to the problem." ] }, - { - "cell_type": "heading", - "level": 4, - "metadata": {}, - "source": [ - "Noisy Sensors" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ + "####Noisy Sensors\n", "Unfortunately I have yet to come across a perfect sensor. Perhaps the sensor would not detect a door if Simon sat in front of it while scratching himself, or it might report there is a door if he is facing towards the wall, not down the hallway. So in practice when I get a report 'door' I cannot assign 1/3 as the probability for each door. I have to assign something less than 1/3 to each door, and then assign a small probability to each blank wall position. At this point it doesn't matter exactly what numbers we assign; let us say that the probably of 'door' being correct is 0.6, and the probability of being incorrect is 0.2, which is another way of saying it is about 3 times more likely to be right than wrong. How would we do this?\n", "\n", "At first this may seem like an insurmountable problem. If the sensor is noisy it casts doubt on every piece of data. How can we conclude anything if we are always unsure?\n", @@ -197,17 +179,19 @@ "cell_type": "code", "collapsed": false, "input": [ - "q = []\n", + "def measure (pos, measure, p_hit, p_miss):\n", + " q = array(pos, dtype=float)\n", + " for i in range(len(hallway)):\n", + " if hallway[i] == measure:\n", + " q[i] = pos[i] * p_hit\n", + " else:\n", + " q[i] = pos[i] * p_miss\n", + " return q\n", + "\n", "pos = array([0.2]*10)\n", - "reading = 1 # reading is 'door'\n", - "# adjust probability by the accuracy of the sensor\n", - "for i in range(len(hallway)):\n", - " if hallway[i] == reading:\n", - " q.append (pos[i] * 0.6)\n", - " else:\n", - " q.append (pos[i] * 0.2)\n", - " \n", - "pos = array(q)\n", + "reading = 1 # 1 is 'door'\n", + "pos = measure (pos, 1, .6, .2)\n", + "\n", "print pos\n", "print 'sum =', sum(pos)" ], @@ -223,7 +207,7 @@ ] } ], - "prompt_number": 17 + "prompt_number": 76 }, { "cell_type": "markdown", @@ -240,8 +224,22 @@ " s = sum(p)\n", " for i in range (len(p)):\n", " p[i] = p[i] / s\n", - "normalize(pos)\n", - "print pos\n", + " \n", + "def sense (pos, measure, p_hit, p_miss):\n", + " q = array(pos, dtype=float)\n", + " for i in range(len(hallway)):\n", + " if hallway[i] == measure:\n", + " q[i] = pos[i] * p_hit\n", + " else:\n", + " q[i] = pos[i] * p_miss\n", + " normalize(q)\n", + " return q\n", + "\n", + "\n", + "pos = array([0.2]*10)\n", + "reading = 1 # 1 is 'door'\n", + "pos = sense (pos, 1, .6, .2)\n", + "\n", "print 'sum =', sum(pos)\n", "print 'probability of door =', pos[0]\n", "print 'probability of wall =', pos[2]" @@ -253,21 +251,527 @@ "output_type": "stream", "stream": "stdout", "text": [ - "[ 0.1875 0.1875 0.0625 0.0625 0.0625 0.0625 0.0625 0.0625 0.1875\n", - " 0.0625]\n", "sum = 1.0\n", "probability of door = 0.1875\n", "probability of wall = 0.0625\n" ] } ], - "prompt_number": 21 + "prompt_number": 78 }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Normalization is done by dividing each element by the sum of all elements in the list. If this is not clear you should spend a few minutes proving it to yourself algebraically. We can see from the output that the sum is now 1.0, and that the probability of a door vs wall is still three times larger." + "Normalization is done by dividing each element by the sum of all elements in the list. If this is not clear you should spend a few minutes proving it to yourself algebraically. We can see from the output that the sum is now 1.0, and that the probability of a door vs wall is still three times larger. The result also fits our intuitiion that the probability of a door must be less than 0.333, and that the probability of a wall must be greater than 0.0. Finally, it should fit our intuition that we have not yet been given any information that would allow us to distinguish between any given door or wall position, so all door positions should have the same value, and the same should be true for wall positions. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Incorporating Movement Data\n", + "\n", + "Recall how quickly we were able to find an exact solution to our dog's position when we incorporated a series of measurements and movement updates. However, that occured in a fictional world of perfect sensors. Might we be able to find an exact solution even in the presense of noisy sensors?\n", + "\n", + "Unfortunately, the answer is no. Even if the sensor readings perfectly match an extremely complicated hallway map we could not say that we are 100% sure that the dog is in a specific position - there is, after all, the possibility that every sensor reading was wrong! Naturally, in a more typical situation most sensor readings will be correct, and we might be close to 100% sure of our answer, but never 100% sure. This may seem head-spinningly complicated, but lets just go ahead and program the math, which as we have seen is quite simple.\n", + "\n", + "First let's deal with the simple case - assume the movement sensor is perfect, and it reports that the dog has moved one space to the right. How would we alter our pos array?\n", + "\n", + "I hope after a moment's thought it is clear that we should just shift all the values one space to the right. If we previously thought there was a 50% chance of simon being at position 3, then after the move to the right we should believe that there is a 50% chance he is at position 4. So let's implement that. Recall that the hallway is circular, so we will use modulo arithmetic to perform the shift correctly" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "import numpy\n", + "def perfect_update(pos, move):\n", + " \"\"\" move the position by 'move' spaces, where positive is to the right, and negative\n", + " is to the left\n", + " \"\"\"\n", + " n = len(pos)\n", + " result = array(pos, dtype=float)\n", + " for i in range(n):\n", + " result[i] = pos[(i-move) % n]\n", + " return result\n", + " \n", + "pos = array([.4, .1, .2, .3])\n", + "print 'pos before update =', pos\n", + "pos = perfect_update(pos, 1)\n", + "print 'pos after update =', pos\n" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "pos before update = [ 0.4 0.1 0.2 0.3]\n", + "pos after update = [ 0.3 0.4 0.1 0.2]\n" + ] + } + ], + "prompt_number": 35 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can see that we correctly shifted all values one position to the right, wrapping from the end of the array back to the beginning.\n", + "\n", + "#### Adding Noise to the Update\n", + "\n", + "We want to solve real world problems, and we have already stated that all sensors have noise. Therefore the code above must be wrong. What if the sensor detected our dog moving 1 space, but he actually moved 2 spaces, or 0? Once again this may initially sound like an insummountable problem, but let's just model it in math. Since this is just an example, we will create a pretty simple noise model for the sensor - later in the book we will handle far more sophisticated errors.\n", + "\n", + "We will say that when the sensor sends a movement update, it is 80% likely to be right, and it is 10% likely to overshoot one position to the right, and 10% likely to undershoot to the left. That is, if we say the movement was 4 (meaning 4 spaces to the right), the dog is 80% likely to have moved 4 spaces to the right, 10% to have moved 3 spaces, and 10% to have moved 5 spaces.\n", + "\n", + "This is slightly harder than the math we have done so far, but it is still tractable. Each result in the array now needs to incorporate probabilities for 3 different situations. For example, consider position 9 for the case where the reported movement is 2. It should be clear that after the move we need to incorporate the probability that was at position 7 (9-2). However, there is a small chance that our dog actually moved from either 1 or 3 spaces away due to the sensor noise, so we also need to use positions 6 and 8. How much? Well, we have the probabilities, so we can just multiply and add. It would be 80% of position 7 plus 10% of position 6 and 10% of position 8! Let's try coding that:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "def update (pos, move, p_correct, p_under, p_over):\n", + " n = len(pos)\n", + " result = array(pos, dtype=float)\n", + " for i in range(n):\n", + " result[i] = \\\n", + " pos[(i-move) % n] * p_correct + \\\n", + " pos[(i-move-1) % n] * p_over + \\\n", + " pos[(i-move+1) % n] * p_under \n", + " return result\n", + "\n", + "p = array([0,0,0,1,0,0,0,0])\n", + "res = update (p, 2, .8, .1, .1)\n", + "print res" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0. 0. 0. 0.1 0.8 0.1 0. ]\n" + ] + } + ], + "prompt_number": 53 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The simple test case that we ran appears to work correctly. We initially believed that the dog was in position 3 with 100% certainty; after the movement update we now give an 80% probability to the dog being in position 5, and a 10% chance to undershooting to position 4, and a 10% chance of overshooting to position 6. Let us look at a case where we have multiple beliefs:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "p = array([0, 0, .4, .6, 0, 0, 0, 0])\n", + "res = update (p, 2, .8, .1, .1)\n", + "print res" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0. 0. 0. 0.04 0.38 0.52 0.06 0. ]\n" + ] + } + ], + "prompt_number": 57 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here the results are more complicated, but you should still be able to work it out in your head. The 0.04 is due to the possibility that the 0.4 belief undershot by 1. The 0.38 is due to the following: the 80% chance that we moved 2 positions $(.4 * .8)$ and the 10% chance that we undershot $(.6*.1)$. Overshooting plays no role here because if we overshot both .4 and .6 would be past this position. **I strongly suggest working some examples until all of this is very clear, as so much of what follows depends on understanding this step.**\n", + "\n", + "If you look at the probabilities after performing the update you probably feel dismay. In the example above we started with probabilitys of .4 and .6 in two fields; after performing the update the probabilities are not only lowered, but they are strewn out across the map." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "bar_plot (res)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEACAYAAACuzv3DAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAE5BJREFUeJzt3XFs1PX9x/HXNXfJBGoHUkHuLrnZu7VXGeW0pSPG7ZjL\nCiw0oGwpOjXYkQZDDMtMjH+tmGXaLP4x6bJ0xi1x6kHiFo8tcNuKu0lw5LaUzWVlWgyN15sjAezA\nsq30y/f3B79drC3fu2vv+N4Hno/EpF/vc/d9q72n3377/R4e27ZtAQCMVeP2AACA+SHkAGA4Qg4A\nhiPkAGA4Qg4AhiPkAGC4giFPpVJqampSJBJRX1/frGvS6bRisZhWrlypeDxe7hkBAA48TteRW5al\nxsZGDQ4Oyu/3q62tTYlEQtFoNL9mfHxcd999t379618rEAjozJkzWrp06TUZHgBQ4Ig8k8koHA4r\nFArJ5/Opq6tLyWRy2ppXX31V999/vwKBgCQRcQC4xhxDnsvlFAwG89uBQEC5XG7ampGREZ07d07r\n1q1Ta2urfvazn1VmUgDArLxOD3o8noIvcOnSJQ0NDenw4cO6ePGi1q5dq89//vOKRCJlGxIAcHWO\nIff7/cpms/ntbDabP4XyP8FgUEuXLtVNN92km266SV/4whf0l7/8ZUbIw+Gw3nvvvTKODgDXv4aG\nBp08edJ5ke3g0qVL9u23326fOnXK/u9//2u3tLTYw8PD09acOHHCvvfee+2pqSl7YmLCXrlypf23\nv/1txmsV2FXV+853vuP2CPNi8vwmz27bzO820+cvpp2OR+Rer1f9/f3q6OiQZVnq7u5WNBrVwMCA\nJKmnp0dNTU1av369Vq1apZqaGu3YsUPNzc1l+n8RAKAQx5BL0oYNG7Rhw4Zpf6+np2fa9hNPPKEn\nnniivJMBAIrCnZ1FMv1GJ5PnN3l2ifndZvr8xXC8IaisO/J4dI12BQDXjWLayRE5ABiOkAOA4Qg5\nABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiO\nkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABjO6/YAAObn5puX6MKFD90eY4ba2sU6\nf/6c22PcEDy2bdvXZEcej67RroAbisfjkVSN7y3e8+VQTDs5tQIAhisY8lQqpaamJkUiEfX19c14\nPJ1Oq66uTrFYTLFYTN/97ncrMigAYHaO58gty9KuXbs0ODgov9+vtrY2dXZ2KhqNTlv3xS9+UQcO\nHKjooACA2TkekWcyGYXDYYVCIfl8PnV1dSmZTM5Yx3kwAHCPY8hzuZyCwWB+OxAIKJfLTVvj8Xj0\n1ltvqaWlRRs3btTw8HBlJgUAzMrx1MqV34Y7u/POO5XNZrVgwQIdOnRImzdv1rvvvlu2AQEAzhxD\n7vf7lc1m89vZbFaBQGDamtra2vzXGzZs0GOPPaZz585pyZIlM16vt7c3/3U8Hlc8Hp/j2ABwfUqn\n00qn0yU9x/E68qmpKTU2Nurw4cNasWKF1qxZo0QiMe2XnadPn9att94qj8ejTCajr3/96xodHZ25\nI64jByqC68ivb8W00/GI3Ov1qr+/Xx0dHbIsS93d3YpGoxoYGJAk9fT06LXXXtOPfvQjeb1eLViw\nQPv27SvfPwEAoCDu7AQMxxH59Y07OwHgBkDIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBw\nhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwA\nDEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADEfIAcBwhBwADFcw5KlUSk1NTYpEIurr67vquj/+\n8Y/yer36xS9+UdYBAQDOHENuWZZ27dqlVCql4eFhJRIJnThxYtZ1Tz75pNavXy/btis2LABgJseQ\nZzIZhcNhhUIh+Xw+dXV1KZlMzli3d+9ebd26VfX19RUbFAAwO8eQ53I5BYPB/HYgEFAul5uxJplM\naufOnZIkj8dTgTEBAFfjdXqwmCjv3r1bzz77rDwej2zbdjy10tvbm/86Ho8rHo8XPSgA3AjS6bTS\n6XRJz/HYDuU9duyYent7lUqlJEnPPPOMampq9OSTT+bX3H777fl4nzlzRgsWLNALL7ygzs7O6Tv6\n/9ADKK8rB1zV+N7iPV8OxbTTMeRTU1NqbGzU4cOHtWLFCq1Zs0aJRELRaHTW9du3b9emTZt03333\nzWkYAKUj5Ne3YtrpeGrF6/Wqv79fHR0dsixL3d3dikajGhgYkCT19PSUb1oAwJw4HpGXdUcckQMV\nwRH59a2YdnJnJwAYjpADgOEcz5EDN4Kbb16iCxc+dHuMWdXWLtb58+fcHgNVjnPkuOFV7zlmqZjz\nzNU7P+/5cuAcOQDcAAg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA\n4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5\nABiuYMhTqZSampoUiUTU19c34/FkMqmWlhbFYjHdddddeuONNyoyKABgdh7btu2rPWhZlhobGzU4\nOCi/36+2tjYlEglFo9H8momJCS1cuFCS9Ne//lVbtmzRyZMnZ+7I45HDrgDXeDweSdX6vVn4fVO9\n8/OeL4di2ul4RJ7JZBQOhxUKheTz+dTV1aVkMjltzf8iLkkfffSRli5dOo+RAQClcgx5LpdTMBjM\nbwcCAeVyuRnrXn/9dUWjUW3YsEHPP/98+acEAFyV1+nBKz+yFbZ582Zt3rxZR44c0UMPPaR33nln\n1nW9vb35r+PxuOLxeNGDAsCNIJ1OK51Ol/Qcx5D7/X5ls9n8djabVSAQuOr6e+65R1NTUzp79qxu\nueWWGY9/POQAgJk+eZC7Z8+egs9xPLXS2tqqkZERjY6OanJyUvv371dnZ+e0Ne+9917+RPzQ0JAk\nzRpxAEBlOB6Re71e9ff3q6OjQ5Zlqbu7W9FoVAMDA5Kknp4e/fznP9dLL70kn8+nRYsWad++fddk\ncADAFY6XH5Z1R1x+iCpVvZfvSVx+iHlffggAqH6EHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCE\nHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAM\nR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMV1TIU6mUmpqaFIlE1NfXN+PxV155\nRS0tLVq1apXuvvtuvf3222UfFAAwO49t27bTAsuy1NjYqMHBQfn9frW1tSmRSCgajebX/OEPf1Bz\nc7Pq6uqUSqXU29urY8eOTd+Rx6MCuwJc4fF4JFXr92bh9031zs97vhyKaWfBI/JMJqNwOKxQKCSf\nz6euri4lk8lpa9auXau6ujpJUnt7u8bGxuYxNgCgFAVDnsvlFAwG89uBQEC5XO6q61988UVt3Lix\nPNMBAAryFlpw5ce24vzud7/TT37yEx09enTWx3t7e/Nfx+NxxePxol8bAG4E6XRa6XS6pOcUDLnf\n71c2m81vZ7NZBQKBGevefvtt7dixQ6lUSosXL571tT4ecgDATJ88yN2zZ0/B5xQ8tdLa2qqRkRGN\njo5qcnJS+/fvV2dn57Q177//vu677z69/PLLCofDpU8OAJizgkfkXq9X/f396ujokGVZ6u7uVjQa\n1cDAgCSpp6dHTz/9tD788EPt3LlTkuTz+ZTJZCo7OQBAUhGXH5ZtR1x+iCpVvZfvSVx+iLJcfggA\nqG6EHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCE\nHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAMR8gBwHCEHAAM\nR8gBwHCEHAAMV1TIU6mUmpqaFIlE1NfXN+Pxv//971q7dq0+9alP6bnnniv7kACAq/MWWmBZlnbt\n2qXBwUH5/X61tbWps7NT0Wg0v+aWW27R3r179frrr1d0WADATAWPyDOZjMLhsEKhkHw+n7q6upRM\nJqetqa+vV2trq3w+X8UGBQDMrmDIc7mcgsFgfjsQCCiXy1V0KABA8QqG3OPxXIs5AABzVPAcud/v\nVzabzW9ns1kFAoE57ay3tzf/dTweVzwen9PrAMD1Kp1OK51Ol/Qcj23bttOCqakpNTY26vDhw1qx\nYoXWrFmjRCIx7Zed/9Pb26va2lp9+9vfnrkjj0cFdgW44spPndX6vVn4fVO98/OeL4di2lkw5JJ0\n6NAh7d69W5Zlqbu7W0899ZQGBgYkST09PfrnP/+ptrY2nT9/XjU1NaqtrdXw8LAWLVpU0jCAG6o3\nhBIhR9lCfq2GAdxQvSGUCDmKaSd3dgKA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiOkAOA4Qg5ABiO\nkAOA4Qg5ABiu4KcfAkAl3XzzEl248KHbY8xQW7tY58+fc3uMovBZK7jhVe9nlUg3wmetmD5/xafg\ns1YA4PpHyAHAcIQcAAxHyAHAcIQcAAxHyAHAcFxHjrLgWmDAPVxHjrIw+Vrg6p1dMnt+riMvyxRc\nRw4A1z9CDgCGI+QAYDhCDgCGI+QAYDhCDgCGI+QAYDhCDgCGKxjyVCqlpqYmRSIR9fX1zbrm8ccf\nVyQSUUtLi44fP172IQEAV+cYcsuytGvXLqVSKQ0PDyuRSOjEiRPT1hw8eFAnT57UyMiIfvzjH2vn\nzp0VHdgt6XTa7RHmxez5024PME9ptweYp7TbA8xT2u0BKs4x5JlMRuFwWKFQSD6fT11dXUomk9PW\nHDhwQI888ogkqb29XePj4zp9+nTlJnaJ2SE0ff602wPMU9rtAeYp7fYA85R2e4CKcwx5LpdTMBjM\nbwcCAeVyuYJrxsbGyjwmAOBqHEN+5cNsCvvkB7oU+zwAwPw5foyt3+9XNpvNb2ezWQUCAcc1Y2Nj\n8vv9M16roaHB+MDv2bPH7RHmpfLzV/K/79xnL+77rtLfmzfm/MW/502fv3IaGhoKrnEMeWtrq0ZG\nRjQ6OqoVK1Zo//79SiQS09Z0dnaqv79fXV1dOnbsmD796U9r2bJlM17r5MmTJY4PACiGY8i9Xq/6\n+/vV0dEhy7LU3d2taDSqgYEBSVJPT482btyogwcPKhwOa+HChfrpT396TQYHAFxxzf5gCQBAZVT8\nzs5ibiiqZo8++qiWLVumz33uc26PUrJsNqt169bpjjvu0MqVK/X888+7PVJJ/vOf/6i9vV2rV69W\nc3OznnrqKbdHmhPLshSLxbRp0ya3RylZKBTSqlWrFIvFtGbNGrfHKcn4+Li2bt2qaDSq5uZmHTt2\nzO2RivbOO+8oFovl/6qrq3N+/9oVNDU1ZTc0NNinTp2yJycn7ZaWFnt4eLiSuyy7N9980x4aGrJX\nrlzp9igl++CDD+zjx4/btm3bFy5csD/72c8a9+9/YmLCtm3bvnTpkt3e3m4fOXLE5YlK99xzz9kP\nPPCAvWnTJrdHKVkoFLLPnj3r9hhz8vDDD9svvviibdtXvn/Gx8ddnmhuLMuyly9fbr///vtXXVPR\nI/Jibiiqdvfcc48WL17s9hhzsnz5cq1evVqStGjRIkWjUf3jH/9wearSLFiwQJI0OTkpy7K0ZMkS\nlycqzdjYmA4ePKhvfvObVfHnP86FiXP/61//0pEjR/Too49KuvL7vrq6OpenmpvBwUE1NDRMu1/n\nkyoa8mJuKMK1MTo6quPHj6u9vd3tUUpy+fJlrV69WsuWLdO6devU3Nzs9kgl+da3vqXvf//7qqkx\n8/PpPB6PvvzlL6u1tVUvvPCC2+MU7dSpU6qvr9f27dt15513aseOHbp48aLbY83Jvn379MADDziu\nqeh3VzVcgwnpo48+0tatW/WDH/xAixYtcnucktTU1OjPf/6zxsbG9Oabbxr1UQO/+tWvdOuttyoW\nixl5VCtJR48e1fHjx3Xo0CH98Ic/1JEjR9weqShTU1MaGhrSY489pqGhIS1cuFDPPvus22OVbHJy\nUr/85S/1ta99zXFdRUNezA1FqKxLly7p/vvv1ze+8Q1t3rzZ7XHmrK6uTl/96lf1pz/9ye1RivbW\nW2/pwIED+sxnPqNt27bpjTfe0MMPP+z2WCW57bbbJEn19fXasmWLMpmMyxMVJxAIKBAIqK2tTZK0\ndetWDQ0NuTxV6Q4dOqS77rpL9fX1jusqGvKP31A0OTmp/fv3q7Ozs5K7xMfYtq3u7m41Nzdr9+7d\nbo9TsjNnzmh8fFyS9O9//1u//e1vFYvFXJ6qeN/73veUzWZ16tQp7du3T1/60pf00ksvuT1W0S5e\nvKgLFy5IkiYmJvSb3/zGmKu3li9frmAwqHfffVfSlfPMd9xxh8tTlS6RSGjbtm0F1zneEDRfV7uh\nyCTbtm3T73//e509e1bBYFBPP/20tm/f7vZYRTl69Khefvnl/OVjkvTMM89o/fr1Lk9WnA8++ECP\nPPKILl++rMuXL+uhhx7Svffe6/ZYc2baqcbTp09ry5Ytkq6cqnjwwQf1la98xeWpird37149+OCD\nmpycVENDg3E3K05MTGhwcLCo301wQxAAGM7MX6UDAPIIOQAYjpADgOEIOQAYjpADgOEIOQAYjpAD\ngOEIOQAY7v8Av9rK1q6fmQEAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 65 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is not a coincidence, or the result of a carefully chosen example - it is always true of the update step. This is inevitable; if our sensor is noisy we will lose a bit of information on every update. Suppose we were to perform the update an infinite number of times - what would the result be? If we lose information on every step, we must eventually end up with no information at all, and our probabilities will be equally distributed across the pos array. Let's try this with say 500 iterations.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "pos = [1.0,0,0,0,0,0,0,0,0,0]\n", + "for i in range (500):\n", + " pos = update(pos, 1, .8, .1, .1)\n", + "print pos\n", + "bar_plot(pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1]\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 74 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After 500 iterations we have lost all information, even though we were 100% sure that we started in position 1. Feel free to play with the numbers to see the effect of different number of updates. For example, after 100 updates we have a small amount of information left.\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "pos = [1.0,0,0,0,0,0,0,0,0,0]\n", + "for i in range (100):\n", + " pos = update(pos, 1, .8, .1, .1)\n", + "print pos\n", + "bar_plot(pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0.10407069 0.10329322 0.10125784 0.09874205 0.09670682 0.09592945\n", + " 0.09670682 0.09874205 0.10125784 0.10329322]\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n", + "text": [ + "" + ] + } + ], + "prompt_number": 72 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Integrating Measurements and Movement Updates\n", + "\n", + "The problem of loosing information during an update may make it seem as if our system would quickly devolve into no knowledge. However, recall that our process is not an endless series of updates, but of *measure->update->measure->update->measure->update...* The output of the measure step is fed into the update. The update step, with a degraded certainty, is then fed into the measure step. \n", + "\n", + "Let's think about this intuitively. After the first measure->update round we have degraded the knowledge we gained by the measurement by a small amount. But now we take another measurement. When we try to incorporate that new measurement into our belief, do we become more certain, less certain, or equally certain. Consider a simple case - you are sitting in your office. A co-worker asks another co-worker where you are, and they report \"in his office\". You keep sitting there while they ask and answer \"has he moved\"? \"No\" \"Where is he\" \"In his office\". Eventually you get up and move, and lets say the person didn't see you move. At that time the questions will go \"Has he moved\" \"no\" (but you have!) \"Where is he\" \"In the kitchen\". Wow! At that moment the statement that you haven't moved conflicts strongly with the next measurement that you are in the kitchen. If we were modelling these with probabilities the probability that you are in your office would lowever, and the probability that you are in the kitchen would go up a little bit. But now imagine the subsequent conversation: \"has he moved\" \"no\" \"where is he\" \"in the kitchen\". Pretty quickly the belief that you are in your office would fade away, and the belief that you are in the kitchen would increase to near certainty. The belief that you are in the office will never go to zero, nor will the belief that you are in the kitchen ever go to 1.0 because of the chances of error, but in practice your co-workers would be correct to be quite confident in their system.\n", + "\n", + "That is what intuition tells us. What does the math tell us?\n", + "\n", + "Well, we have already programmed the measure step, and we have programmed the update step. All we need to do is feed the result of one into the other, and we will have programmed our dog tracker!!! Let's see how it performs. We will input data as if the dog started at position 0 and moved right at each update. However, as in a real world application, we will start with no knowledge and assign equal probability to all positions. " + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "p = array([.1]*10)\n", + "p = sense (p, 1, .6, .2)\n", + "print p\n", + "p = update (p, 1, .8, .1, .1)\n", + "print p\n", + "bar_plot(p)\n", + "\n", + " " + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0.1875 0.1875 0.0625 0.0625 0.0625 0.0625 0.0625 0.0625 0.1875\n", + " 0.0625]\n", + "[ 0.0875 0.175 0.175 0.075 0.0625 0.0625 0.0625 0.0625 0.075\n", + " 0.1625]\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAEACAYAAACnJV25AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAHORJREFUeJzt3X9Mk3fiB/B3OXohJyJKUGafLmy02ha04No1muyuLuaY\n3kk25S5MDWarG9nFeCxedtlfB/tD5YyJTO4Ptuy8M7cgyf0QTmtzx+3bG5kjxICeCfOGHt1KGd7u\n9mXAUAvd5/sHrl8r8LQqPH38+H4lTXh4Pk8/7yK8eXza8jEIIQSIiEgaGekOQERE84vFTkQkGRY7\nEZFkWOxERJJhsRMRSYbFTkQkmaTFHggEYLPZYLVa0dDQMGP/5cuXsX79emRlZeHIkSMJ+w4ePIji\n4mKsWbMGO3bswM2bN+cvORERzUq12GOxGPbu3YtAIIC+vj60tLTgo48+ShiTl5eHY8eO4Wc/+1nC\n50OhEN5++2309PTg0qVLiMViOHny5Pw/AiIiSqBa7N3d3bBYLCgsLITRaERVVRXa2toSxuTn58Pl\ncsFoNCZ8PicnB0ajERMTE5iamsLExARMJtP8PwIiIkqgWuyRSARmszm+rSgKIpFISne8bNky7N+/\nH48++ihWrlyJ3NxcbNq06f7SEhFRUqrFbjAY7vmOr169iqNHjyIUCmFoaAjj4+N499137/n+iIgo\nNZlqO00mE8LhcHw7HA5DUZSU7vj8+fPYsGED8vLyAADbtm3DuXPnsHPnzoRxpaWluHjx4t3mJiJ6\nqDmdTly4cGHWfapn7C6XC/39/QiFQohGo2htbUVFRcWsY+/8W2I2mw1dXV24fv06hBDo6OiAw+GY\ncdzFixchhLiv2y9+8Yv7vo/5uOkhhx4y6CUHM+grhx4y6CXHfGRQOyFWPWPPzMxEU1MTysvLEYvF\n4PP5YLfb0dzcDACoqanB8PAw3G43RkdHkZGRgcbGRvT19cHpdKK6uhoulwsZGRlYt24dXn75ZbXp\niIhoHqgWOwBs3rwZmzdvTvhcTU1N/OOCgoKEyzW3e+211/Daa6/dZ0QiIrobUrzz1Ov1pjsCAH3k\n0EMGQB85mOH/6SGHHjIA+six0BkMQoi0LrRhMBiQ5ghERA8cte6U4ox9PuTkLIPBYNDklpOzTLcZ\niOjBxzP223IAWuWY/THrIQMRPRh4xk5E9BBhsRMRSYbFTkQkGRY7EZFkWOxERJJhsRMRSYbFTkQk\nGRY7EZFkWOxERJJhsRMRSYbFTkQkGRY7EZFkkhZ7IBCAzWaD1WpFQ0PDjP2XL1/G+vXrkZWVhSNH\njiTsGxkZQWVlJex2OxwOB7q6uuYvORERzUp1BaVYLIa9e/eio6MDJpMJbrcbFRUVsNvt8TF5eXk4\nduwYTp06NeP4n/70p9iyZQt+//vfY2pqCl999dX8PwIiIo3l5CzD2Nj/Lvg8ixcvxejoF3d9nOoZ\ne3d3NywWCwoLC2E0GlFVVYW2traEMfn5+XC5XDAajQmf//LLL9HZ2YkXX3wRwPT6qUuWLLnrgERE\nejNd6mLBb/f6y0O12CORCMxmc3xbURREIpGU7nhgYAD5+fl44YUXsG7dOrz00kuYmJi4p5BERJQ6\n1Usx0ws/3JupqSn09PSgqakJbrcbtbW1OHToEN54440ZY+vq6uIfe71eXaxJSESkJ8FgEMFgMKWx\nqsVuMpkQDofj2+FwGIqipHTHiqJAURS43W4AQGVlJQ4dOjTr2NuLnYiIZrrzpLe+vn7OsaqXYlwu\nF/r7+xEKhRCNRtHa2oqKiopZx965RFNBQQHMZjM+/vhjAEBHRweKi4tTfQxERHSPkq55evbsWdTW\n1iIWi8Hn8+H1119Hc3MzAKCmpgbDw8Nwu90YHR1FRkYGFi9ejL6+PmRnZ+PixYvYs2cPotEoioqK\ncPz48RlPoHLNU31lIKLktPtZnfvnVK07uZj1bTnSXap6yEBEyem92PnOUyIiybDYiYgkw2InIpIM\ni52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgk\nw2InIpIMi52ISDJJiz0QCMBms8FqtaKhoWHG/suXL2P9+vXIysrCkSNHZuyPxWIoKyvD1q1b5ycx\nERGpUl3MOhaLYe/evejo6IDJZILb7UZFRQXsdnt8TF5eHo4dO4ZTp07Neh+NjY1wOBwYGxub3+RE\nRDQr1TP27u5uWCwWFBYWwmg0oqqqCm1tbQlj8vPz4XK5YDQaZxw/ODgIv9+PPXv2cBk2IiKNqBZ7\nJBKB2WyObyuKgkgkkvKdv/rqqzh8+DAyMngpn4hIK6qXYqYXbL03p0+fxvLly1FWVoZgMKg6tq6u\nLv6x1+uF1+u953mJiGQUDAaTduk3VIvdZDIhHA7Ht8PhMBRFSemOz507h/b2dvj9fty4cQOjo6Oo\nrq7GiRMnZoy9vdiJiGimO0966+vr5xyreo3E5XKhv78foVAI0WgUra2tqKiomHXsndfQDxw4gHA4\njIGBAZw8eRJPP/30rKVORETzS/WMPTMzE01NTSgvL0csFoPP54PdbkdzczMAoKamBsPDw3C73Rgd\nHUVGRgYaGxvR19eH7OzshPu6n8s6RESUOoNI88tVDAaDLl4xM/2LR6scsz9mPWQgouS0+1md++dU\nrTv5chUiIsmw2ImIJMNiJyKSDIudiEgyLHYiIsmw2ImIJMNiJyKSDIudiEgyLHYiIsmw2ImIJMNi\nJyKSDIudiEgyLHYiIsmw2ImIJMNiJyKSDIudiEgyKRV7IBCAzWaD1WpFQ0PDjP2XL1/G+vXrkZWV\nhSNHjsQ/Hw6HsXHjRhQXF6OkpARvvvnm/CUnIqJZJV1BKRaLYfXq1ejo6IDJZILb7UZLSwvsdnt8\nzOeff45PPvkEp06dwtKlS7F//34AwPDwMIaHh1FaWorx8XE88cQTOHXqVMKxXEFJXxmIKLkHfgWl\n7u5uWCwWFBYWwmg0oqqqCm1tbQlj8vPz4XK5YDQaEz5fUFCA0tJSAEB2djbsdjuGhoZSejhERHRv\nkhZ7JBKB2WyObyuKgkgkctcThUIh9Pb2wuPx3PWxRESUusxkA6b/y3F/xsfHUVlZicbGRmRnZ8/Y\nX1dXF//Y6/XC6/Xe95xERDIJBoMIBoMpjU1a7CaTCeFwOL4dDoehKErKYSYnJ7F9+3bs2rULzz77\n7Kxjbi92IiKa6c6T3vr6+jnHJr0U43K50N/fj1AohGg0itbWVlRUVMw69s4L+UII+Hw+OBwO1NbW\nphifiIjuR9JXxQDA2bNnUVtbi1gsBp/Ph9dffx3Nzc0AgJqaGgwPD8PtdmN0dBQZGRlYvHgx+vr6\ncOHCBXz3u9/F2rVr45d0Dh48iGeeeeb/A/BVMbrKQETJ6f1VMSkV+0JisesrAxElp/di5ztPiYgk\nw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIi\nybDYiYgkw2InIpIMi52ISDJJiz0QCMBms8FqtaKhoWHG/suXL2P9+vXIysrCkSNH7upYIiKaf6oL\nbcRiMaxevRodHR0wmUxwu91oaWmB3W6Pj/n888/xySef4NSpU1i6dCn279+f8rEAF9rQWwYiSu6B\nXmiju7sbFosFhYWFMBqNqKqqQltbW8KY/Px8uFwuGI3Guz6WiIjmn2qxRyIRmM3m+LaiKIhEIind\n8f0cS0RE90612L9ZgPpe3M+xRER07zLVdppMJoTD4fh2OByGoigp3fHdHFtXVxf/2Ov1wuv1pjQH\nEdHDIhgMIhgMpjRW9cnTqakprF69Gn/729+wcuVKPPnkk7M+AQpMl/PixYvjT56meiyfPNVXBiJK\nTu9PnqqesWdmZqKpqQnl5eWIxWLw+Xyw2+1obm4GANTU1GB4eBhutxujo6PIyMhAY2Mj+vr6kJ2d\nPeuxRES0sFTP2DUJwDN2XWUgouT0fsbOd54SEUmGxU5EJBkWOxGRZFjsRESSYbETEUmGxU5EJBkW\nOxGRZFjsRESSYbETEUmGxU5EJBkWOxGRZFT/CJhWtPrb7YsXL8Xo6BeazEVElC66KHat/vDV2BgX\n/yAi+fFSDBGRZFjsRESSYbETEUkmabEHAgHYbDZYrVY0NDTMOmbfvn2wWq1wOp3o7e2Nf/7gwYMo\nLi7GmjVrsGPHDty8eXP+khMR0axUiz0Wi2Hv3r0IBALo6+tDS0sLPvroo4Qxfr8fV65cQX9/P956\n6y288sorAIBQKIS3334bPT09uHTpEmKxGE6ePLlwj4SIiAAkKfbu7m5YLBYUFhbCaDSiqqoKbW1t\nCWPa29uxe/duAIDH48HIyAiuXbuGnJwcGI1GTExMYGpqChMTEzCZTAv3SIiICECSYo9EIjCbzfFt\nRVEQiURSGrNs2TLs378fjz76KFauXInc3Fxs2rRpnuMTEdGdVIs91TcOzbag6tWrV3H06FGEQiEM\nDQ1hfHwc77777r2lJCKilKm+QclkMiEcDse3w+EwFEVRHTM4OAiTyYRgMIgNGzYgLy8PALBt2zac\nO3cOO3funGWmuts+9t66ERHRN4LBIILBYGqDhYrJyUnx+OOPi4GBAXHz5k3hdDpFX19fwpgzZ86I\nzZs3CyGE+PDDD4XH4xFCCNHb2yuKi4vFxMSE+Prrr0V1dbVoamqaMQcAAQiNbnM/XD3k0EMGIkpO\nu59V9c6ai+oZe2ZmJpqamlBeXo5YLAafzwe73Y7m5mYAQE1NDbZs2QK/3w+LxYJFixbh+PHjAIDS\n0lJUV1fD5XIhIyMD69atw8svv3wvv6iIiOguGG41f/oCGAzQ6m/FAIZZnw/QSw49ZCCi5LT7WVXv\nrLn28Z2nRESSYbETEUmGxU4z5OQsg8Fg0OSWk7Ms3Q+XHiD83kwNr7HrKIceMugpB9Gd9PK9yWvs\nRESkKRY7EZFkWOxERJJhsRMRSYbFTkQkGRY7EZFkWOxERJJhsRMRSYbFTkQkGRY7EZFkWOxERJJh\nsRMRSSZpsQcCAdhsNlitVjQ0NMw6Zt++fbBarXA6nejt7Y1/fmRkBJWVlbDb7XA4HOjq6pq/5ERE\nNDu1df2mpqZEUVGRGBgYENFoNOmap11dXfE1T4UQorq6WrzzzjtCiOn1U0dGRtK4diDXPH2QvhaL\nFy+9lWPhb4sXL53za6GHHHrIoGUOtQx6+N7UNod6hrmornna3d0Ni8WCwsJCAEBVVRXa2tpgt9vj\nY9rb27F7924AgMfjwcjICK5du4asrCx0dnbit7/9LYDp9VOXLFmiNh1R3NjY/wIa/XnWsTGDrnPo\nIYOWOdQyUGpUL8VEIhGYzeb4tqIoiEQiSccMDg5iYGAA+fn5eOGFF7Bu3Tq89NJLmJiYmOf4RER0\nJ9Uz9uk/Jp/c9P8KEo+bmppCT08Pmpqa4Ha7UVtbi0OHDuGNN96Y5R7qbvvYe+tGRETfCAaDCAaD\nKY1VLXaTyYRwOBzfDofDUBRFdczg4CBMJhOEEFAUBW63GwBQWVmJQ4cOzTFTXUphiYgeVl6vF16v\nN75dX18/51jVSzEulwv9/f0IhUKIRqNobW1FRUVFwpiKigqcOHECANDV1YXc3FysWLECBQUFMJvN\n+PjjjwEAHR0dKC4uvtfHREREKVI9Y8/MzERTUxPKy8sRi8Xg8/lgt9vR3NwMAKipqcGWLVvg9/th\nsViwaNEiHD9+PH78sWPHsHPnTkSjURQVFSXsIyKihcHFrHWUQw8Z9JJDDxn0kkMPGbTNoYcMesnB\nxayJiAgsdiIi6bDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIiybDYiYgk\nw2InIpIMi52ISDIsdiIiybDYiYgkw2InIpJM0mIPBAKw2WywWq1oaGiYdcy+fftgtVrhdDrR29ub\nsC8Wi6GsrAxbt26dn8RERKRKtdhjsRj27t2LQCCAvr4+tLS04KOPPkoY4/f7ceXKFfT39+Ott97C\nK6+8krC/sbERDofj1oojRES00FSLvbu7GxaLBYWFhTAajaiqqkJbW1vCmPb2duzevRsA4PF4MDIy\ngmvXrgEABgcH4ff7sWfPnjmXcCIiovmlWuyRSARmszm+rSgKIpFIymNeffVVHD58GBkZvJRPRKSV\nTLWdqV4+ufNsXAiB06dPY/ny5SgrK0MwGExyD3W3fey9dSMiom8Eg8EUunSaarGbTCaEw+H4djgc\nhqIoqmMGBwdhMpnwhz/8Ae3t7fD7/bhx4wZGR0dRXV2NEydOzDJTXUphiYgeVl6vF16vN75dX18/\n92ChYnJyUjz++ONiYGBA3Lx5UzidTtHX15cw5syZM2Lz5s1CCCE+/PBD4fF4ZtxPMBgUP/zhD2ed\nA4AAhEa3uR+uHnLoIYNecughg15y6CGDtjn0kEEvOdQzzEX1jD0zMxNNTU0oLy9HLBaDz+eD3W5H\nc3MzAKCmpgZbtmyB3++HxWLBokWLcPz48Vnvi6+KISLShuFW86cvgMEAQKsIBsz1cPWQQw8Z9JJD\nDxn0kkMPGbTNoYcMesmhnmGufXy5ChGRZFjsRESSYbETEUmGxU5EJBkWOxGRZFjsRESSYbETEUmG\nxU5EJBkWOxGRZFjsRESSYbETEUmGxU5EJBkWOxGRZFjsRESSYbETEUmGxU5EJJmUij0QCMBms8Fq\ntaKhoWHWMfv27YPVaoXT6URvby+A6TVSN27ciOLiYpSUlODNN9+cv+RERDS7ORfNu2VqakoUFRWJ\ngYEBEY1Gk6572tXVFV/39LPPPhO9vb1CCCHGxsbEqlWrZhyLh24Nw7lz6CGDXnLoIYNecughg7Y5\n9JBBLznUM8wl6Rl7d3c3LBYLCgsLYTQaUVVVhba2toQx7e3t2L17NwDA4/FgZGQE165dQ0FBAUpL\nSwEA2dnZsNvtGBoaur/fREREpCppsUciEZjN5vi2oiiIRCJJxwwODiaMCYVC6O3thcfjud/MRESk\nIjPZgOlFW5Ob/p/B7MeNj4+jsrISjY2NyM7OnuXouts+9t66ERHRN4LBIILBYEpjkxa7yWRCOByO\nb4fDYSiKojpmcHAQJpMJADA5OYnt27dj165dePbZZ+eYpS6lsEREDyuv1wuv1xvfrq+vn3Ns0ksx\nLpcL/f39CIVCiEajaG1tRUVFRcKYiooKnDhxAgDQ1dWF3NxcrFixAkII+Hw+OBwO1NbW3uPDISKi\nu5H0jD0zMxNNTU0oLy9HLBaDz+eD3W5Hc3MzAKCmpgZbtmyB3++HxWLBokWLcPz4cQDABx98gN/9\n7ndYu3YtysrKAAAHDx7EM888s4APiYjo4WYQd14c1zqAwQBAqwiGGc8F6CmHHjLoJYceMuglhx4y\naJtDDxn0kkM9w1z7+M5TIiLJsNiJiCTDYicikgyLnYhIMix2IiLJsNiJiCTDYicikgyLnYhIMix2\nIiLJsNiJiCTDYicikgyLnYhIMix2IiLJsNiJiCTDYicikkzSYg8EArDZbLBarWhoaJh1zL59+2C1\nWuF0OtHb23tXxxIR0TwTKqampkRRUZEYGBgQ0WhUOJ1O0dfXlzDmzJkzYvPmzUIIIbq6uoTH40n5\n2FuLfAhA3Oftf1IcN/fD1UMOPWTQSw49ZJifHKlm4NdCmwx6yTE/Geaiesbe3d0Ni8WCwsJCGI1G\nVFVVoa2tLWFMe3s7du/eDQDweDwYGRnB8PBwSsfOn+AC3e/dCqY7APSRAdBHjmC6A0AfGQB95Aim\nO8AtwXQHwEJnUC32SCQCs9kc31YUBZFIJKUxQ0NDSY8lIqL5p1rs0+v6JTf9vwIiItKDTLWdJpMJ\n4XA4vh0Oh6EoiuqYwcFBKIqCycnJpMcCgNPpxMWLqf0CUVef0ij1X1Z6yKGHDHrJoYcM85EjtQzq\nOR6ur4X+vzfnI8f9ZXA6nXMeo1rsLpcL/f39CIVCWLlyJVpbW9HS0pIwpqKiAk1NTaiqqkJXVxdy\nc3OxYsUK5OXlJT0WAC5cuJDKYyMiohSpFntmZiaamppQXl6OWCwGn88Hu92O5uZmAEBNTQ22bNkC\nv98Pi8WCRYsW4fjx46rHEhHRwjIIXiAnIpLKA//O03S/CerFF1/EihUrsGbNGs3nvl04HMbGjRtR\nXFyMkpISvPnmm5pnuHHjBjweD0pLS+FwOPD6669rnuEbsVgMZWVl2Lp1a9oyFBYWYu3atSgrK8OT\nTz6ZlgwjIyOorKyE3W6Hw+FAV1eX5hn++c9/oqysLH5bsmRJWr4/Dx48iOLiYqxZswY7duzAzZs3\nNc8AAI2NjVizZg1KSkrQ2Ni4MJPM+Qr3B0Cqb4JaSO+//77o6ekRJSUlms57p88++0z09vYKIYQY\nGxsTq1at0vxrIYQQX331lRBCiMnJSeHxeERnZ6fmGYQQ4siRI2LHjh1i69ataZlfCCEKCwvFf//7\n37TNL4QQ1dXV4p133hFCTP+bjIyMpDVPLBYTBQUF4tNPP9V03oGBAfHYY4+JGzduCCGE+PGPfyx+\n85vfaJpBCCEuXbokSkpKxPXr18XU1JTYtGmTuHLlyrzP80CfsWv7JqjZPfXUU1i6dKmmc86moKAA\npaWlAIDs7GzY7XYMDQ1pnuM73/kOACAajSIWi2HZsmWaZxgcHITf78eePXvS/lLcdM7/5ZdforOz\nEy+++CKA6ee9lixZkrY8ANDR0YGioqKE97hoIScnB0ajERMTE5iamsLExARMJpOmGQDg8uXL8Hg8\nyMrKwre+9S1873vfwx//+Md5n+eBLvZU3kD1MAqFQujt7YXH49F87q+//hqlpaVYsWIFNm7cCIfD\noXmGV199FYcPH0ZGRnq/vQ0GAzZt2gSXy4W3335b8/kHBgaQn5+PF154AevWrcNLL72EiYkJzXPc\n7uTJk9ixY4fm8y5btgz79+/Ho48+ipUrVyI3NxebNm3SPEdJSQk6OzvxxRdfYGJiAmfOnMHg4OC8\nz/NAF3uqb6B6mIyPj6OyshKNjY3Izs7WfP6MjAxcuHABg4ODeP/99xEMBjWd//Tp01i+fDnKysrS\nfrb+wQcfoLe3F2fPnsWvfvUrdHZ2ajr/1NQUenp68JOf/AQ9PT1YtGgRDh06pGmG20WjUfz5z3/G\nj370I83nvnr1Ko4ePYpQKIShoSGMj4/j3Xff1TyHzWbDz3/+c3z/+9/H5s2bUVZWtiAnIA90safy\nBqqHyeTkJLZv345du3bh2WefTWuWJUuW4Ac/+AHOnz+v6bznzp1De3s7HnvsMTz//PN47733UF1d\nrWmGbzzyyCMAgPz8fDz33HPo7u7WdH5FUaAoCtxuNwCgsrISPT09mma43dmzZ/HEE08gPz9f87nP\nnz+PDRs2IC8vD5mZmdi2bRvOnTuneQ5g+gUX58+fx9///nfk5uZi9erV8z7HA13st7+BKhqNorW1\nFRUVFemOlRZCCPh8PjgcDtTW1qYlw3/+8x+MjIwAAK5fv46//vWvKCsr0zTDgQMHEA6HMTAwgJMn\nT+Lpp5/GiRMnNM0AABMTExgbGwMAfPXVV/jLX/6i+SunCgoKYDab8fHHHwOYvr5dXFysaYbbtbS0\n4Pnnn0/L3DabDV1dXbh+/TqEEOjo6EjLZUIA+Pe//w0A+PTTT/GnP/1pYS5NzfvTsRrz+/1i1apV\noqioSBw4cEDz+auqqsQjjzwivv3tbwtFUcSvf/1rzTMIIURnZ6cwGAzC6XSK0tJSUVpaKs6ePatp\nhn/84x+irKxMOJ1OsWbNGvHLX/5S0/nvFAwG0/aqmH/961/C6XQKp9MpiouL0/K9KYQQFy5cEC6X\nS6xdu1Y899xzaXtVzPj4uMjLyxOjo6NpmV8IIRoaGoTD4RAlJSWiurpaRKPRtOR46qmnhMPhEE6n\nU7z33nsLMgffoEREJJkH+lIMERHNxGInIpIMi52ISDIsdiIiybDYiYgkw2InIpIMi52ISDIsdiIi\nyfwf+vSYxeHQUa4AAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 85 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So after the first sense we have assigned a high probability to each door position, and a low probability to each wall position. The update step shifted these probabilities to the right, smearing them about a bit. Now lets look at what happens at the next sense." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "p = sense (p, 1, .6, .2)\n", + "print p\n", + "bar_plot(p)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "output_type": "stream", + "stream": "stdout", + "text": [ + "[ 0.15671642 0.31343284 0.10447761 0.04477612 0.03731343 0.03731343\n", + " 0.03731343 0.03731343 0.13432836 0.09701493]\n" + ] + }, + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAAAAAElFTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 86 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Notice the tall bar at position 1. This corresponds with the (correct) case of starting at position 0, sensing a door, shifting 1 to the right, and sensing another door. No other positions make this set of observations as likely. Now lets add an update and then sense the wall." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "p = update (p, 1, .8, .1, .1)\n", + "p = sense (p, 0, .6, .2)\n", + "bar_plot (p)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nvmzTIfXHo5gAAAAASUVORK5CYII=\n", + "text": [ + "" + ] + } + ], + "prompt_number": 91 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This is exciting! We have a very prominent bar at position 2 with a value of around 35%. It is over twice the value of any other bar in the plot, and is about 4% larger than our last plot, where the tallest bar was around 31%. Let's see one more sense->update cycle." + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "p = update (p, 1, .8, .1, .1)\n", + "p = sense (p, 0, .6, .2)\n", + "bar_plot (p)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nTkSuQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 92 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here things have degraded a bit due to the long string of wall positions in the map. We cannot be as sure where we are when there is an undifferentiated line of wall positions, so naturally our probabilities spread out a bit." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# The Effect of Bad Sensor Data\n", + "\n", + "You may be suspicious of the results above because I always passed correct sensor data into the functions. However, we are claiming that this code implements a *filter* - it should filter out bad sensor measurements. Does it do that?\n", + "\n", + "To make this easy to program and visualize I will change the layout of the hallway to mostly alternating doors and hallways:" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "hallway = [1,0,1,0,0,1,0,1,0,0]\n", + "pos = array([.1]*10)\n", + "measurements = [1,0,1,0,0]\n", + "\n", + "for m in measurements:\n", + " pos = sense (pos, m, .6, .2)\n", + " pos = update (pos, 1, .8, .1, .1)\n", + "bar_plot(pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\n+fL5fBoZGdHY2JhGRkbk9/tdzSBJZ86cUSwW0+zZs/WJT3xCn//85/XLX/5y2ud5YIs9m5unHlYD\nAwM6efKkYrGY63P/97//VXV1tRYvXqwnnnhCFRUVrmf4zne+ox/96EeaNSu3y9txHNXX1ysajWrX\nrl2uz9/f36/CwkJ9/etf12c/+1lt3bpVIyMjrue41WuvvaZNmza5Pm9BQYGef/55feYzn1FxcbEW\nLFig+vp613NUVlbq6NGj+uCDDzQyMqIDBw5ocHBw2ud5YIs925unHjZXrlzRxo0btXPnTs2dO9f1\n+WfNmqVTp05pcHBQb731luLxuKvz/+Y3v9GnP/1p1dTU5PxsvaenRydPntShQ4f0s5/9TEePHnV1\n/rGxMZ04cULf/OY3deLECc2ZM0c/+MEPXM1wq9HRUf3617/WV77yFdfn/vvf/64f//jHGhgY0Pnz\n53XlyhXt3bvX9RyhUEjf/e53tXbtWq1bt041NTUzcgLywBZ7NjdPPWyuX7+uL3/5y/ra176mL33p\nSznNkp+fry9+8Ys6fvy4q/MeO3ZM+/fv19KlS/XUU0/pjTfe0JYtW1zN8LGioiJJUmFhoTZs2KBE\nIuHq/IFAQIFAQLW1tZKkjRs36sSJE65muNWhQ4f0uc99ToWFha7Pffz4cT322GNatGiR8vLy1NTU\npGPHjrmeQ7rxgYvjx4/rD3/4gxYsWKBly5ZN+xwPbLHfevPU6OioOjs71djYmOtYOWOMUUtLiyoq\nKvTtb387Jxn+/e9/a2hoSJJ07do1/e53v1NNTY2rGV566SUlk0n19/frtdde0xe+8AW9+uqrrmaQ\npJGREV2+fFmSdPXqVR0+fNj1T04tWbJEJSUl+utf/yrpxvXt5cuXu5rhVvv27dNTTz2Vk7lDoZB6\ne3t17do1GWN05MiRnFwmlKT33ntPknTu3Dn96le/mplLU9P+dqyLDh48aB599FFTWlpqXnrppZxk\naG5uNkVFReaTn/ykCQQCZs+ePTnJcfToUeM4jolEIqa6utpUV1ebQ4cOuZrh9OnTpqamxkQiEbNi\nxQrzwx/+0NX5/1c8Hs/Zp2L+8Y9/mEgkYiKRiFm+fHnO1uepU6dMNBo1VVVVZsOGDTn7VMyVK1fM\nokWLzPDwcE7mN8aYtrY2U1FRYSorK82WLVvM6OhoTnKsXr3aVFRUmEgkYt54440ZmYMblADAMg/s\npRgAwJ1R7ABgGYodACxDsQOAZSh2ALAMxQ4AlqHYAcAyFDsAWOb/AM8XDghkBPSFAAAAAElFTkSu\nQmCC\n", + "text": [ + "" + ] + } + ], + "prompt_number": 97 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "At this point we have correctly identified the likely cases, we either started at position 0 or 5, because we saw the following sequence of doors and walls 1,0,1,0,0. But now lets inject a bad measurement, and see what happens:\n" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "pos = sense (pos, m, .6, .2)\n", + "pos = update (pos, 1, .8, .1, .1)\n", + "bar_plot(pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nrkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 98 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "That one bad measurment appears to have significantly eroded our knowledge. However, note that our highest probabilities are still at 0 and 5, which is correct. Now let's continue with a series of correct measurements" + ] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [ + "measurements = [0,1,0,1,0,0]\n", + "\n", + "for m in measurements:\n", + " pos = sense (pos, m, .6, .2)\n", + " pos = update (pos, 1, .8, .1, .1)\n", + "bar_plot(pos)" + ], + "language": "python", + "metadata": {}, + "outputs": [ + { + "metadata": {}, + "output_type": "display_data", + "png": "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\nAcAy/wdXqpA50S9AggAAAABJRU5ErkJggg==\n", + "text": [ + "" + ] + } + ], + "prompt_number": 100 + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As you can see we quickly filtered out the bad sensor reading and converged on the most likely positions for our dog." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Summary\n", + "\n", + "The code is very small, but the result is huge! We will go into the math more later, but we have implemented a form of a Bayesian filter. It is commonly called a Histogram filter. The Kalman filter is also a Bayesian filter, and uses this same logic to produce it's results. The math is a bit more complicated, but not by much. For now, we will just explain that Bayesian statistics compute the liklihood of the present based on the past. If we know there are two doors in a row, and the sensor reported two doors in a row, it is likely that we are positioned near those doors. Bayesian statistics just formalizes that example, and Bayesian filters formalize filtering data based on that math by implementing the sense->update->sense->update process. \n", + "\n", + "We have learned how to start with no information and derive information from noisy sensors. Even though our sensors are very noisey (most sensors are more then 80% accurate, for example) we quickly converge on the most likely position for our dog. We have learned how the update step always degrades our knowledge, but the addition of another measurement, even when it might have noise in it, improves our knowlege, allowing us to converge on the most likely result.\n", + "\n", + "If you followed the math carefully you will realize that all of this math is exact. The bar charts that we are displaying are not an *estimate* or *guess* - they are mathematically exact results that exactly represent our knowledge. The knowledge is probabilistic, to be sure, but it is exact, and correct.\n", + "\n", + "However, we are a long way from tracking an airplane or a car. This code only handles the 1 dimensional case, whereas cars and planes operate in 2 or 3 dimensions. Also, our position vector is *multimodal*. It expresses multiple beliefs at once. Imagine if your GPS told you \"it's 20% likely that you are here, but 10% likely that you are on this other road, and 5% likely that you are at one of 14 other locations. That would not be very useful information. Also, the data is discrete. We split an area into 10 (or whatever) different locations, whereas in most real world applications we want to work with continuous data. We want to be able to represent moving 1 km, 1 meter, 1 mm, or any arbitrary amount, such as 2.347 cm. \n", + "\n", + "Finally, the bar charts may strike you as being a bit less certain than we would want. A 25% certaintly may not give you a lot of confidence in the anwser. Of course, what is important here is the ratio of this probability to the other probabilities in your vector. If the next largest bar is 23% then we are not very knowledgable about our position, whereas if the next largest is 3% we are in fact quite certain. But this is not clear or intuitive. However, there is an extremely important insight that Kalman filters implement that will signficantly improve our accuracy from the same data.\n", + "\n", + "**If you can understand this chapter you will be able to understand and implement Kalman filters** I cannot stress this enough. If anything is murky, go back and reread this chapter and play with the code. the rest of this book will build on the algorithms that we use here. If you don't intuitively understand why this histogram filter works, and can at least work through the math, you will have little success with the rest of the material. However, if you grasp the fundamental insight - multiplying probabilities when we measure, and shifting probabilities when we update leads to a converging solution - then you understand everything important you need to grasp the Kalman filter. " ] }, { @@ -278,6 +782,22 @@ "Gaussian Probabilities" ] }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + }, + { + "cell_type": "code", + "collapsed": false, + "input": [], + "language": "python", + "metadata": {}, + "outputs": [] + }, { "cell_type": "markdown", "metadata": {},