{
"metadata": {
"name": "",
"signature": "sha256:cd2405175a06c2ebdde08ed8610f15c145ad09340c50cd4c69b54309d12deb44"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Table of Contents](http://nbviewer.ipython.org/github/rlabbe/Kalman-and-Bayesian-Filters-in-Python/blob/master/table_of_contents.ipynb)"
]
},
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Designing Nonlinear 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()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"\n",
"\n"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": [
""
]
}
],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"** Author's note: I was initially planning to have a design nonlinear chapter that compares various approaches. This may or may not happen, but for now this chapter has no useful content and I suggest not reading it. **"
]
},
{
"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": 3,
"metadata": {},
"source": [
"Kalman Filter with Air Drag"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I will dispense with the step 1, step 2, type approach and proceed in a more natural style that you would use in a non-toy engineering problem. We have already developed a Kalman filter that does excellently at tracking a ball in a vacuum, but that does not incorporate the effects of air drag into the model. We know that the process model is implemented with $\\textbf{F}$, so we will turn our attention to that immediately.\n",
"\n",
"Notionally, the computation that $\\textbf{F}$ computes is\n",
"\n",
"$$x' = Fx$$\n",
"\n",
"With no air drag, we had\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": "markdown",
"metadata": {},
"source": [
"which corresponds to the equations\n",
"\n",
"$$ \n",
"\\begin{aligned}\n",
"x &= x + v_x \\Delta t \\\\\n",
"v_x &= v_x \\\\\n",
"\\\\\n",
"y &= y + v_y \\Delta t + \\frac{a_y}{2} {\\Delta t}^2 \\\\\n",
"v_y &= v_y + a_y \\Delta t \\\\\n",
"a_y &= a_y\n",
"\\end{aligned}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From the section above we know that our new Euler equations must be\n",
"\n",
"$$ \n",
"\\begin{aligned}\n",
"x &= x + v_x \\Delta t \\\\\n",
"v_x &= v_x \\\\\n",
"\\\\\n",
"y &= y + v_y \\Delta t + \\frac{a_y}{2} {\\Delta t}^2 \\\\\n",
"v_y &= v_y + a_y \\Delta t \\\\\n",
"a_y &= a_y\n",
"\\end{aligned}\n",
"$$"
]
},
{
"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": [
"circle1=plt.Circle((-4, 0), 5, color='#004080', \n",
" fill=False, linewidth=20, alpha=.7)\n",
"circle2=plt.Circle((4, 0), 5, color='#E24A33', \n",
" 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], c='#004080')\n",
"plt.plot ([4, 0], [0, 3], c='#E24A33')\n",
"plt.text(-4, -.5, \"A\", fontsize=16, horizontalalignment='center')\n",
"plt.text(4, -.5, \"B\", fontsize=16, horizontalalignment='center')\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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\nHzduHHQ6HUpLSzF27FglwiNSRUJCAnQ6Haqrq9uUV1dXIzk5WaOoiNRhtVoxYsQIlJaWah0KkaKu\nfxevrq5GWlrajfLq6uoOv6f3ONmIj49HfHx8T6sBAEyZMgUtLS3Ys2fPjXkbe/bsQWtrK/Ly8mRp\ng0hOPbn+i4uL4fV6+WWMQp7RaMT48eOxadMm3HnnnTfKN2/ejLvuukvDyIiU53A4cPLkScyZM0fr\nUIgUlZmZiX79+mHTpk0YP348gGvX/86dO/G73/2u3c+pOmfj+hJxZ86cAQAcP34cdXV1GDBgAPr0\n6YNhw4Zh4cKFeOyxx/Daa69BkiQ89thjWLp0KbKzs9UMlUhWZWVlWL16NRYvXoz4+HicOHECP/vZ\nzzBu3DhMnTpV6/CIeuynP/0pHnjgAUycOBF5eXl45ZVXUFVVhR/84Adah0Ykq//8z//EsmXLkJ6e\njpqaGvzyl7+E3W7HQw89pHVoRD3W2tqKkpISAIDP58P58+dx5MgRxMfHIz09HU888QSef/55DB06\nFNnZ2Xj22WcRFRXV8b5hkop+8YtfSIIgSIIgSKIo3vjvW2+9deOc+vp66f7775eio6Ol6Oho6YEH\nHpAaGxvVDJNIdhcuXJBmzpwpxcfHSyaTSRo0aJD0xBNPSPX19VqHRiSbP//5z1JGRoZkMpmk3Nxc\nqaCgQOuQiGR37733SikpKZLRaJRSU1OlFStWSCdPntQ6LCJZbN++3e+7uiAI0ne+850b5zzzzDNS\ncnKyZDabpVmzZknHjx/vsE5N9tkgIiIiIqLwF1T7bBARERERUfhgskFERERERIpgskFERERERIpg\nskFERERERIpgskFERERERIpgskFERERERIpgskFERERERIpgskFERERERIr4/wGrO2Wh2QA//AAA\nAABJRU5ErkJggg==\n",
"text": [
""
]
}
],
"prompt_number": 2
},
{
"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 blue transmitter more error than the red 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. It is computed as the partial derivative of $\\mathbf{H}$ as follows:\n",
"\n",
"$$\\frac{\\partial \\mathbf{h}}{\\partial \\mathbf{x}} = \n",
"\\begin{bmatrix}\n",
"\\frac{\\partial h_1}{\\partial x_1} & \\frac{\\partial h_1}{\\partial x_2} &\\dots \\\\\n",
"\\frac{\\partial h_2}{\\partial x_1} & \\frac{\\partial h_2}{\\partial x_2} &\\dots \\\\\n",
"\\vdots & \\vdots\n",
"\\end{bmatrix}\n",
"$$\n",
"\n",
"Let's work the first partial derivative. We want to find\n",
"\n",
"$$\\frac{\\partial }{\\partial x} \\sqrt{(x-x_A)^2 + (y-y_A)^2}\n",
"$$\n",
"\n",
"Which we compute as\n",
"$$\n",
"\\begin{aligned}\n",
"\\frac{\\partial h_1}{\\partial x} &= ((x-x_A)^2 + (y-y_A)^2))^\\frac{1}{2} \\\\\n",
"&= \\frac{1}{2}\\times 2(x-x_a)\\times ((x-x_A)^2 + (y-y_A)^2))^{-\\frac{1}{2}} \\\\\n",
"&= \\frac{x_r - x_A}{\\sqrt{(x_r-x_A)^2 + (y_r-y_A)^2}} \n",
"\\end{aligned}\n",
"$$\n",
"\n",
"We continue this computation for the partial derivatives of the two distance equations with respect to $x$, $y$, $dx$ and $dy$, yielding\n",
"\n",
"$$\\frac{\\partial\\mathbf{h}}{\\partial\\mathbf{x}}=\n",
"\\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": [
"That is pretty painful, and these are very simple equations. Computing the Jacobian can be extremely difficult or even impossible for more complicated systems. However, there is an easy way to get Python to do the work for you by using the `sympy` module [1]. `sympy` is a Python library for symbolic mathematics. The full scope of its abilities are beyond this book, but it can perform algebra, integrate and differentiate equations, find solutions to differential equations, and much more. We will use it to compute our Jabobian!\n",
"\n",
"First, a simple example. We will import sympy, initialize its pretty print functionality (which will print equations using LaTeX). We will then declare a symbol for numpy to use."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sympy\n",
"from sympy import init_printing\n",
"#from sympy.interactive import printing\n",
"init_printing(use_latex='mathjax')\n",
"\n",
"phi, x = sympy.symbols('\\phi, x')\n",
"phi"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\phi$$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 3,
"text": [
"\\phi"
]
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice how we use a latex expression for the symbol `phi`. This is not necessary, but if you do it will render as LaTeX when output. Now let's do some math. What is the derivative of $\\sqrt{\\phi}$?"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sympy.diff('sqrt(phi)')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\frac{1}{2 \\sqrt{\\phi}}$$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
" 1 \n",
"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n",
" ___\n",
"2\u22c5\u2572\u2571 \u03c6 "
]
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can factor equations."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"sympy.factor('phi**3 -phi**2 + phi - 1')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left(\\phi - 1\\right) \\left(\\phi^{2} + 1\\right)$$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 5,
"text": [
" \u239b 2 \u239e\n",
"(\u03c6 - 1)\u22c5\u239d\u03c6 + 1\u23a0"
]
}
],
"prompt_number": 5
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`sympy` has a remarkable list of features, and as much as I enjoy exercising its features we cannot cover them all here. Instead, let's compute our Jacobian."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from sympy import symbols, Matrix\n",
"phi = symbols('\\phi')\n",
"phi\n",
"\n",
"x, y, xa, xb, ya, yb, dx, dy = symbols('x y x_a x_b y_a y_b dx dy')\n",
"\n",
"H = Matrix([[sympy.sqrt((x-xa)**2 + (y-ya)**2)], \n",
" [sympy.sqrt((x-xb)**2 + (y-yb)**2)]])\n",
"\n",
"state = Matrix([x, dx, y, dy])\n",
"H.jacobian(state)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"latex": [
"$$\\left[\\begin{matrix}\\frac{x - x_{a}}{\\sqrt{\\left(x - x_{a}\\right)^{2} + \\left(y - y_{a}\\right)^{2}}} & 0 & \\frac{y - y_{a}}{\\sqrt{\\left(x - x_{a}\\right)^{2} + \\left(y - y_{a}\\right)^{2}}} & 0\\\\\\frac{x - x_{b}}{\\sqrt{\\left(x - x_{b}\\right)^{2} + \\left(y - y_{b}\\right)^{2}}} & 0 & \\frac{y - y_{b}}{\\sqrt{\\left(x - x_{b}\\right)^{2} + \\left(y - y_{b}\\right)^{2}}} & 0\\end{matrix}\\right]$$"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"\u23a1 x - x\u2090 y - y\u2090 \u23a4\n",
"\u23a2 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 0\u23a5\n",
"\u23a2 _______________________ _______________________ \u23a5\n",
"\u23a2 \u2571 2 2 \u2571 2 2 \u23a5\n",
"\u23a2 \u2572\u2571 (x - x\u2090) + (y - y\u2090) \u2572\u2571 (x - x\u2090) + (y - y\u2090) \u23a5\n",
"\u23a2 \u23a5\n",
"\u23a2 x - x_b y - y_b \u23a5\n",
"\u23a2\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 0 \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 0\u23a5\n",
"\u23a2 _________________________ _________________________ \u23a5\n",
"\u23a2 \u2571 2 2 \u2571 2 2 \u23a5\n",
"\u23a3\u2572\u2571 (x - x_b) + (y - y_b) \u2572\u2571 (x - x_b) + (y - y_b) \u23a6"
]
}
],
"prompt_number": 6
},
{
"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 not provide 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": [
"from math import sin, cos, atan2\n",
"\n",
"def H_of(pos, pos_A, pos_B):\n",
" \"\"\" Given the position of our object at 'pos' in 2D, and two \n",
" transmitters A and B at positions 'pos_A' and 'pos_B', return \n",
" the partial derivative of H\n",
" \"\"\"\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.array([[0, -cos(theta_a), 0, -sin(theta_a)],\n",
" [0, -cos(theta_b), 0, -sin(theta_b)]])"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we need to create our simulated sensor. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from numpy.random import randn\n",
"\n",
"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 + randn()*self.noise_factor, \n",
" rb + randn()*self.noise_factor)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"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",
"from filterpy.kalman import KalmanFilter\n",
"import numpy as np\n",
"import book_plots as bp\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.array ([[0, 1, 0, 0],\n",
" [0, 0, 0, 0],\n",
" [0, 0, 0, 1],\n",
" [0, 0, 0, 0]], dtype=float)\n",
"\n",
"f1.R *= 1.\n",
"f1.Q *= .1\n",
"\n",
"f1.x = np.array([[1, 0, 1, 0]], dtype=float).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\n",
" # and measured ranges\n",
" ra,rb = d.range_of(pos)\n",
" rx,ry = d.range_of((pos[0] + f1.x[0, 0], pos[1] + f1.x[2, 0]))\n",
" z = np.array([[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",
"bp.plot_filter(xs, ys)\n",
"bp.plot_track(pxs, pys)\n",
"plt.legend(loc=2)\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
""
]
}
],
"prompt_number": 9
},
{
"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": "heading",
"level": 2,
"metadata": {},
"source": [
"References"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[1] http://sympy.org\n"
]
}
],
"metadata": {}
}
]
}