diff --git a/Chapter07_Kalman_Filter_Math/Kalman_Filter_Math.ipynb b/Chapter07_Kalman_Filter_Math/Kalman_Filter_Math.ipynb index 5ac78d2..9deeabb 100644 --- a/Chapter07_Kalman_Filter_Math/Kalman_Filter_Math.ipynb +++ b/Chapter07_Kalman_Filter_Math/Kalman_Filter_Math.ipynb @@ -1,7 +1,7 @@ { "metadata": { "name": "", - "signature": "sha256:a73447c9246d1dd1dc9c4cb604b69a1588146a3a4d575d676bb8402d8964f8d0" + "signature": "sha256:01ef2af3b68e3abffe35ee916e0df666540b2491ee054656e7641112e4934357" }, "nbformat": 3, "nbformat_minor": 0, @@ -257,18 +257,21 @@ ], "metadata": {}, "output_type": "pyout", - "prompt_number": 2, + "prompt_number": 1, "text": [ - "" + "" ] } ], - "prompt_number": 2 + "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ + "** author's note:** *the ordering of material in this chapter is questionable. I delve into solving ODEs before discussing the basic Kalman equations. If you are reading this while it is being worked on (so long as this notice exists), you may find it easier to skip around a bit until I organize it better.*\n", + "\n", + "\n", "If you've gotten this far I hope that you are thinking that the Kalman filter's fearsome reputation is somewhat undeserved. Sure, I hand waved some equations away, but I hope implementation has been fairly straightforward for you. The underlying concept is quite straightforward - take two measurements, or a measurement and a prediction, and choose the output to be somewhere between the two. If you believe the measurement more your guess will be closer to the measurement, and if you believe the prediction is more accurate your guess will lie closer it it. That's not rocket science (little joke - it is exactly this math that got Apollo to the moon and back!). \n", "\n", "Well, to be honest I have been choosing my problems carefully. For any arbitrary problem finding some of the matrices that we need to feed into the Kalman filter equations can be quite difficult. I haven't been *too tricky*, though. Equations like Newton's equations of motion can be trivially computed for Kalman filter applications, and they make up the bulk of the kind of problems that we want to solve. If you are a hobbyist, you can safely pass by this chapter for now, and perhaps forever. Some of the later chapters will assume the material in this chapter, but much of the work will still be accessible to you. \n", @@ -281,7 +284,7 @@ "level": 2, "metadata": {}, "source": [ - "Modeling a Linear System that Has Noise" + "Modeling a Dynmaic System that Has Noise" ] }, { @@ -296,14 +299,14 @@ "$$\n", "\\begin{aligned}\n", "v&=at\\\\\n", - "d &= \\frac{1}{2}at_2 + v_0t + d_0\n", + "x &= \\frac{1}{2}at_2 + v_0t + d_0\n", "\\end{aligned}\n", "$$\n", "\n", "And once we learned calculus we saw them in this form:\n", "\n", "$$\n", - " \\mathbf{v} = \\frac{d \\mathbf{d}}{d t}\\\\ \\quad \\mathbf{a} = \\frac{d \\mathbf{v}}{d t} = \\frac{d^2 \\mathbf{d}}{d t^2} \\,\\!\n", + " \\mathbf{v} = \\frac{d \\mathbf{x}}{d t}\\\\ \\quad \\mathbf{a} = \\frac{d \\mathbf{v}}{d t} = \\frac{d^2 \\mathbf{x}}{d t^2} \\,\\!\n", " $$\n", " \n", "A typical problem would have you compute the distance travelled given a constant velocity or acceleration. But, of course we know this is not all that is happening. First, we do not have perfect measures of things like the velocity and acceleration - there is always noise in the measurements, and we have to model that. Second, no car travels on a perfect road. There are bumps that cause the car to slow down, there is wind drag, there are hills that raise and lower the speed. If we do not have explicit knowledge of these factors we lump them all together under the term \"process noise\".\n", @@ -335,7 +338,118 @@ "\n", "And that's it. That is the equation that Kalman set out to solve, and he found a way to compute an optimal solution if we assume certain properties of $w$.\n", "\n", - "\n" + "However, we took advantage of something I left mostly unstated in the last chapter. We were able to provide a definition for $\\mathbf{F}$ because we were able to take advantage of the exact solution that Newtonian equations provide us. However, if you have an engineering background you will realize what a small class of problems that covers.If you don't, I will explain it next, and provide you with several ways to compute $\\mathbf{F}$." + ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "Modelling Dynamic Systems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Modelling dynamic systems is properly the topic of at least one undergraduate course in mathmatics; I took several. However, I can present enough of the theory to allow us to create the system equations for many different Kalman filters, and give you enough background to at least follow the mathematics in the literature. My goal is to get you to the stage where you can read Brown, Zarchan, Bar-Shalom, or any other book and understand them well enough to implement the algorithms. Even without reading those books, you should be able to design many common forms of Filters by following the examples. \n", + "\n", + "We model dynamic systems with a set of differential equations. For example, we already presented the Newtonian equation\n", + "\n", + "$$\\mathbf{v}=\\dot{\\mathbf{x}}$$\n", + "\n", + "where $\\dot{\\mathbf{x}}$ is the notation for the derivative of $\\mathbf{x}$, or $\\frac{d \\mathbf{x}}{d t}$.\n", + "\n", + "In general terms we can then say that a dynamic system consists of equations of the form\n", + "\n", + "$$ g(t) = \\dot{x}$$\n", + "\n", + "if the behaviour of the system depends on time. However, if the system is *time invariant* the equations are of the form\n", + "$$ f(x) = \\dot{x}$$\n", + "\n", + "What does *time invariant* mean? Consider a home stereo. If you input a signal $x$ into it at time $t$, it will output some signal $f(x)$ a moment later. If you instead make the input at a later time the output signal will still be exactly the same, just shifted in time. This is different from, say, an aircraft. If you make a control input to the aircraft at a later time it's behavior will be different because it will have burned additonal fuel (and thus lost weight), drag may be different due to being at a different altitude, and so on.\n", + "\n", + "We can solve these equations by integrating each side. The time variant equation is very straightforward. We essentially solved this problem with the Newtonian equations above, but let's be explicit and write it out. Starting with $$\\dot{\\mathbf{x}}=\\mathbf{v}$$ we get the expected\n", + "\n", + "$$ \\int \\dot{\\mathbf{x}}\\mathrm{d}t = \\int \\mathbf{v} \\mathrm{d}t\\\\\n", + "x = vt + x_0$$\n", + "\n", + "\n", + "However, integrating the time invariant equation is not so straightforward. \n", + "\n", + "$$ \\dot{x} = f(x) \\\\\n", + "\\frac{dx}{dt} = f(x)\n", + "$$ \n", + "\n", + "Using the *separation of variables* techniques, we divide by $f(x)$ and move the $dx$ term to the right so we can integrate each side:\n", + "\n", + "$$\n", + "\\int^x_{x_0} \\frac{1}{f(x)} dx = \\int^t_{t_0} dt\\\\\n", + "$$\n", + "\n", + "If we let the solution to the left hand side by named $F(x)$, we get\n", + "\n", + "$$F(x) - f(x_0) = t-t_0$$\n", + "\n", + "We then solve for x with\n", + "\n", + "$$F(x) = t - t_0 + F(x_0) \\\\\n", + "x = F^{-1}[t-t_0 + F(x_0)]$$\n", + "\n", + "In other words, we need to find the inverse of $F$. This is not at all trivial, and a significant amount of course work in a STEM education is devoted to finding tricky, analytic solutions to this problem, backed by several centuries of research. \n", + "\n", + "In the end, however, they are tricks, and many simple forms of $f(x)$ either have no closed form solution, or pose extreme difficulties. Instead, the practicing engineer turns to numerical methods to find a solution to her problems. I would suggest that students would be better served by learning fewer analytic mathematical tricks and instead focusing on learning numerical methods." + ] + }, + { + "cell_type": "heading", + "level": 3, + "metadata": {}, + "source": [ + "Finding the Fundamental Matrix for Time Invariant Systems" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "So let me leap over quite a bit of mathematics and present the typical numerical techniques used in Kalman filter design. \n", + "\n", + "First, we express the system equations in state-space form (i.e. using linear algebra equations) with\n", + "\n", + "$$ \\dot{\\mathbf{x}} = \\mathbf{Fx}$$\n", + "\n", + "Now we can assert that we want to find the fundamental matrix $\\Phi$ that propagates the state with the equation\n", + "\n", + "$$x(t) = \\Phi(t-t_0)x(t_0)$$\n", + "\n", + "In other words, we just want to compute the value of $x$ at time $t$ by multipying its previous value by some matrix $\\Phi$.\n", + "\n", + "Broadly speaking there are three ways to find $\\Phi$. *Linear Time Invarient Theory*, known as LTI System Theory, gives us a way to find $\\Phi$ using the inverse Laplace transform. You are either nodding your head now, or completely lost. Don't worry, I will not be using the Lapace transform in this book except in this paragraph, as the computation is quite difficult to perform in practice, and there are better techniques we can avail ourselves to. LTI system theory tells us that \n", + "\n", + "$$ \\Phi(t) = \\mathcal{L}^{-1}[(s\\mathbf{I} - \\mathbf{F})^{-1}]$$\n", + "\n", + "I have no intention of going into this other than to say that the inverse Lapace transform converts a signal into the frequency (time) domain, but finding a solution to the equation above is non-trivial. If you are interested, the Wikipedia article on LTI system theory provides an introduction [1].\n", + "\n", + "\n", + "The second technique is to use a Taylor-series expansion: \n", + "\n", + "$$ \\Phi(t) = e^{\\mathbf{F}t} = \\mathbf{I} + \\mathbf{F}t + \\frac{(\\mathbf{F}t)^2}{2!} + \\frac{(\\mathbf{F}t)^3}{3!} + ... $$\n", + "\n", + "This is much easier to compute, and is the typical approach used in Kalman filter design when the filter is reasonably small. If you are wondering where $e$ came from, I again point to wikipedia - this time the matrix exponential article [2]. Here the important point is to recognize the very simple and regular form this equation takes.\n", + "\n", + "Finally, there are numerical techniques to find $\\Phi$. As filters get larger finding analytical solutions becomes very tedious (though packages like Sympy make it easier). C. F. van Loan [3] has developed a technique that finds both $\\Phi$ and $Q$ numerically.\n", + "\n", + "I have implemented van Loan's method in `filterpy`. You may use it as follows:\n", + "\n", + " from filterpy.common import van_loan_discretization\n", + " \n", + " F = np.array([[0,1],[-1,0]], dtype=float)\n", + " G = np.array([[0.],[2.]]) # white noise scaling\n", + " phi, Q = van_loan_discretization(F, G, dt=0.1)\n", + " \n", + "See the docstring documentation for van_loan_discretization for more information. In IPython, or in this notebook, just type `van_loan_discretization??` and press return." ] }, { @@ -350,7 +464,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "I promised that you would not have to understand how to derive Kalman filter equations, and that is true. However, I do think it is worth walking through the equations one by one and becoming familiar with the variables. If this is your first time through the material feel free to skip ahead to the next section. However, you will eventually want to work through this material, so why not now? You will need to have passing familiarity with these equations to read material written about the Kalman filter, as they all presuppose that you are familiar with the equations. I will reiterate them here for easy reference.\n", + "I promised that you would not have to understand how to derive Kalman filter equations, and that is true. However, I do think it is worth walking through the equations one by one and becoming familiar with the variables. If this is your first time through the material feel free to skip ahead to the next section. However, you will eventually want to work through this material, so why not now? You will need to have passing familiarity with these equations to read material written about the Kalman filter, as they all presuppose that you are familiar with them. I will reiterate them here for easy reference.\n", "\n", "\n", "$$\n", @@ -392,11 +506,11 @@ "output_type": "display_data", "png": "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\nhYWF6dSpU1q/fr2Cg4M1ePDg61Q5mqIpnx555d9EeXm5KisrZTabm/TjeFx/Tekve7fjuXTpkrZt\n26bx48e7PZb927E0pbfs3faDQOyF/P39VVtbq65du2rx4sWSLn9+9w033NDovKCgIAUFBUmSoqKi\nNGzYMB09epSN2U415QrilX8TEyZMkCQdOXJE/v7+rVUaWkBT+sve7VisVqvWr1+v+Ph4j+4DZv92\nHE3tLXu3/eAeYi8UGhoqq9WqqqoqSZc3aEVFhbp3797GlaElNeUKYvfu3VVeXu58XFZWxm8xt3NN\n6S86Drvdro0bN6p79+664447PJrD/u0YmtNbtB8EYi8UEBCgW265Rfn5+aqrq9O+ffvUrVs3l/uH\n165dq6+++spl3rFjx1RZWSnp8n+43333nW699dbrWjvcs9vtqqurk91ul8PhkNVqld1ud4431Nu4\nuDgdOXJEZWVlqqqq0o8//qj4+PjrXTo80Jz+snc7ji1btshkMmnixIkNjrN/O67m9Ja9235wy4SX\nuueee7Rp0yYtW7ZM4eHhmj59ust4ZWWlQkNDXZ47efKkNm7cqJqaGgUFBSk5OZkf27RDP/30k/Ly\n8pyPf/75Z40ePVrp6emSGu5tr169lJ6ernXr1slutyspKYm3bGqnmtNf9m7HcO7cOR08eFB+fn56\n8cUXnc/PmjVLvXv3lsT+7aia21v2bvthKiwsbNqvMgMAAABehFsmAAAAYGgEYgAAABgagRgAAACG\nRiAGAACAoRGIAQAAYGgEYgAAABgagRgAAACGRiAGAACAoRGIAQAAYGj/A616C735Gc4uAAAAAElF\nTkSuQmCC\n", "text": [ - "" + "" ] } ], - "prompt_number": 3 + "prompt_number": 2 }, { "cell_type": "markdown", @@ -530,6 +644,25 @@ " $$\n", " " ] + }, + { + "cell_type": "heading", + "level": 2, + "metadata": {}, + "source": [ + "References" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + " * [1] *LTI System Theory* http://en.wikipedia.org/wiki/LTI_system_theory\n", + " \n", + " * [2] *Matrix Exponential* http://en.wikipedia.org/wiki/Matrix_exponential \n", + " \n", + " * [3] C.F. van Loan, \"Computing Integrals Involving the Matrix Exponential,\" IEEE Transactions Automatic Control, June 1978." + ] } ], "metadata": {}