Copy editing.
This commit is contained in:
1 parent
ac2c27119b
commit
57dda86f18
7 files changed
+261
-413
No files matched your search
@@ -310,13 +310,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Introduction"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Introduction\n",
|
||||
"\n",
|
||||
"The Kalman filter that we have developed uses linear equations, and so the filter can only handle linear problems. But the world is nonlinear, and so the classic filter that we have been studying to this point can have very limited utility. \n",
|
||||
"\n",
|
||||
"There can be nonlinearity in the process model. Suppose we wanted to track the motion of a weight on a spring, such as an automobile's suspension. The equation for the motion with $m$ being the mass, $k$ the spring constant, and $c$ the damping force is \n",
|
||||
@@ -333,9 +328,11 @@
|
||||
"\n",
|
||||
"It is almost true to state that the only equation anyone knows how to solve is $\\mathbf{Ax}=\\mathbf{b}$. We only really know how to do linear algebra. I can give you any linear set of equations and you can either solve it or prove that it haas no solution. \n",
|
||||
"\n",
|
||||
"Anyone with formal education in math or physics has spent years learning various analytic ways to solve integrals, differential equations and so on. Yet even trivial physical systems produce equations that cannot be solved analytically. I can take an equation that you are able to integrate, insert a $\\log$ term, and render it insolvable. It is stuff like this that leads to jokes about physicists stating \"assume a spherical cow on a frictionless surface in a vacuum...\". Without making extreme simplifications most physical problems do not have analytic solutions.\n",
|
||||
"Anyone with formal education in math or physics has spent years learning various analytic ways to solve integrals, differential equations and so on. Yet even trivial physical systems produce equations that cannot be solved analytically. I can take an equation that you are able to integrate, insert a $\\log$ term, and render it insolvable. This leads to jokes about physicists stating \"assume a spherical cow on a frictionless surface in a vacuum...\". Without making extreme simplifications most physical problems do not have analytic solutions.\n",
|
||||
"\n",
|
||||
"How do we do things like model airflow over an aircraft in a computer, or predict weather, or track missiles with a Kalman filter? We retreat to what we know: $\\mathbf{Ax}=\\mathbf{b}$. We find some way to linearize the problem, turning it into a set of linear equations, and then use linear algebra software packages to compute an approximate solution. Linearizing a nonlinear problem gives us inexact answers, and in a recursive algorithm like a Kalman filter or weather tracking system these small errors can sometimes reinforce each other at each step, quickly causing the algorithm to spit out nonsense. \n",
|
||||
"How do we do things like model airflow over an aircraft in a computer, or predict weather, or track missiles with a Kalman filter? We retreat to what we know: $\\mathbf{Ax}=\\mathbf{b}$. We find some way to linearize the problem, turning it into a set of linear equations, and then use linear algebra software packages to compute an approximate solution. \n",
|
||||
"\n",
|
||||
"Linearizing a nonlinear problem gives us inexact answers, and in a recursive algorithm like a Kalman filter or weather tracking system these small errors can sometimes reinforce each other at each step, quickly causing the algorithm to spit out nonsense. \n",
|
||||
"\n",
|
||||
"What we are about to embark upon is a difficult problem. There is not one obvious, correct, mathematically optimal solution anymore. We will be using approximations, we will be introducing errors into our computations, and we will forever be battling filters that *diverge*, that is, filters whose numerical errors overwhelm the solution. \n",
|
||||
"\n",
|
||||
@@ -346,24 +343,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Problem with Nonlinearity"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"As asserted in the introduction the only math you really know how to do is linear math, that is, equations of the form \n",
|
||||
"## The Problem with Nonlinearity\n",
|
||||
"\n",
|
||||
"$$ A\\mathbf{x}=\\mathbf{b}$$\n",
|
||||
"\n",
|
||||
"That may strike you as hyperbole. After all, in this book we have integrated a polynomial to get distance from velocity and time. We know how to integrate polynomials, and so we are able to find the closed form equation for distance given velocity and time:\n",
|
||||
"\n",
|
||||
"$$\\int{(vt+v_0)}\\,dt = \\frac{a}{2}t^2+v_0t+d_0$$\n",
|
||||
"\n",
|
||||
"That's a nonlinear equation that we know how to solve. But it is also a very special form. You spent a lot of time, probably at least a year, learning how to integrate various terms, and you still can not integrate some arbitrary equation - no one can. We don't know how. If you took freshman Physics you perhaps remember homework involving sliding frictionless blocks on a perfect plane and other toy problems. At the end of the course you were almost entirely unequipped to solve real world problems because the real world is nonlinear, and you were taught linear, closed forms of equations. It made the math tractable, but mostly useless. \n",
|
||||
"\n",
|
||||
"The mathematics of the Kalman filter is beautiful in part due to the Gaussian equation being so special. It is nonlinear, but when we add and multiply them using linear algebra we get another Gaussian equation as a result. That is very rare. $\\sin{x}*\\sin{y}$ does not yield a $\\sin$ as an output.\n",
|
||||
"The mathematics of the Kalman filter is beautiful in part due to the Gaussian equation being so special. It is nonlinear, but when we add and multiply them we get another Gaussian as a result. That is very rare. $\\sin{x}*\\sin{y}$ does not yield a $\\sin$ as an output.\n",
|
||||
"\n",
|
||||
"What I mean by linearity may be obvious, but there are some subtleties. The mathematical requirements are twofold:\n",
|
||||
"\n",
|
||||
@@ -385,25 +367,20 @@
|
||||
"\n",
|
||||
"$$L(f(t)) = f(t) + 1$$\n",
|
||||
"\n",
|
||||
"is not linear because $L(0) = 1$! Be careful!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## An Intuitive Look at the Problem"
|
||||
"is not linear because $L(0) = 1$. Be careful!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## An Intuitive Look at the Problem\n",
|
||||
"\n",
|
||||
"I particularly like the following way of looking at the problem, which I am borrowing from Dan Simon's *Optimal State Estimation* [[1]](#[1]). Consider a tracking problem where we get the range and bearing to a target, and we want to track its position. The reported distance is 50 km, and the reported angle is 90$^\\circ$. Assume that the errors in both range and angle are distributed in a Gaussian manner. Given an infinite number of measurements what is the expected value of the position?\n",
|
||||
"\n",
|
||||
"I have been recommending using intuition to gain insight, so let's see how it fares for this problem (hint: nonlinear problems are *not* intuitive). We might reason that since the mean of the range will be 50 km, and the mean of the angle will be 90$^\\circ$, that clearly the answer will be x=0 km, y=50 km.\n",
|
||||
"I have been recommending using intuition to gain insight, so let's see how it fares for this problem. We might reason that since the mean of the range will be 50 km, and the mean of the angle will be 90$^\\circ$, that the answer will be x=0 km, y=50 km.\n",
|
||||
"\n",
|
||||
"Well, let's plot that and find out. Here are 3000 points plotted with a normal distribution of the distance of 0.4 km, and the angle having a normal distribution of 0.35 radians. We compute the average of the all of the positions, and display it as a star. Our intuition is displayed with a large circle."
|
||||
"Let's plot that and find out. Here are 3000 points plotted with a normal distribution of the distance of 0.4 km, and the angle having a normal distribution of 0.35 radians. We compute the average of the all of the positions, and display it as a star. Our intuition is displayed with a large circle."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -454,14 +431,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Effect of Nonlinear Functions on Gaussians"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Gaussians are not closed under an arbitrary nonlinear function. Recall the equations of the Kalman filter - at each evolution (prediction) we pass the Gaussian representing the state through the process function to get the Gaussian at time $k$. Our process function was always linear, so the output was always another Gaussian. Let's look at that on a graph. I will take an arbitrary Gaussian and pass it through the function $f(x) = 2x + 1$ and plot the result. We know how to do this analytically, but lets use sampling. I will generate 500,000 points with a normal distribution, pass them through $f(x)$, and plot the results. I do it this way because the next example will be nonlinear, and we will have no way to compute this analytically."
|
||||
"## The Effect of Nonlinear Functions on Gaussians\n",
|
||||
"\n",
|
||||
"Gaussians are not closed under an arbitrary nonlinear function. Recall the equations of the Kalman filter - at each evolution we pass the Gaussian representing the state through the process function to get the Gaussian at time $k$. Our process function was always linear, so the output was always another Gaussian. Let's look at that on a graph. I will take an arbitrary Gaussian and pass it through the function $f(x) = 2x + 1$ and plot the result. We know how to do this analytically, but lets use sampling. I will generate 500,000 points with a normal distribution, pass them through $f(x)$, and plot the results. I do it this way because the next example will be nonlinear, and we will have no way to compute this analytically."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -569,7 +541,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This result may be somewhat surprising to you. The function looks \"fairly\" linear - it is pretty close to a straight line, but the probability distribution of the output is completely different from a Gaussian. Recall the equations for multiplying two univariate Gaussians:\n",
|
||||
"This result may be somewhat surprising to you. The function looks \"fairly\" linear, but the probability distribution of the output is completely different from a Gaussian. Recall the equations for multiplying two univariate Gaussians:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mu &=\\frac{\\sigma_1^2 \\mu_2 + \\sigma_2^2 \\mu_1} {\\sigma_1^2 + \\sigma_2^2} \\\\\n",
|
||||
@@ -730,7 +702,8 @@
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
@@ -918,7 +891,7 @@
|
||||
"The costs should be clear. It is computationally expensive to test tens of thousands of points for every step in the filter. But modern CPUs are very fast, and this is a good problem for GPUs because the part of the algorithm is parallelizable. Another cost is that the answer is not mathematical. With a Kalman filter my covariance matrix gives me important information about the amount of error in the estimate. The particle filter does not give me a rigorous way to compute this. Finally, the output of the filter is a cloud of points; I then have to figure out how to interpret it. Usually you will be doing something like taking the mean and standard deviations of the points, but this is a difficult problem. There are still many points that do not 'belong' to a tracked object, so you first have to run some sort of clustering algorithm to first find the points that seem to be tracking an object, and then you need another algorithm to produce an state estimate from those points. None of this is intractable, but it is all quite computationally expensive. \n",
|
||||
"\n",
|
||||
"\n",
|
||||
"Finally, we have a new algorithm called the *unscented Kalman filter* (UKF) that does not require you to find analytic solutions to nonlinear equations, and yet almost always performs better than the EKF. It does especially well with highly nonlinear problems - problems where the EKF has significant difficulties. Designing the filter is extremely easy. Some will say the jury is still out on the UKF, but to my mind the UKF is superior in almost every way to the EKF. I suggest that the UKF should be the starting point for any implementation, especially if you are not a Kalman filter professional with a graduate degree in control theory. The main downside is that the UKF can be a few times slower than the EKF, but this really depends on whether the EKF solves the Jacobian analytically or numerically. If numerically the UKF is almost certainly faster. It has not been proven (and probably it cannot be proven) that the UKF always yields more accurate results than the EKF. In practice it almost always does, often significantly so. It is very easy to understand and implement, and I strongly suggest this filter as your starting point. "
|
||||
"Finally, we have a new algorithm called the *unscented Kalman filter* (UKF). It does not require you to find analytic solutions to nonlinear equations, and yet almost always performs better than the EKF. It does well with nonlinear problems - problems where the EKF has significant difficulties. Designing the filter is extremely easy. Some will say the jury is still out on the UKF, but to my mind the UKF is superior in almost every way to the EKF. I suggest that the UKF should be the starting point for any implementation, especially if you are not a Kalman filter professional with a graduate degree in control theory. The main downside is that the UKF can be a few times slower than the EKF, but this really depends on whether the EKF solves the Jacobian analytically or numerically. If numerically the UKF is almost certainly faster. It has not been proven (and probably it cannot be proven) that the UKF always yields more accurate results than the EKF. In practice it almost always does, often significantly so. It is very easy to understand and implement, and I strongly suggest this filter as your starting point. "
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
+156
-255
@@ -26,24 +26,63 @@
|
||||
"text/html": [
|
||||
"<style>\n",
|
||||
"@import url('http://fonts.googleapis.com/css?family=Source+Code+Pro');\n",
|
||||
"@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
|
||||
"@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
|
||||
"@import url('http://fonts.googleapis.com/css?family=Fira+sans');\n",
|
||||
"@import url('http://fonts.googleapis.com/css?family=Lora');\n",
|
||||
"\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Open+Sans');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Vollkorn');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Karla');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Poppins');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Arimo');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Roboto');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Lato');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Domine');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Chivo');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Cardo');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Arvo');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Crimson+Text');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Ubuntu');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Fontin');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Raleway');\n",
|
||||
"//@import url('http://fonts.googleapis.com/css?family=Merriweather');\n",
|
||||
"\n",
|
||||
"\n",
|
||||
".CodeMirror pre {\n",
|
||||
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
|
||||
"}\n",
|
||||
" div.cell{\n",
|
||||
" width: 900px;\n",
|
||||
" width: 850px;\n",
|
||||
" margin-left: 0% !important;\n",
|
||||
" margin-right: auto;\n",
|
||||
" }\n",
|
||||
" div.text_cell_render{\n",
|
||||
" font-family: 'Lora';\n",
|
||||
" //font-family: 'Open Sans';\n",
|
||||
" //font-family: 'Karla',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Roboto',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Lato',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Domine',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Chivo',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Cardo',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Arvo',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Poppins',verdana,arial,sans-serif; \n",
|
||||
" //font-family: 'Ubuntu',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Fontin',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Raleway',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Merriweather',verdana,arial,sans-serif;\n",
|
||||
" //font-family: 'Crimson Text', verdana,arial,sans-serif;\n",
|
||||
" //font-family: verdana,arial,sans-serif;\n",
|
||||
" //font-family: arial,sans-serif;\n",
|
||||
" line-height: 125%;\n",
|
||||
" font-size: 130%;\n",
|
||||
" text-align: justify;\n",
|
||||
" text-justify:inter-word;\n",
|
||||
" }\n",
|
||||
" div.text_cell code {\n",
|
||||
" background: transparent;\n",
|
||||
" color: #000000;\n",
|
||||
" font-weight: 600;\n",
|
||||
" font-weight: 400;\n",
|
||||
" font-size: 12pt;\n",
|
||||
" font-style: bold;\n",
|
||||
" //font-style: bold;\n",
|
||||
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
|
||||
" }\n",
|
||||
" h1 {\n",
|
||||
@@ -122,13 +161,6 @@
|
||||
" display: block;\n",
|
||||
" white-space: nowrap;\n",
|
||||
" }\n",
|
||||
" div.text_cell_render{\n",
|
||||
" /*font-family: 'Vollkorn', verdana,arial,sans-serif;*/\n",
|
||||
" line-height: 150%;\n",
|
||||
" font-size: 130%;\n",
|
||||
" text-align: justify;\n",
|
||||
" text-justify:inter-word;\n",
|
||||
" }\n",
|
||||
" div.output_subarea.output_text.output_pyout {\n",
|
||||
" overflow-x: auto;\n",
|
||||
" overflow-y: scroll;\n",
|
||||
@@ -178,19 +210,15 @@
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
@@ -297,9 +325,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x72c7cc0>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb5a86eb8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -360,7 +388,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x72c79e8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb5508c50>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -408,14 +436,14 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Difference in mean x=-0.004, y=41.586\n"
|
||||
"Difference in mean x=0.053, y=43.024\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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\nNw4LFy7EBRdcUPJL7vF40K1bN3Tv3h3du3dHRTvfJR1saA2ZIOkp9TorySr2PBUl1iZj5W4rUeM4\n9l6T+3Y6nXA4HMhms0in08jn88jn80ilUojH46bXFQqFBvuQ2wGY1DVup3onX+twOExETZJP6/u1\n/r+pc9wYUdXQOJzRGpXsQKljzcEXX3zRIJKzYMEC2O12fPLJJ7jiiitQWVmJiooKzJw5s2hLp9Wr\nV+O0006D3+9HVVUVLr74Ynz++eemMRs2bMAll1yCfv36wev14ogjjsAPf/hD1NXVmcbx2B988AEu\nv/xydOnSBSeccAKAvR4yu92OrVu3AgDeeOONBtEmPo466ijTfl955RWMHDkSoVAIoVAI48aNw6ZN\nmxq8l+effx6DBw+Gz+fDiSeeiOeff77F53Tq1Kl4+eWXEQ6H1bb33nsP77//Pi699NKia2gkEsFN\nN92Evn37wuPxoKamBgsXLlTXAeK+++7DGWecgW7duqk5Pvroow32169fP5x33nl48803MXToUPh8\nPtTU1GBlO4bI9xcd5iHbsGEDevTogYqKCpx55plYtGgRunXr1lHTOSRhLWnRGiIhX2d9PcmRNWvT\nSsKpjOVyORNpInm0Zj1K9U2GLGUYVLZOsu5HqoGlMkit2xpDUwkIGhqHMxxuNzKTJ8NYvrzZXrLO\npI4VA+d1ySWXoKamBkuWLMHbb7+NX//61+jRowcWL16sxi5ZsgS33347Lr74YsycORN1dXX4xS9+\ngeHDh2PTpk3o0qULAOCZZ55BJBLBrFmz0L17d7z77rv41a9+hQ8++ABvvvlmg2NPnjwZRx11FBYt\nWqRukK3r66BBg7Bq1SrT3Pfs2YM5c+agR48eatvq1atx+eWX45xzzsGSJUuQTqfxyCOPYMSIEfjb\n3/6GAQMGANhL2i666CIcf/zxWLx4Merq6jBz5kz06tWrRedv4sSJuPrqq/Hss8/iqquuUnM48sgj\nMWzYsAbjU6kURo4cia1bt+Laa69F37598de//hULFizA1q1b8cgjj6ixP//5z3H++edj8uTJsNls\neOGFF3D11Vcjn8/jhz/8oek8fvbZZ5g0aRKuvPJKXHHFFXjssccwY8YMfPvb38agQYNa9J4OCIx2\nRjAYNFasWGHa9vTTTxsvvvii8f777xtr1641TjrpJOOEE04wMplMg9eHw2H1ONyQzLine truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x47130b8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb61e3dd8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -453,13 +481,8 @@
|
||||
"source": [
|
||||
"## Choosing Sigma Points\n",
|
||||
"\n",
|
||||
"I used 10,000 randomly generated sigma points to generate this solution. While the computed mean is quite accurate, computing 10,000 points for every update would cause our filter to be very slow. So, what would be fewest number of sampled points that we can use, and what kinds of constraints does this problem formulation put on the points? We will assume that we have no special knowledge about the nonlinear function as we want to find a generalized algorithm that works for any function."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I used 10,000 randomly generated sigma points to generate this solution. While the computed mean is quite accurate, computing 10,000 points for every update would cause our filter to be very slow. So, what would be fewest number of sampled points that we can use, and what kinds of constraints does this problem formulation put on the points? We will assume that we have no special knowledge about the nonlinear function as we want to find a generalized algorithm that works for any function.\n",
|
||||
"\n",
|
||||
"Let's consider the simplest possible case and see if it offers any insight. The simplest possible system is the **identity function**: $f(x) = x$. If our algorithm does not work for the identity function then the filter cannot converge. In other words, if the input is 1 (for a one dimensional system), the output must also be 1. If the output was different, such as 1.1, then when we fed 1.1 into the transform at the next time step, we'd get out yet another number, maybe 1.23. This filter diverges. \n",
|
||||
"\n",
|
||||
"The fewest number of points that we can use is one per dimension. This is the number that the linear Kalman filter uses. The input to a Kalman filter for the distribution $\\mathcal{N}(\\mu,\\sigma^2)$ is $\\mu$ itself. So while this works for the linear case, it is not a good answer for the nonlinear case.\n",
|
||||
@@ -483,7 +506,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8309438>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb65c5da0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -498,9 +521,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can pass these points through a nonlinear function f(x) and compute the resulting mean and variance. The mean can be computed as the average of the 3 points, but that is not very general. For example, for a very nonlinear problem we might want to weight the center point much higher than the outside points, or we might want to weight the outside points higher if the distribution is not Gaussian. \n",
|
||||
"We can pass these points through a nonlinear function f(x) and compute the resulting mean and variance. The mean can be computed as the average of the 3 points, but that is not very general. For example, for a very nonlinear problem we might want to weight the center point much higher than the outside points, or we might want to weight the outside points higher. \n",
|
||||
"\n",
|
||||
"A more general approach is to compute the weighted mean $\\mu = \\sum_i w_i\\, f(\\mathcal{X}_i)$, where the calligraphic $\\mathcal{X}$ are the sigma points. We need the sums of the weights to equal one. Given that requirement, our task is to select $\\mathcal{X}$ and their corresponding weights so that they compute to the mean and variance of the input Gaussian. \n",
|
||||
"A more general approach is to compute the weighted mean $\\mu = \\sum_i w_i\\, f(\\mathcal{X}_i)$, where the calligraphic $\\mathcal{X}$ are the sigma points. We need the sums of the weights to equal one. Given that requirement, our task is to select $\\mathcal{X}$ and their corresponding weights so that they compute to the mean and variance of the transformed sigma points. \n",
|
||||
"\n",
|
||||
"If we weight the means it also makes sense to weight the covariances. It is possible to use different weights for the mean ($w^m$) and for the covariance ($w^c$). I use superscripts to allow space for indexes in the following equations. We can write\n",
|
||||
"\n",
|
||||
@@ -534,7 +557,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x86c5c18>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb61a1b38>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -550,7 +573,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The points do not lie along the major and minor axis of the ellipse; nothing in the constraints require me to do that. Furthermore, I show the points evenly spaced; again, the constraints do not require that. \n",
|
||||
"The points do not lie along the major and minor axis of the ellipse; nothing in the constraints require me to do that. I show the points evenly spaced, but the constraints do not require that. \n",
|
||||
"\n",
|
||||
"The arrangement and weighting of the sigma points affect how we sample the distribution. Points that are close together will sample local effects, and thus probably work better for very nonlinear problems. Points that are far apart, or far off the axis of the ellipse will sample non-local effects and non Gaussian behavior. However, by varying the weights used for each point we can mitigate this. If the points are far from the mean but weighted very slightly we will incorporate some of the knowledge about the distribution without allowing the nonlinearity of the problem to create a bad estimate. "
|
||||
]
|
||||
@@ -559,20 +582,15 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Unscented Transform"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Unscented Transform\n",
|
||||
"\n",
|
||||
"For the moment, assume an algorithm for selecting the sigma points and weights exists. How are the sigma points used to implement a filter?\n",
|
||||
"\n",
|
||||
"The *unscented transform* is the core of the algorithm yet it is remarkably simple. We pass the sigma points $\\boldsymbol{\\chi}$ through a (usually nonlinear) function yielding a transformed set of points.\n",
|
||||
"The *unscented transform* is the core of the algorithm yet it is remarkably simple. We pass the sigma points $\\boldsymbol{\\chi}$ through a nonlinear function yielding a transformed set of points.\n",
|
||||
"\n",
|
||||
"$$\\boldsymbol{\\mathcal{Y}} = f(\\boldsymbol{\\chi})$$\n",
|
||||
"\n",
|
||||
"We then compute a new mean and covariance of the transformed points. That mean and covariance becomes the new estimate. The figure below depicts the operation of the unscented transform. The green ellipse on the right represents the computed mean and covariance to the transformed sigma points. "
|
||||
"We then compute the mean and covariance of the transformed points. That mean and covariance becomes the new estimate. The figure below depicts the operation of the unscented transform. The green ellipse on the right represents the computed mean and covariance to the transformed sigma points. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -586,7 +604,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x86c5d30>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb6606898>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -604,14 +622,14 @@
|
||||
"The mean and covariance of the sigma points are computed as:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mu &= \\sum_i w^m_i\\boldsymbol{\\mathcal{Y}}_i \\\\\n",
|
||||
"\\Sigma &= \\sum_i w^c_i{(\\boldsymbol{\\mathcal{Y}}_i-\\mu)(\\boldsymbol{\\mathcal{Y}}_i-\\mu)^\\mathsf{T}}\n",
|
||||
"\\mu &= \\sum_{i=0}^{2n} w^m_i\\boldsymbol{\\mathcal{Y}}_i \\\\\n",
|
||||
"\\Sigma &= \\sum_{i=0}^{2n} w^c_i{(\\boldsymbol{\\mathcal{Y}}_i-\\mu)(\\boldsymbol{\\mathcal{Y}}_i-\\mu)^\\mathsf{T}}\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"These equations should be familar - they are the constraint equations we developed above. \n",
|
||||
"\n",
|
||||
"In short, the unscented transform estimates the mean and covariance of a Gaussian passed through an arbitrary, nonlinear function. I hope you can envision how we can use this to implement a nonlinear Kalman filter. "
|
||||
"In short, the unscented transform estimates the mean and covariance of a Gaussian passed through an arbitrary, nonlinear function and produces another Gaussian from the transformed points. I hope you can envision how we can use this to implement a nonlinear Kalman filter. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -642,7 +660,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x88d1278>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb92a3320>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -694,13 +712,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Unscented Kalman Filter"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## The Unscented Kalman Filter\n",
|
||||
"\n",
|
||||
"We can now present the UKF algorithm. "
|
||||
]
|
||||
},
|
||||
@@ -708,49 +721,34 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Predict Step"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Predict Step\n",
|
||||
"\n",
|
||||
"The UKF's predict step computes the prior using the process model $f()$. $f()$ is assumed to be nonlinear, so we generate sigma points $\\mathcal{X}$ and their corresponding weights $W^m, W^c$\n",
|
||||
"according to some function:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mathcal{X} &= \\text{sigma-function}(\\mathbf x, \\mathbf P) \\\\\n",
|
||||
"\\boldsymbol\\chi &= \\text{sigma-function}(\\mathbf x, \\mathbf P) \\\\\n",
|
||||
"W^m, W^c &= \\text{weight-function}(\\mathtt{n, parameters})\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"We pass each sigma point through $f(\\mathbf x, \\Delta t)$. This projects the sigma points forward in time according to the process model, forming the new *prior*, which is a set of sigma points we name $\\boldsymbol{\\mathcal Y}$:\n",
|
||||
"We pass each sigma point through $f(\\mathbf x, \\Delta t)$. This projects the sigma points forward in time according to the process model, forming the new prior, which is a set of sigma points we name $\\boldsymbol{\\mathcal Y}$:\n",
|
||||
"\n",
|
||||
"$$\\boldsymbol{\\mathcal{Y}} = f(\\boldsymbol{\\chi}, \\Delta t)$$\n",
|
||||
"\n",
|
||||
"$$\\boldsymbol{\\mathcal{Y}} = f(\\boldsymbol{\\chi}, \\Delta t)$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We compute the mean and covariance of the prior using the *unscented transform* on the transformed sigma points. \n",
|
||||
"\n",
|
||||
"$$\\mathbf{\\bar x}, \\mathbf{\\bar P} = \n",
|
||||
"UT(\\mathcal{Y}, w_m, w_c, \\mathbf Q)$$\n",
|
||||
"\n",
|
||||
"The unscented transform is computed with the equations below. I've dropped the subscript $i$ for readability.\n",
|
||||
"These are the equations for the unscented transform:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\mathbf{\\bar x} &= \\sum w^m\\boldsymbol{\\mathcal{Y}} \\\\\n",
|
||||
"\\mathbf{\\bar P} &= \\sum w^c({\\boldsymbol{\\mathcal{Y}} - \\mathbf{\\bar x})(\\boldsymbol{\\mathcal{Y}}-\\mathbf{\\bar x})^\\mathsf{T}} + \\mathbf Q\n",
|
||||
"\\mathbf{\\bar x} &= \\sum_{i=0}^{2n} w^m_i\\boldsymbol{\\mathcal Y}_i \\\\\n",
|
||||
"\\mathbf{\\bar P} &= \\sum_{i=0}^{2n} w^c_i({\\boldsymbol{\\mathcal Y}_i - \\mathbf{\\bar x})(\\boldsymbol{\\mathcal Y}_i-\\mathbf{\\bar x})^\\mathsf{T}} + \\mathbf Q\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"This table compares the linear Kalman filter with the Unscented Kalman Filter equations."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This table compares the linear Kalman filter with the Unscented Kalman Filter equations. I've dropped the subscript $i$ for readability.\n",
|
||||
"\n",
|
||||
"$$\\begin{array}{l|l}\n",
|
||||
"\\text{Kalman} & \\text{Unscented} \\\\\n",
|
||||
"\\hline \n",
|
||||
@@ -766,13 +764,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Update Step"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Update Step\n",
|
||||
"\n",
|
||||
"Kalman filters perform the update in measurement space. Thus we must convert the sigma points of the prior into measurements using a measurement function $h(x)$ that you define.\n",
|
||||
"\n",
|
||||
"$$\\boldsymbol{\\mathcal{Z}} = h(\\boldsymbol{\\mathcal{Y}})$$\n",
|
||||
@@ -782,8 +775,8 @@
|
||||
"$$\\begin{aligned}\n",
|
||||
"\\boldsymbol\\mu_z, \\mathbf P_z &= \n",
|
||||
"UT(\\boldsymbol{\\mathcal Z}, w_m, w_c, \\mathbf R) \\\\\n",
|
||||
"\\boldsymbol\\mu_z &= \\sum w^m\\boldsymbol{\\mathcal Z} \\\\\n",
|
||||
"\\mathbf P_z &= \\sum w^c{(\\boldsymbol{\\mathcal Z}-\\boldsymbol{\\mu}_z)(\\boldsymbol{\\mathcal Z}-\\boldsymbol{\\mu}_z)^\\mathsf T} + \\mathbf R\n",
|
||||
"\\boldsymbol\\mu_z &= \\sum_{i=0}^{2n} w^m_i\\boldsymbol{\\mathcal Z}_i \\\\\n",
|
||||
"\\mathbf P_z &= \\sum_{i=0}^{2n} w^c_i{(\\boldsymbol{\\mathcal Z}_i-\\boldsymbol{\\mu}_z)(\\boldsymbol{\\mathcal Z}_i-\\boldsymbol{\\mu}_z)^\\mathsf T} + \\mathbf R\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
@@ -793,7 +786,7 @@
|
||||
"\n",
|
||||
"To compute the Kalman gain we first compute the [cross covariance](https://en.wikipedia.org/wiki/Cross-covariance) of the state and the measurements, which is defined as: \n",
|
||||
"\n",
|
||||
"$$\\mathbf P_{xz} =\\sum w^c(\\boldsymbol\\chi-\\mathbf{\\bar x})(\\boldsymbol{\\mathcal Z}-\\boldsymbol\\mu_z)^\\mathsf T$$\n",
|
||||
"$$\\mathbf P_{xz} =\\sum_{i=0}^{2n} w^c_i(\\boldsymbol\\chi_i-\\mathbf{\\bar x})(\\boldsymbol{\\mathcal Z}_i-\\boldsymbol\\mu_z)^\\mathsf T$$\n",
|
||||
"\n",
|
||||
"And then the Kalman gain is defined as\n",
|
||||
"\n",
|
||||
@@ -801,7 +794,7 @@
|
||||
"\n",
|
||||
"If you think of the inverse as a *kind of* matrix reciprocal, you can see that the Kalman gain is a simple ratio which computes:\n",
|
||||
"\n",
|
||||
"$$\\mathbf{K} \\approx \\frac{\\mathbf P_{xz}}{\\mathbf P_z^{-1}} \n",
|
||||
"$$\\mathbf{K} \\approx \\frac{\\mathbf P_{xz}}{\\mathbf P_z} \n",
|
||||
"\\approx \\frac{\\text{belief in state}}{\\text{belief in measurement}}$$\n",
|
||||
"\n",
|
||||
"Finally, we compute the new state estimate using the residual and Kalman gain:\n",
|
||||
@@ -814,13 +807,8 @@
|
||||
"\n",
|
||||
"This step contains a few equations you have to take on faith, but you should be able to see how they relate to the linear Kalman filter equations. The linear algebra is slightly different from the linear Kalman filter, but the algorithm is the same Bayesian algorithm we have been implementing throughout the book. \n",
|
||||
"\n",
|
||||
"This table compares the equations of the linear KF and UKF equations."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This table compares the equations of the linear KF and UKF equations.\n",
|
||||
"\n",
|
||||
"$$\\begin{array}{l|l}\n",
|
||||
"\\textrm{Kalman Filter} & \\textrm{Unscented Kalman Filter} \\\\\n",
|
||||
"\\hline \n",
|
||||
@@ -847,13 +835,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Van der Merwe's Scaled Sigma Point Algorithm"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Van der Merwe's Scaled Sigma Point Algorithm\n",
|
||||
"\n",
|
||||
"There are many algorithms for selecting sigma points. Since 2005 or so research and industry have mostly settled on the version published by Rudolph Van der Merwe in his 2004 PhD dissertation [1]. It performs well with a variety of problems and it has a good tradeoff between performance and accuracy. It is a slight reformulation of the *Scaled Unscented Transform* published by Simon J. Julier [2].\n",
|
||||
"\n",
|
||||
"This formulation uses 3 parameters to control how the sigma points are distributed and weighted: $\\alpha$, $\\beta$, and $\\kappa$. Before we work through the equations, let's look at an example. I will plot the sigma points on top of a covariance ellipse showing the first and second standard deviations, and scale the points based on the mean weights."
|
||||
@@ -870,18 +853,11 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x88376d8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb6b89ef0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
"output_type": "display_data"
|
||||
},
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"3.91\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
@@ -943,13 +919,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Using the UKF"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Using the UKF\n",
|
||||
"\n",
|
||||
"Lets solve some problems so you can gain confidence in how easy the UKF is to use. We will start by using FilterPy's UKF implementation. Later we will implement the UKF ourselves.\n",
|
||||
"\n",
|
||||
"Let's start by solving a problem you already know how to do. Although the UKF was designed for nonlinear problems, it obtains the same result as the linear Kalman filter for linear problems. We will write a filter to track an object in 2D using a constant velocity model. This will allows us to focus on what is the same (and most is the same!) and what is different with the UKF. \n",
|
||||
@@ -1003,7 +974,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8979ac8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb93523c8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1043,7 +1014,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"This should hold no surprises for you. Now let's implement a UKF. Again, this is purely for educational purposes; using a UKF for a linear filter confers no benefit. `FilterPy` implements the UKF with the class `UnscentedKalmanFilter`. \n",
|
||||
"This should hold no surprises for you. Now let's implement a UKF. Again, this is purely for educational purposes; using a UKF for a linear problem confers no benefit. `FilterPy` implements the UKF with the class `UnscentedKalmanFilter`. \n",
|
||||
"\n",
|
||||
"The first thing to do is implement the functions `f(x, dt)` and `h(x)`. `f(x, dt)` implements the state transition function, and `h(x)` implements the measurement function. These correspond to the matrices $\\mathbf F$ and $\\mathbf H$ in the linear filter.\n",
|
||||
"\n",
|
||||
@@ -1084,13 +1055,8 @@
|
||||
"def weights(self)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"FilterPy derives the class `MerweScaledSigmaPoints` from `SigmaPoints` and implements the aforementioned methods."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"FilterPy derives the class `MerweScaledSigmaPoints` from `SigmaPoints` and implements the aforementioned methods.\n",
|
||||
"\n",
|
||||
"When you create the UKF you will pass in the $f()$ and $h()$ functions and the sigma point object, as in this example:\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
@@ -1099,14 +1065,9 @@
|
||||
"\n",
|
||||
"points = MerweScaledSigmaPoints(n=4, alpha=.1, beta=2., kappa=-1)\n",
|
||||
"ukf = UKF(dim_x=4, dim_z=2, fx=f_cv, hx=h_cv, dt=dt, points=points)\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The rest of the code is the same as for the linear kalman filter. I'll use the same measurements used by it and compute the standard deviation of the difference between the two solutions."
|
||||
"```\n",
|
||||
"\n",
|
||||
"The rest of the code is the same as for the linear kalman filter. I'll use the same measurements and compute the standard deviation of the difference between the two solutions."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -1128,7 +1089,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8979a20>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb935cba8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1165,20 +1126,15 @@
|
||||
"source": [
|
||||
"This gave me a standard deviation of 0.013 meters, which is quite small. \n",
|
||||
"\n",
|
||||
"The implementation of the UKF is not *that* different from the linear Kalman filter. Instead of implementing the state transition and measurement functions as the matrices $\\mathbf F$ and $\\mathbf H$ you supply nonlinear functions `f()` and `h()`. The rest of the theory and implementation remains the same. The code implementing `predict()` and `update()` differs, but from a designer's point of view the problem formulation and filter design is very similar."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Tracking an Airplane"
|
||||
"The implementation of the UKF is not that different from the linear Kalman filter. Instead of implementing the state transition and measurement functions as the matrices $\\mathbf F$ and $\\mathbf H$ you supply nonlinear functions `f()` and `h()`. The rest of the theory and implementation remains the same. The code implementing `predict()` and `update()` differs, but from a designer's point of view the problem formulation and filter design is very similar."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Tracking an Airplane\n",
|
||||
"\n",
|
||||
"Let's tackle our first nonlinear problem. We will write a filter to track an airplane using radar as the sensor. To keep the problem similar to the previous one as possible we will track in two dimensions. We will track one dimension on the ground and the altitude of the aircraft. Each dimension is independent so we can do this with no loss of generality.\n",
|
||||
"\n",
|
||||
"Radars work by emitting radio waves or microwaves. Anything in the beam's path will reflect some of the signal back to the radar. By timing how long it takes for the reflected signal to return it can compute the *slant distance* and bearing to the target. Slant distance is the straight line distance from the radar to the object. Radars also provide velocity measurements via the Doppler effect, but we will be ignoring this complication for the moment.\n",
|
||||
@@ -1198,7 +1154,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAADVCAYAAABe6Zj7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmczXX///HnOWOYjTGILGPLRXYyxiAmCVmzX0WWUSJF\nV5KERFf1ra4rS3W1yJq6+IWUb4SrfBlCxjqV7TKTJUW2mbKM2T6/P97NHMc5wwwzc2bmPO6329zM\neX+29zncmmfveb/eb5tlWZYAAAAAL2D3dAcAAACA/EL4BQAAgNcg/AIAAMBrEH4BAADgNQi/AAAA\n8BqEXwAAAHgNwi+AImfq1Kmy2+2Kjo72dFcKjbCwMNntdp07d+6G5168eFF2u109evTIh54BQO4i\n/ALIVXa73enLx8dHISEhat26td555x2lpqbmeR9sNptsNlueP8eddu3auXwG1/saNmyYR/p5rZx+\nZp78jAHgVhTzdAcAFD02m01Tp06VZVlKTU3V0aNH9dlnn2nr1q365ptvtGLFCk93Mc9ERUWpXbt2\nTm0bNmzQxo0bFRkZqXvuucfpWJMmTfKxd7kjMDBQ+/fvV1BQkKe7AgA5RvgFkCdeeOEFl9dNmzbV\nypUrtWnTJrVp08ZDPctbgwcPdmmzLEsbNmzQPffcoylTpnigV7mvdu3anu4CANwUpj0AyBe1atVS\nZGSkJCkmJsbl+IIFC9S3b1/dcccdCggIUHBwsO6++24tWrQoy3vu3LlT999/v0qVKqXg4GB16NBB\n27Zty/L8zz//XIMGDVKdOnUUFBSkoKAgNWvWTLNmzVJ6errL+UOHDs2cO7xo0SKFh4crKChId911\n1018Atc3btw42e12ffbZZ1qxYoXuvvtulSpVSlWrVs08Z/bs2erZs6dq1qypgIAAlS5dWpGRkfr0\n00+zvO+ZM2c0YcIE1a9fX4GBgSpdurSaNGmi559/XpcuXbphv3bt2qWKFSsqJCRE69evl5T1nN+r\n38OaNWvUpk0blSxZUqVLl1avXr0UFxfn9hn79u1Tjx49FBISopIlS6pt27b65ptv9M4772TeDwBy\nCyO/APKNZVmSJF9fX5djo0aNUoMGDRQZGamKFSvq7NmzWr16tYYMGaKDBw/q5Zdfdjp/y5Yt6tCh\ng5KTk9WnTx/VqlVLsbGxuueee3Tvvfe6ff7zzz8vHx8fRUREqHLlykpMTNT69ev19NNPKyYmRh9/\n/LHT+RnzWv/xj39o/fr16tGjh+677z4lJyfn0ifi+qz58+dr3bp16t69u9q2bavz589LktLS0jRy\n5Ei1aNFC9957rypUqKDTp0/ryy+/1IMPPqj4+HhNmDDB6Z4HDhxQ+/btdfLkSTVv3lxPPPGE0tLS\ndOjQIc2cOVPDhw9XzZo1s+zTmjVr1L9/f5UuXVr/+c9/1KBBg2y9hyVLlujzzz9X9+7dNWrUKO3d\nu1dffPGFdu7cqX379jlNl9i7d6/atGmjS5cuqUePHqpXr54OHTqkLl26qHPnzswrBpD7LADIRTab\nzbLb7S7t+/btswIDAy273W7t2rXL5Xh8fLxLW0pKitW+fXvL19fXOnHihNOxOnXqWHa73VqxYoVT\n+7vvvpvZh40bN97wGZZlWUOGDLHsdrv13XffObUPHTrUstlsVlBQkBUbG+v+DWfD1KlTLZvNZk2b\nNi3Lc8aNG2fZbDbL19fX2rx5s9tzfvrpJ5e2pKQkq1WrVpa/v7919uxZp2ONGze27Ha7NXPmTJfr\nzp07ZyUlJWW+DgsLs+x2e+Y95s6da/n6+lqNGjVy+ewvXLhg2Ww2q3v37m7fg5+fn7Vt2zanY6NH\nj7bsdrv13nvvObWHh4dbdrvdWrhwoVP78uXLM/8ely9f7vbzAICbwbQHAHli2rRpmjZtml544QUN\nGjRIYWFhunz5sp599lk1bdrU5fwaNWq4tBUrVixztDLjV+6SGfU9dOiQWrdurZ49ezpdM3LkSNWq\nVcttn9w9Q5LGjBkjy7K0bt06l2M2m00jRoxQw4YNr/t+c8uAAQPUunVrt8eqV6/u0laiRAmNHDlS\nV65ccVraLTo6WrGxsYqIiNBTTz3lcl1ISIhKlCjh9jlTp07Vo48+qrZt22rTpk2qVKlSjt7DsGHD\n1KJFC6e2xx57TJZlafv27ZltBw8eVExMjOrXr+8yV7p3794u9wCA3MC0BwB54qWXXnJpe/nll/X8\n88+7Pf/48eN67bXXtH79eh07dkyXL1/OPGaz2XTixInM17t27ZIktW3b1uU+NptNd999t9v5pefO\nndMbb7yhr776SvHx8bp48WKWz7ha8+bNs3iXuctms133WfHx8Xr99de1YcMG/fzzz9f9jDLmPnfq\n1ClHfRg+fLhWrFihgQMHav78+SpWLGc/Jmw2m5o1a+bSHhoaKkmZ0zgkaffu3ZKkVq1aub1XmzZt\nnMIyAOQGwi+APJGWliZJSkpKUkxMjEaMGKHJkyerRo0aevDBB53O/emnn9S8eXMlJiaqTZs26tSp\nk4KDg+Xj46MjR45o4cKFunLlSub5iYmJstlsqlChgttnu2tPTExUWFiYjh49qvDwcA0ZMkRlypRR\nsWLFlJCQoJkzZzo942q33377zX4MOZbVs/bv36+WLVvq0qVLuueee9SlSxeVKlVKPj4+OnTokBYv\nXuzU/4SEBNlsNlWuXDlHz4+OjpbNZlO3bt1yHHwzlC5d2qUt414Z/y4k83ciuf/7ul47ANwKwi+A\nPOXn56c2bdroq6++Uv369TVixAi1a9fOKdi8+eabOn/+vBYsWKBBgwY5Xb9kyRItWLDAqS04OFiW\nZenUqVNun+mu/cMPP9SRI0cyp2Jcbdu2bZo5c2aW7yE/i66yetbrr7+uP/74Q8uWLVOvXr2cjs2Z\nM0f//ve/ndpKly4ty7KyHM3OyurVq9W/f389/PDDunLlitul23JLqVKlJLn/+7peOwDcCub8AsgX\n1apV03PPPac//vjDZa3bjCkKvXv3drluw4YNLoEwY6mxjRs3upxvWZY2b97s0h4XFyebzZblMwq6\nuLg42e12PfDAAy7H3H1GERERksyKDTlxxx13KDo6WjVr1lRUVJRmz559852+gYy531u2bHF7fNOm\nTXn2bADei/ALIN88/fTTKleunBYsWKDDhw9ntmcUcl0bQteuXau5c+e63KdVq1aqU6eOtmzZ4rIG\n7Lvvvut076ufYf252cTVdu/erddeey3PR3dv9f7Vq1dXenq6SyBcsWKFFi9e7HJ+27Zt1bhxY333\n3XduR7XPnz+vpKQkt88KDQ1VdHS06tWrp5EjR+rtt9++pb5n5c4771RYWJh+/PFHl9H9ZcuW6bvv\nvsuT5wLwboRfAPkmKChIEyZMUEpKitPUg1GjRsnX11d9+/bVoEGD9Nxzz6lr167q2rWr+vXrl7k+\n8NXmzp0rf39/9e/fX/3799ekSZPUvXt3jRs3Tp07d3Y5f/DgwSpTpoyeeuop9enTRxMmTFCfPn0U\nERGhLl26uH1GbsrO/a93zujRo+Xj46MuXbpo6NChGj9+vDp16qR+/fqpf//+bq9dsmSJKlasqGee\neUYREREaP368xo0bpwceeEBVqlTRL7/8kuXzKlSooI0bN6pp06Z66qmn9Nprr+Xa+7zaBx98oKCg\nID3yyCPq1auXJk+enDntImMTDbudH1UAcg//RQGQ6643yjlq1ChVqlRJy5Yt0969eyVJDRs21IYN\nG9S6dWutXr1a77//vv744w+tWLFCI0aMyNw84WqtWrXSpk2b1LFjR61du1bvvPOOkpOTtWHDBoWH\nh7s8t2LFitq8ebO6deumb7/9Vv/617907Ngxvf/++/qf//kft8/ITdm5//WOh4eH6+uvv1bz5s21\ncuVKzZ49W8nJyVq9erUefvhht9fWqVNHe/bs0TPPPKOEhAS98847mjdvno4fP66xY8e6FNdde48y\nZcpo/fr1ioiI0KRJkzR16tQbvp/rvQd31zRt2lRbtmxRt27dtGHDBr311ls6deqUVq9enTktImNu\nMADkBpuV18MdAADchAceeEBffvmljh8/nuO1hgEgK4z8AgA8Ji0tTWfOnHFp/9///V99+eWXCg8P\nJ/gCyFUsdQYA8JgLFy6ocuXKat++verUqSObzabY2FitX79eQUFBeVZsB8B7Me0BAOAxKSkpGjt2\nrNavX68TJ07o8uXLKl++vNq1a6fnn39edevW9XQXARQxWYbfjJ13AAAAgMIoODjYpY05vwAAAPAa\nhF8AAAB4jWwVvLkbMgYAAAAKmhtN3WXkFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1\nCL8AAADwGoRfAAAAeA3CLwAAALwG4RcAAABeg/ALAAAAr0H4BQAAgNcg/AIAAMBrEH4BAADgNQi/\nAAAA8BqEXwAAAHgNwi8AAAC8BuEXAAAAXoPwCwAAAK9B+AUAAIDXIPwCAADAaxB+AQAA4DUIvwAA\nAPAahF8AAAB4DcIvAAAAvAbhFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1CL8AAADw\nGoRfAAAAeA3CLwAAXsBulz77zHPP/+ILqXZtqXhxadgwz/UDIPwCAFBE7N4tFSsmtWnjeuzkSal7\n9/zvU4ZHH5X69ZOOHZNmzZIWLpRKlvRcf+C9CL8AABQRc+ZITzwh/fCDdPCg87Hy5SVf36yvTU3N\n+fNSUrJ3XkKCdPas1LGjdPvtJvRalmSz5fyZwK0i/AIAUAQkJUn//rf02GNSnz4mCF/t6mkPR4+a\n10uWSO3bS4GB0uzZ5ti2baYtKEgqXVq67z4zaixJ7dpJo0ZJzz5rwvTdd5v2GTOkxLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x893c128>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb92dfc88>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1373,9 +1329,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x88d10b8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb92a35f8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1383,9 +1339,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8a4ce80>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb9388978>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1393,9 +1349,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x88732e8>"
|
||||
"<matplotlib.figure.Figure at 0x1cfb92a3c18>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1792,13 +1748,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Multiple Position Sensors"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Multiple Position Sensors\n",
|
||||
"\n",
|
||||
"The last sensor fusion problem was a toy example. Let's tackle a problem that is not so toy-like. Before GPS ships and aircraft navigated via various range and bearing systems such as VOR, LORAN, TACAN, DME, and so on. These systems emit beacons in the form of radio waves. The sensor extracts the range and/or bearing to the beacon from the signal. For example, an aircraft might have two VOR receivers. The pilot tunes each receiver to a different VOR station. Each VOR receiver displays the *radial* - the direction from the VOR station on the ground to the aircraft. The pilot uses a chart to find the intersection point of the radials, which identifies the location of the aircraft.\n",
|
||||
"\n",
|
||||
"That is a manual approach with low accuracy. A Kalman filter will produce far more accurate position estimates. Assume we have two sensors, each which provides a bearing only measurement to the target, as in the chart below. The width of the perimeters are proportional to the $3\\sigma$ of the sensor noise. The aircraft must be positioned somewhere within the intersection of the two perimeters with a high degee of probability."
|
||||
@@ -1989,7 +1940,7 @@
|
||||
"source": [
|
||||
"This looks quite good to me. The beginning of the track exhibits large errors, but the filter settles down and produces good estimates.\n",
|
||||
"\n",
|
||||
"Let's revisit the nonlinearity of the angles. I will position the target between the two sensors at (0,0). This will cause a nonlinearity in the computation of the sigma means and the residuals because the mean angle will be near zero. As the angle goes below 0 the measurement function will compute a large positive angle of nearly $2\\pi$. The residual between the prediction and measurement will thus be very large, nearly $2\\pi$ instead of nearly 0. This makes it impossible for the filter to perform accurately, as seen in the example below."
|
||||
"Let's revisit the nonlinearity of the angles. I will position the target between the two sensors at (0,0). This will cause a nonlinearity in the computation of the residuals because the mean angle will be near zero. As the angle goes below 0 the measurement function will compute a large positive angle of nearly $2\\pi$. The residual between the prediction and measurement will thus be very large, nearly $2\\pi$ instead of nearly 0. This makes it impossible for the filter to perform accurately, as seen in the example below."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2169,14 +2120,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Implementation of the UKF"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"FilterPy implements the UKF, but it is instructive to learn how to go translate equations into code. Implementing the UKF is quite straightforward. First, let's write code to compute the mean and covariance of the sigma points. \n",
|
||||
"## Implementation of the UKF\n",
|
||||
"\n",
|
||||
"FilterPy implements the UKF, but it is instructive to learn how to translate equations into code. Implementing the UKF is quite straightforward. First, let's write code to compute the mean and covariance of the sigma points. \n",
|
||||
"\n",
|
||||
"We will store the sigma points and weights in matrices, like so:\n",
|
||||
"\n",
|
||||
@@ -2241,13 +2187,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Weights"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Weights\n",
|
||||
"\n",
|
||||
"Computing the weights with NumPy is easy. Recall that the Van der Merwe scaled sigma point implementation states:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
@@ -2276,13 +2217,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Sigma Points"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Sigma Points\n",
|
||||
"\n",
|
||||
"The equations for the sigma points are:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
@@ -2295,15 +2231,15 @@
|
||||
"\n",
|
||||
"The Python is not difficult once we understand the $\\left[\\sqrt{(n+\\lambda)\\Sigma} \\right]_i$ term.\n",
|
||||
"\n",
|
||||
"The term $[\\sqrt{(n+\\kappa)\\Sigma}]_i$ is a matrix because $\\Sigma$ is a matrix. The subscript $i$ is choosing the column vector of the matrix. What is the square root of a matrix? There is no unique definition. One definition is that the square root of a matrix $\\Sigma$ is the matrix $S$ that, when multiplied by itself, yields $\\Sigma$: if $\\Sigma = SS$ then $S = \\sqrt{\\Sigma}$.\n",
|
||||
"The term $\\sqrt{(n+\\kappa)\\Sigma}$ is a matrix because $\\Sigma$ is a matrix. The subscript $i$ in $[\\sqrt{(n+\\kappa)\\Sigma}]_i$ is choosing the column vector of the matrix. What is the square root of a matrix? There is no unique definition. One definition is that the square root of a matrix $\\Sigma$ is the matrix $S$ that, when multiplied by itself, yields $\\Sigma$: if $\\Sigma = SS$ then $S = \\sqrt{\\Sigma}$.\n",
|
||||
"\n",
|
||||
"We will choose an alternative definition that has numerical properties which makes it easier easier to compute. We can define the square root as the matrix S, which when multiplied by its transpose, returns $\\Sigma$:\n",
|
||||
"We will choose an alternative definition that has numerical properties which make it easier to compute. We can define the square root as the matrix S, which when multiplied by its transpose, returns $\\Sigma$:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\Sigma = \\mathbf{SS}^\\mathsf T\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"This definition is frequently chosen because $\\mathbf S$ is computed using the *Cholesky decomposition* [3]. It decomposes a Hermitian, positive-definite matrix into a lower triangular matrix and its conjugate transpose. $\\mathbf P$ has these properties, so we can treat $\\mathbf S = \\text{cholesky}(\\mathbf P)$ as the square root of $\\mathbf P$.\n",
|
||||
"This definition is favored because $\\mathbf S$ is computed using the [*Cholesky decomposition*](https://en.wikipedia.org/wiki/Cholesky_decomposition) [3]. It decomposes a Hermitian, positive-definite matrix into a lower triangular matrix and its conjugate transpose. $\\mathbf P$ has these properties, so we can treat $\\mathbf S = \\text{cholesky}(\\mathbf P)$ as the square root of $\\mathbf P$.\n",
|
||||
"\n",
|
||||
"SciPy provides `cholesky()` method in `scipy.linalg`. If your language of choice is Fortran, C, or C++, libraries such as LAPACK provide this routine. Matlab provides `chol()`."
|
||||
]
|
||||
@@ -2346,13 +2282,8 @@
|
||||
"for k in range (n):\n",
|
||||
" sigmas[k+1] = X + U[k]\n",
|
||||
" sigmas[n+k+1] = X - U[k]\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"```\n",
|
||||
"\n",
|
||||
"Now let's implement the unscented transform. Recall the equations\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
@@ -2367,7 +2298,7 @@
|
||||
"x = np.dot(Wm, sigmas)\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"If you are not a heavy user of NumPy this may look foreign to you. NumPy is not just a library that make linear algebra possible; under the hood it is written in C to achieve much faster speeds than Python can reach. A typical speedup is 20x to 100x. To get that speedup we must avoid using for loops, and instead use NumPy's built in functions to perform calculations. So, instead of writing a for loop to compute the sum, we call the built in `numpy.dot(x, y)` method. The dot product of two vectors is the sum of the element-wise multiplications of each element. If passed a 1D array and a 2D array it will compute the sum of inner products:"
|
||||
"If you are not a heavy user of NumPy this may look foreign to you. NumPy is not just a library that make linear algebra possible; under the hood it is written in C and Fortran to achieve much faster speeds than Python can reach. A typical speedup is 20x to 100x. To get that speedup we must avoid using for loops, and instead use NumPy's built in functions to perform calculations. So, instead of writing a for loop to compute the sum of products, we call the built in `numpy.dot(x, y)` method. The dot product of two vectors is the sum of the element-wise multiplications of each element. If passed a 1D array and a 2D array it will compute the sum of inner products:"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2423,30 +2354,19 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Predict Step"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"source": [
|
||||
"### Predict Step\n",
|
||||
"\n",
|
||||
"For the predict step, we will generate the weights and sigma points as specified above. We pass each sigma point through the function f.\n",
|
||||
"\n",
|
||||
"$$\\boldsymbol{\\mathcal{Y}} = f(\\boldsymbol{\\chi})$$\n",
|
||||
"\n",
|
||||
"Then we compute the predicted mean and covariance using the unscented transform. In the code below you can see that I am assuming that this is a method in a class that stores the various matrices and vectors needed by the filter."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 37,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"Then we compute the predicted mean and covariance using the unscented transform. In the code below you can see that I am assuming that this is a method in a class that stores the various matrices and vectors needed by the filter.\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def predict(self, sigma_points_fn):\n",
|
||||
" \"\"\" Performs the predict step of the UKF. On return, \n",
|
||||
" self.xp and self.Pp contain the predicted state (xp) \n",
|
||||
@@ -2460,7 +2380,8 @@
|
||||
" self.sigmas_f[i] = self.fx(sigmas[i], self._dt)\n",
|
||||
"\n",
|
||||
" self.xp, self.Pp = unscented_transform(\n",
|
||||
" self.sigmas_f, self.Wm, self.Wc, self.Q)"
|
||||
" self.sigmas_f, self.Wm, self.Wc, self.Q)\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2472,7 +2393,10 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": false
|
||||
},
|
||||
"source": [
|
||||
"The update step converts the sigmas into measurement space via the function `h(x)`.\n",
|
||||
"\n",
|
||||
@@ -2480,7 +2404,7 @@
|
||||
"\n",
|
||||
"The mean and covariance of those points is computed with the unscented transform. The residual and Kalman gain is then computed. The cross variance is computed as:\n",
|
||||
"\n",
|
||||
"$$\\mathbf P_{xz} =\\sum w^c(\\boldsymbol{\\chi}-\\mu)(\\boldsymbol{\\mathcal{Z}}-\\mathbf{\\mu}_z)^\\mathsf{T}$$\n",
|
||||
"$$\\mathbf P_{xz} =\\sum_{i=0}^{2n} w^c_i(\\boldsymbol{\\chi}_i-\\mu)(\\boldsymbol{\\mathcal Z}_i-\\mu_z)^\\mathsf T$$\n",
|
||||
"\n",
|
||||
"Finally, we compute the new state estimate using the residual and Kalman gain:\n",
|
||||
"\n",
|
||||
@@ -2493,18 +2417,9 @@
|
||||
"\n",
|
||||
"$$ \\mathbf P = \\mathbf{\\bar P} - \\mathbf{KP}_z\\mathbf{K}^\\mathsf{T}$$\n",
|
||||
"\n",
|
||||
"This function can be implemented as follows, assuming it is a method of a class that stores the necessary matrices and data."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 38,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": false
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"This function can be implemented as follows, assuming it is a method of a class that stores the necessary matrices and data.\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
"def update(self, z):\n",
|
||||
" # rename for readability\n",
|
||||
" sigmas_f = self.sigmas_f\n",
|
||||
@@ -2526,7 +2441,8 @@
|
||||
" K = dot(Pxz, inv(Pz)) # Kalman gain\n",
|
||||
"\n",
|
||||
" self.x = self.xp + dot(K, z-zp)\n",
|
||||
" self.P = self.Pp - dot3(K, Pz, K.T)"
|
||||
" self.P = self.Pp - dot3(K, Pz, K.T)\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2544,13 +2460,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Batch Processing"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Batch Processing\n",
|
||||
"\n",
|
||||
"The Kalman filter is recursive - estimates are based on the currernt measurement and prior estimate. But it is very common to have a set of data that have been already collected which we want to filter. In this case the filter can be run in a *batch* mode, where all of the measurements are filtered at once.\n",
|
||||
"\n",
|
||||
"Collect your measurements into an array or list.\n",
|
||||
@@ -2652,18 +2563,13 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Smoothing the Results"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Smoothing the Results\n",
|
||||
"\n",
|
||||
"Assume that we are tracking a car. Suppose we get a noisy measurement that implies that the car is starting to turn to the left, but the state function has predicted that the car is moving straight. The Kalman filter has no choice but to move the state estimate somewhat towards the noisy measurement, as it cannot judge whether this is just a particularly noisy measurement or the true start of a turn. \n",
|
||||
"\n",
|
||||
"If we are collecting data and post-processing it we have measurements after the questionable one that informs us if a turn was made or not. Suppose the subsequent measurements all continue turning left. We can then be sure that the measurement was not very noisy, but instead a turn was initiated.\n",
|
||||
"\n",
|
||||
"We will not develop the math or algorithm here, I will just show you how to call the algorithm in `FilterPy`. The algorithm that we have implemented is called an **RTS smoother**, after the three inventors of the algorithm: Rauch, Tung, and Striebel.\n",
|
||||
"We will not develop the math or algorithm here, I will just show you how to call the algorithm in `FilterPy`. The algorithm that we have implemented is called an *RTS smoother*, after the three inventors of the algorithm: Rauch, Tung, and Striebel.\n",
|
||||
"\n",
|
||||
"The routine is `UnscentedKalmanFilter.rts_smoother()`. Using it is trivial; we pass in the means and covariances computed from the `batch_filter` step, and receive back the smoothed means, covariances, and Kalman gain."
|
||||
]
|
||||
@@ -2731,16 +2637,11 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Choosing the Sigma Parameters"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Choosing the Sigma Parameters\n",
|
||||
"\n",
|
||||
"I have found the literature on choosing values for $\\alpha$, $\\beta$, and $\\kappa$ to be rather lacking. Van der Merwe's dissertation contains the most information, but it is not exhaustive. So let's explore what they do. \n",
|
||||
"\n",
|
||||
"Van der Merwe suggests using $\\beta=2$ for Gaussian problems, and $\\kappa=3-n$. So let's start there and vary $\\alpha$. I will let $n=1$ minimize the size of the arrays we need to look at and to avoid having to compute the square root of matrices"
|
||||
"Van der Merwe suggests using $\\beta=2$ for Gaussian problems, and $\\kappa=3-n$. So let's start there and vary $\\alpha$. I will let $n=1$ to minimize the size of the arrays we need to look at and to avoid having to compute the square root of matrices."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -2980,7 +2881,7 @@
|
||||
"source": [
|
||||
"### Design the System Model\n",
|
||||
"\n",
|
||||
"We model our system as a nonlinear motion model plus noise.\n",
|
||||
"We model our system as a nonlinear motion model plus white noise.\n",
|
||||
"\n",
|
||||
"$$\\bar x = x + f(x, u) + \\mathcal{N}(0, Q)$$\n",
|
||||
"\n",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"execution_count": 6,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -210,19 +210,15 @@
|
||||
" margin-top: 0.2em; \n",
|
||||
" }\n",
|
||||
" a:link{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:visited{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:hover{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color: #1d3b84;\n",
|
||||
" }\n",
|
||||
" a:focus{\n",
|
||||
" font-weight: bold;\n",
|
||||
" color:#447adb;\n",
|
||||
" }\n",
|
||||
" a:active{\n",
|
||||
@@ -293,7 +289,7 @@
|
||||
"<IPython.core.display.HTML object>"
|
||||
]
|
||||
},
|
||||
"execution_count": 1,
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -312,7 +308,7 @@
|
||||
"source": [
|
||||
"We have developed the theory for the linear Kalman filter. Then, in the last two chapters we broached the topic of using Kalman filters for nonlinear problems. In this chapter we will learn the Extended Kalman filter (EKF). The EKF handles nonlinearity by linearizing the system at the point of the current estimate, and then the linear Kalman filter is used to filter this linearized system. It was one of the very first techniques used for nonlinear problems, and it remains the most common technique. \n",
|
||||
"\n",
|
||||
"The EKF provides significant mathematical challenges to the designer of the filter; this is the most challenging chapter of the book. To be honest, I do everything I can to avoid the EKF in favor of other techniques that have been developed to filter nonlinear problems. However, the topic is unavoidable; all classic papers and a majority of current papers in the field use the EKF. Even if you do not use the EKF in your own work you will need to be familiar with the topic to be able to read the literature. "
|
||||
"The EKF provides significant mathematical challenges to the designer of the filter; this is the most challenging chapter of the book. I do everything I can to avoid the EKF in favor of other techniques that have been developed to filter nonlinear problems. However, the topic is unavoidable; all classic papers and a majority of current papers in the field use the EKF. Even if you do not use the EKF in your own work you will need to be familiar with the topic to be able to read the literature. "
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -329,15 +325,13 @@
|
||||
"\\mathbf z &= \\mathbf{Hx} + w_z\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"For the nonlinear model these equations must be modified to read:\n",
|
||||
"For the nonlinear model the linear expression $\\mathbf{Ax} + \\mathbf{Bu}$ is replaced by a nonlinear function $f(\\mathbf x, \\mathbf u)$, and the linear expression $\\mathbf{Hx}$ is replaced by a nonlinear function $h(\\mathbf x)$:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\\bar{\\mathbf x} &= f(\\mathbf x, \\mathbf u) + w_x\\\\\n",
|
||||
"\\mathbf z &= h(\\mathbf x) + w_z\n",
|
||||
"\\end{aligned}$$\n",
|
||||
"\n",
|
||||
"The linear expression $\\mathbf{Ax} + \\mathbf{Bu}$ is replaced by a nonlinear function $f(\\mathbf x, \\mathbf u)$, and the linear expression $\\mathbf{Hx}$ is replaced by a nonlinear function $h(\\mathbf x)$.\n",
|
||||
"\n",
|
||||
"You might imagine that we proceed by finding a new set of Kalman filter equations that optimally solve these equations. But if you remember the charts in the **Nonlinear Filtering** chapter you'll recall that passing a Gaussian through a nonlinear function results in a probability distribution that is no longer Gaussian. So this will not work.\n",
|
||||
"You might imagine that we could proceed by finding a new set of Kalman filter equations that optimally solve these equations. But if you remember the charts in the **Nonlinear Filtering** chapter you'll recall that passing a Gaussian through a nonlinear function results in a probability distribution that is no longer Gaussian. So this will not work.\n",
|
||||
"\n",
|
||||
"The EKF does not alter the Kalman filter's linear equations. Instead, it *linearizes* the nonlinear equations at the point of the current estimate, and uses this linearization in the linear Kalman filter. \n",
|
||||
"\n",
|
||||
@@ -346,7 +340,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"execution_count": 7,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -355,7 +349,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x4c4f320>"
|
||||
"<matplotlib.figure.Figure at 0x4a09da0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -373,7 +367,7 @@
|
||||
"source": [
|
||||
"If the curve above is the process model, then the dotted lines shows the linearization of that curve for the estimate $x=1.5$.\n",
|
||||
"\n",
|
||||
"We linearize systems by taking the derivative, which finds an expression for the slope of the curve:\n",
|
||||
"We linearize systems by taking the derivative, which finds the slope of a curve:\n",
|
||||
"\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"f(x) &= x^2 -2x \\\\\n",
|
||||
@@ -384,30 +378,23 @@
|
||||
"\n",
|
||||
"$$\\begin{aligned}m &= f'(x=1.5) \\\\&= 2(1.5) - 2 \\\\&= 1\\end{aligned}$$ \n",
|
||||
"\n",
|
||||
"Linearizing systems of differential equations is more complicated. We linearize $f(\\mathbf x, \\mathbf u)$, and $h(\\mathbf x)$ by taking the partial derivatives of each to evaluate $\\mathbf A$ and $\\mathbf H$ at the point $\\mathbf x_t$ and $\\mathbf u_t$. We call the partial derivative of a matrix the *Jacobian*. This gives us the the system dynamics matrix and measurement model matrix:\n",
|
||||
"Linearizing systems of differential equations is similar. We linearize $f(\\mathbf x, \\mathbf u)$, and $h(\\mathbf x)$ by taking the partial derivatives of each to evaluate $\\mathbf A$ and $\\mathbf H$ at the point $\\mathbf x_t$ and $\\mathbf u_t$. We call the partial derivative of a matrix the [*Jacobian*](https://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant). This gives us the the system dynamics matrix and measurement model matrix:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"\\mathbf A \n",
|
||||
"&= {\\frac{\\partial{f(\\mathbf x_t, \\mathbf u_t)}}{\\partial{\\mathbf x}}}\\biggr|_{{\\mathbf x_t},{\\mathbf u_t}} \\\\\n",
|
||||
"\\mathbf H &= \\frac{\\partial{h(\\mathbf x_t)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t} \n",
|
||||
"\\mathbf H &= \\frac{\\partial{h(\\bar{\\mathbf x}_t)}}{\\partial{\\bar{\\mathbf x}}}\\biggr|_{\\bar{\\mathbf x}_t} \n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"$h(\\bar{\\mathbf x})$ is computed with the prior, but I drop the bar on for notational convenience."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, we find the discrete state transition matrix $\\mathbf F$ by using the Taylor series expansion of $e^{\\mathbf A \\Delta t}$:\n",
|
||||
"\n",
|
||||
"$$\\mathbf F = e^{\\mathbf A\\Delta t} = \\mathbf{I} + \\mathbf A\\Delta t + \\frac{(\\mathbf A\\Delta t)^2}{2!} + \\frac{(\\mathbf A\\Delta t)^3}{3!} + ... $$\n",
|
||||
"\n",
|
||||
"Alternatively, you can use one of the other techniques we learned in the **Kalman Math** chapter. \n",
|
||||
"\n",
|
||||
"This leads to the following equations for the EKF. I placed them beside the equations for the linear Kalman filter, and put boxes around the changes:\n",
|
||||
"This leads to the following equations for the EKF. I put boxes around the differences from the linear filter:\n",
|
||||
"\n",
|
||||
"$$\\begin{array}{l|l}\n",
|
||||
"\\text{linear Kalman filter} & \\text{EKF} \\\\\n",
|
||||
@@ -417,7 +404,7 @@
|
||||
"\\mathbf{\\bar x} = \\mathbf{Fx} + \\mathbf{Bu} & \\boxed{\\mathbf{\\bar x} = f(\\mathbf x, \\mathbf u)} \\\\\n",
|
||||
"\\mathbf{\\bar P} = \\mathbf{FPF}^\\mathsf{T}+\\mathbf Q & \\mathbf{\\bar P} = \\mathbf{FPF}^\\mathsf{T}+\\mathbf Q \\\\\n",
|
||||
"\\hline\n",
|
||||
"& \\boxed{\\mathbf H = \\frac{\\partial{h(\\mathbf x_t)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t}} \\\\\n",
|
||||
"& \\boxed{\\mathbf H = \\frac{\\partial{h(\\bar{\\mathbf x}_t)}}{\\partial{\\bar{\\mathbf x}}}\\biggr|_{\\bar{\\mathbf x}_t}} \\\\\n",
|
||||
"\\textbf{y} = \\mathbf z - \\mathbf{H \\bar{x}} & \\textbf{y} = \\mathbf z - \\boxed{h(\\bar{x})}\\\\\n",
|
||||
"\\mathbf{K} = \\mathbf{\\bar{P}H}^\\mathsf{T} (\\mathbf{H\\bar{P}H}^\\mathsf{T} + \\mathbf R)^{-1} & \\mathbf{K} = \\mathbf{\\bar{P}H}^\\mathsf{T} (\\mathbf{H\\bar{P}H}^\\mathsf{T} + \\mathbf R)^{-1} \\\\\n",
|
||||
"\\mathbf x=\\mathbf{\\bar{x}} +\\mathbf{K\\textbf{y}} & \\mathbf x=\\mathbf{\\bar{x}} +\\mathbf{K\\textbf{y}} \\\\\n",
|
||||
@@ -433,13 +420,8 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Example: Tracking a Airplane"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## Example: Tracking a Airplane\n",
|
||||
"\n",
|
||||
"This example tracks an airplane using ground based radar. We implemented a UKF for this problem in the last chapter. Now we will implement an EKF for the same problem so we can compare both the filter performance and the level of effort required to implement the filter.\n",
|
||||
"\n",
|
||||
"Radars work by emitting a beam of radio waves and scanning for a return bounce. Anything in the beam's path will reflects some of the signal back to the radar. By timing how long it takes for the reflected signal to get back to the radar the system can compute the *slant distance* - the straight line distance from the radar installation to the object.\n",
|
||||
@@ -449,7 +431,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"execution_count": 8,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -459,7 +441,7 @@
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAr8AAADVCAYAAABe6Zj7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmczXX///HnOWOYjTGILGPLRXYyxiAmCVmzX0WWUSJF\nV5KERFf1ra4rS3W1yJq6+IWUb4SrfBlCxjqV7TKTJUW2mbKM2T6/P97NHMc5wwwzc2bmPO6329zM\neX+29zncmmfveb/eb5tlWZYAAAAAL2D3dAcAAACA/EL4BQAAgNcg/AIAAMBrEH4BAADgNQi/AAAA\n8BqEXwAAAHgNwi+AImfq1Kmy2+2Kjo72dFcKjbCwMNntdp07d+6G5168eFF2u109evTIh54BQO4i\n/ALIVXa73enLx8dHISEhat26td555x2lpqbmeR9sNptsNlueP8eddu3auXwG1/saNmyYR/p5rZx+\nZp78jAHgVhTzdAcAFD02m01Tp06VZVlKTU3V0aNH9dlnn2nr1q365ptvtGLFCk93Mc9ERUWpXbt2\nTm0bNmzQxo0bFRkZqXvuucfpWJMmTfKxd7kjMDBQ+/fvV1BQkKe7AgA5RvgFkCdeeOEFl9dNmzbV\nypUrtWnTJrVp08ZDPctbgwcPdmmzLEsbNmzQPffcoylTpnigV7mvdu3anu4CANwUpj0AyBe1atVS\nZGSkJCkmJsbl+IIFC9S3b1/dcccdCggIUHBwsO6++24tWrQoy3vu3LlT999/v0qVKqXg4GB16NBB\n27Zty/L8zz//XIMGDVKdOnUUFBSkoKAgNWvWTLNmzVJ6errL+UOHDs2cO7xo0SKFh4crKChId911\n1018Atc3btw42e12ffbZZ1qxYoXuvvtulSpVSlWrVs08Z/bs2erZs6dq1qypgIAAlS5dWpGRkfr0\n00+zvO+ZM2c0YcIE1a9fX4GBgSpdurSaNGmi559/XpcuXbphv3bt2qWKFSsqJCRE69evl5T1nN+r\n38OaNWvUpk0blSxZUqVLl1avXr0UFxfn9hn79u1Tjx49FBISopIlS6pt27b65ptv9M4772TeDwBy\nCyO/APKNZVmSJF9fX5djo0aNUoMGDRQZGamKFSvq7NmzWr16tYYMGaKDBw/q5Zdfdjp/y5Yt6tCh\ng5KTk9WnTx/VqlVLsbGxuueee3Tvvfe6ff7zzz8vHx8fRUREqHLlykpMTNT69ev19NNPKyYmRh9/\n/LHT+RnzWv/xj39o/fr16tGjh+677z4lJyfn0ifi+qz58+dr3bp16t69u9q2bavz589LktLS0jRy\n5Ei1aNFC9957rypUqKDTp0/ryy+/1IMPPqj4+HhNmDDB6Z4HDhxQ+/btdfLkSTVv3lxPPPGE0tLS\ndOjQIc2cOVPDhw9XzZo1s+zTmjVr1L9/f5UuXVr/+c9/1KBBg2y9hyVLlujzzz9X9+7dNWrUKO3d\nu1dffPGFdu7cqX379jlNl9i7d6/atGmjS5cuqUePHqpXr54OHTqkLl26qHPnzswrBpD7LADIRTab\nzbLb7S7t+/btswIDAy273W7t2rXL5Xh8fLxLW0pKitW+fXvL19fXOnHihNOxOnXqWHa73VqxYoVT\n+7vvvpvZh40bN97wGZZlWUOGDLHsdrv13XffObUPHTrUstlsVlBQkBUbG+v+DWfD1KlTLZvNZk2b\nNi3Lc8aNG2fZbDbL19fX2rx5s9tzfvrpJ5e2pKQkq1WrVpa/v7919uxZp2ONGze27Ha7NXPmTJfr\nzp07ZyUlJWW+DgsLs+x2e+Y95s6da/n6+lqNGjVy+ewvXLhg2Ww2q3v37m7fg5+fn7Vt2zanY6NH\nj7bsdrv13nvvObWHh4dbdrvdWrhwoVP78uXLM/8ely9f7vbzAICbwbQHAHli2rRpmjZtml544QUN\nGjRIYWFhunz5sp599lk1bdrU5fwaNWq4tBUrVixztDLjV+6SGfU9dOiQWrdurZ49ezpdM3LkSNWq\nVcttn9w9Q5LGjBkjy7K0bt06l2M2m00jRoxQw4YNr/t+c8uAAQPUunVrt8eqV6/u0laiRAmNHDlS\nV65ccVraLTo6WrGxsYqIiNBTTz3lcl1ISIhKlCjh9jlTp07Vo48+qrZt22rTpk2qVKlSjt7DsGHD\n1KJFC6e2xx57TJZlafv27ZltBw8eVExMjOrXr+8yV7p3794u9wCA3MC0BwB54qWXXnJpe/nll/X8\n88+7Pf/48eN67bXXtH79eh07dkyXL1/OPGaz2XTixInM17t27ZIktW3b1uU+NptNd999t9v5pefO\nndMbb7yhr776SvHx8bp48WKWz7ha8+bNs3iXuctms133WfHx8Xr99de1YcMG/fzzz9f9jDLmPnfq\n1ClHfRg+fLhWrFihgQMHav78+SpWLGc/Jmw2m5o1a+bSHhoaKkmZ0zgkaffu3ZKkVq1aub1XmzZt\nnMIyAOQGwi+APJGWliZJSkpKUkxMjEaMGKHJkyerRo0aevDBB53O/emnn9S8eXMlJiaqTZs26tSp\nk4KDg+Xj46MjR45o4cKFunLlSub5iYmJstlsqlChgttnu2tPTExUWFiYjh49qvDwcA0ZMkRlypRR\nsWLFlJCQoJkzZzo942q33377zX4MOZbVs/bv36+WLVvq0qVLuueee9SlSxeVKlVKPj4+OnTokBYv\nXuzU/4SEBNlsNlWuXDlHz4+OjpbNZlO3bt1yHHwzlC5d2qUt414Z/y4k83ciuf/7ul47ANwKwi+A\nPOXn56c2bdroq6++Uv369TVixAi1a9fOKdi8+eabOn/+vBYsWKBBgwY5Xb9kyRItWLDAqS04OFiW\nZenUqVNun+mu/cMPP9SRI0cyp2Jcbdu2bZo5c2aW7yE/i66yetbrr7+uP/74Q8uWLVOvXr2cjs2Z\nM0f//ve/ndpKly4ty7KyHM3OyurVq9W/f389/PDDunLlitul23JLqVKlJLn/+7peOwDcCub8AsgX\n1apV03PPPac//vjDZa3bjCkKvXv3drluw4YNLoEwY6mxjRs3upxvWZY2b97s0h4XFyebzZblMwq6\nuLg42e12PfDAAy7H3H1GERERksyKDTlxxx13KDo6WjVr1lRUVJRmz559852+gYy531u2bHF7fNOm\nTXn2bADei/ALIN88/fTTKleunBYsWKDDhw9ntmcUcl0bQteuXau5c+e63KdVq1aqU6eOtmzZ4rIG\n7Lvvvut076ufYf252cTVdu/erddeey3PR3dv9f7Vq1dXenq6SyBcsWKFFi9e7HJ+27Zt1bhxY333\n3XduR7XPnz+vpKQkt88KDQ1VdHS06tWrp5EjR+rtt9++pb5n5c4771RYWJh+/PFHl9H9ZcuW6bvv\nvsuT5wLwboRfAPkmKChIEyZMUEpKitPUg1GjRsnX11d9+/bVoEGD9Nxzz6lr167q2rWr+vXrl7k+\n8NXmzp0rf39/9e/fX/3799ekSZPUvXt3jRs3Tp07d3Y5f/DgwSpTpoyeeuop9enTRxMmTFCfPn0U\nERGhLl26uH1GbsrO/a93zujRo+Xj46MuXbpo6NChGj9+vDp16qR+/fqpf//+bq9dsmSJKlasqGee\neUYREREaP368xo0bpwceeEBVqlTRL7/8kuXzKlSooI0bN6pp06Z66qmn9Nprr+Xa+7zaBx98oKCg\nID3yyCPq1auXJk+enDntImMTDbudH1UAcg//RQGQ6643yjlq1ChVqlRJy5Yt0969eyVJDRs21IYN\nG9S6dWutXr1a77//vv744w+tWLFCI0aMyNw84WqtWrXSpk2b1LFjR61du1bvvPOOkpOTtWHDBoWH\nh7s8t2LFitq8ebO6deumb7/9Vv/617907Ngxvf/++/qf//kft8/ITdm5//WOh4eH6+uvv1bz5s21\ncuVKzZ49W8nJyVq9erUefvhht9fWqVNHe/bs0TPPPKOEhAS98847mjdvno4fP66xY8e6FNdde48y\nZcpo/fr1ioiI0KRJkzR16tQbvp/rvQd31zRt2lRbtmxRt27dtGHDBr311ls6deqUVq9enTktImNu\nMADkBpuV18MdAADchAceeEBffvmljh8/nuO1hgEgK4z8AgA8Ji0tTWfOnHFp/9///V99+eWXCg8P\nJ/gCyFUsdQYA8JgLFy6ocuXKat++verUqSObzabY2FitX79eQUFBeVZsB8B7Me0BAOAxKSkpGjt2\nrNavX68TJ07o8uXLKl++vNq1a6fnn39edevW9XQXARQxWYbfjJ13AAAAgMIoODjYpY05vwAAAPAa\nhF8AAAB4jWwVvLkbMgYAAAAKmhtN3WXkFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1\nCL8AAADwGoRfAAAAeA3CLwAAALwG4RcAAABeg/ALAAAAr0H4BQAAgNcg/AIAAMBrEH4BAADgNQi/\nAAAA8BqEXwAAAHgNwi8AAAC8BuEXAAAAXoPwCwAAAK9B+AUAAIDXIPwCAADAaxB+AQAA4DUIvwAA\nAPAahF8AAAB4DcIvAAAAvAbhFwAAAF6D8AsAAACvQfgFAACA1yD8AgAAwGsQfgEAAOA1CL8AAADw\nGoRfAAAAeA3CLwAAXsBulz77zHPP/+ILqXZtqXhxadgwz/UDIPwCAFBE7N4tFSsmtWnjeuzkSal7\n9/zvU4ZHH5X69ZOOHZNmzZIWLpRKlvRcf+C9CL8AABQRc+ZITzwh/fCDdPCg87Hy5SVf36yvTU3N\n+fNSUrJ3XkKCdPas1LGjdPvtJvRalmSz5fyZwK0i/AIAUAQkJUn//rf02GNSnz4mCF/t6mkPR4+a\n10uWSO3bS4GB0uzZ5ti2baYtKEgqXVq67z4zaixJ7dpJo0ZJzz5rwvTdd5v2GTOkxLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x7f46dd8>"
|
||||
"<matplotlib.figure.Figure at 0x820dcc0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -549,19 +531,19 @@
|
||||
"source": [
|
||||
"### Design the Measurement Model\n",
|
||||
"\n",
|
||||
"The measurement function takes the state estimate of the prior $\\bar{\\mathbf x}$ and turn it into a measurement of the slant range distance. For notational convenience I will use $\\mathbf x$, not $\\bar{\\mathbf x}$. We use the Pythagorean theorem to derive:\n",
|
||||
"The measurement function takes the state estimate of the prior $\\bar{\\mathbf x}$ and turn it into a measurement of the slant range distance. We use the Pythagorean theorem to derive:\n",
|
||||
"\n",
|
||||
"$$h(\\mathbf x) = \\sqrt{x^2 + y^2}$$\n",
|
||||
"$$h(\\bar{\\mathbf x}) = \\sqrt{x^2 + y^2}$$\n",
|
||||
"\n",
|
||||
"The relationship between the slant distance and the position on the ground is nonlinear due to the square root. We linearize it by evaluating its partial derivative at $\\mathbf x_t$:\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\mathbf H = \\frac{\\partial{h(\\mathbf x)}}{\\partial{\\mathbf x}}\\biggr|_{\\mathbf x_t}\n",
|
||||
"\\mathbf H = \\frac{\\partial{h(\\bar{\\mathbf x})}}{\\partial{\\bar{\\mathbf x}}}\\biggr|_{\\bar{\\mathbf x}_t}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"The partial derivative of a matrix is called a Jacobian, and takes the form \n",
|
||||
"\n",
|
||||
"$$\\frac{\\partial \\mathbf H}{\\partial \\mathbf x} = \n",
|
||||
"$$\\frac{\\partial \\mathbf H}{\\partial \\bar{\\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",
|
||||
@@ -612,7 +594,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"execution_count": 9,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -632,12 +614,12 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Finally, let's provide the code for $h(\\mathbf x)$"
|
||||
"Finally, let's provide the code for $h(\\bar{\\mathbf x})$:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -660,7 +642,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"execution_count": 11,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -761,16 +743,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"execution_count": 12,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAwkAAADxCAYAAACAsvtlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVmX++P/X4b5vdmTfFAVUFHJfUhB3JJfcysZQf+qY\nueSSqZPfaj6jLU7WtJg1VuakOZpW1qhplopaLmiKuIv7CggCsm83N/f5/XHLrXeAYoKCvp+PBw85\n51znOtfRA573fS1vRVVVFSGEEEIIIYS4wepBN0AIIYQQQghRs0iQIIQQQgghhLAgQYIQQgghhBDC\nggQJQgghhBBCCAsSJAghhBBCCCEsSJAghBBCCCGEsCBBghBCCCGEEMJCjQkS5s2bR4cOHXB2dsbL\ny4uBAwdy/PhxizJjxozBysrK4qtTp04WZfR6PVOnTsXT0xNHR0cGDRpEYmKiRZnMzExGjhyJi4sL\nLi4ujBo1iqysrGq/RyGEEEIIIWqDGhMk7NixgylTprBnzx62b9+OVqulV69eZGZmWpSLjIwkJSWF\n5ORkkpOT2bhxo8XxadOmsWbNGr799lt27dpFdnY2/fv359acccOGDePQoUNs3ryZTZs2ERcXx6hR\no+7LfQohhBBCCFHTKTU143JeXh7Ozs6sW7eOJ598EjD1JKSnp/Pjjz+We052djaenp4sW7aMqKgo\nABISEvD39+eXX34hMjKS+Ph4mjVrRkxMDKGhoQDs3r2bLl26cOrUKYKCgu7PDQohhBBCCFFD1Zie\nhD/Kzs7GaDTi6upqsX/Xrl14e3vTtGlTxo8fT2pqqvnYgQMHMBgMREZGmvf5+fkREhJCTEwMAHv3\n7sXJyckcIACEh4fj4OBgLiOEEEIIIcSjTPugG1CRadOm0bZtW8LCwsz7+vbty5AhQwgMDOTixYv8\n/e9/p2fPnsTFxaHT6UhOTkaj0eDu7m5Rl7e3N8nJyQAkJyfj6elZ5npeXl7mMkIIIYQQQjzKamSQ\nMGPGDGJiYti9ezeKopj3Dx061Px9s2bNaNu2Lf7+/vz0008MHjy4WtoiE5qFEEIIIURt5uzsfNfn\n1LjhRtOnT+fbb79l+/bt+Pv737asr68vfn5+nDlzBgAfHx9KSkpIT0+3KJeSkoKPj4+5zK1DlEpd\nu3bNXEYIIYQQQohHWY0KEqZNm2YOECozgTg1NZXExER8fX0BaNeuHVqtli1btpjLJCQkEB8fT3h4\nOABhYWHk5uayd+9ec5mYmBjy8/PLLKcqhBBCCCHEo6jGrG40efJkVqxYwbp16wgJCTHvd3R0xMHB\ngby8PF5//XWGDBmCr68vFy5c4LXXXiMxMZETJ07g4OAAwKRJk9iwYQNLly7Fzc2NmTNnkpWVRWxs\nrHnoUr9+/UhMTGTRokWoqsqECRNo2LAha9euLdOuW4cb/ZmuGiHup9jYWADat2//gFsixJ3J8ypq\nE3leRW1zr++wNWZOwmeffYaiKERERFjsnzNnDrNnz0aj0XD06FGWL19OZmYmvr6+9OzZk9WrV5sD\nBIAFCxag0+mIioqioKCAXr16sXz5cou5DatWrWLq1Kn06dMHgEGDBvHJJ5/cnxsVQgghhBCihqsx\nPQk1lfQkiNpEPukStYk8r6I2kedV1Db3+g5bo+YkCCGEEEIIIR48CRKEEEIIIYQQFiRIEEIIIYQQ\nQliQIEEIIYQQQghhQYIEIYQQQgghhAUJEoQQQgghhBAWJEgQQgghhBBCWJAgQQghhBBCCGFBggQh\nhBBCCCGEBQkShBBCCCGEEBYkSBBCCCGEEEJYkCBBCCGEEEIIYUGCBCGEEEIIIYQFCRKEEEIIIYQQ\nFiRIEEIIIYQQQliQIEEIIYQQQghhQYIEIYQQQgghhAUJEoQQQgghhBAWJEgQQgghhBBCWKgxQcK8\nefPo0KEDzs7OeHl5MXDgQI4fP16m3Ouvv069evWwt7enR48enDhxwuK4Xq9n6tSpeHp64ujoyKBB\ng0hMTLQok5mZyciRI3FxccHFxYVRo0aRlZVVrfcnhBBCCCFEbVFjgoQdO3YwZcoU9uzZw/bt29Fq\ntfTq1YvMzExzmXfffZf58+ezcOFCYmNj8fLyIjIykry8PHOZadOmsWbNGr799lt27dpFdnY2/fv3\nR1VVc5lhw4Zx6NAhNm/ezKZNm4iLi2PUqFH39X6FEEIIIYSoqRT11rfnGiQvLw9nZ2fWrVvHk08+\nCUDdunV58cUXeeWVVwAoLCzEy8uLDz74gHHjxpGdnY2npyfLli0jKioKgISEBPz9/fnll1+IjIwk\nPj6eZs2aERMTQ2hoKAC7d++mS5cunDp1iqCgIIt23NrD4OzsfD9uXYg/LTY2FoD27ds/4JYIcWfy\nvIraRJ5XUdvc6ztsjelJ+KPs7GyMRiOurq4AXLhwgeTkZCIjI81lbG1t6dq1KzExMYDpB9hgMFiU\n8fPzIyQkxFxm7969ODk5mQMEgPDwcBwcHMxlhBBCCCGEeJRpH3QDKjJt2jTatm1LWFgYAMnJySiK\ngre3t0U5b29vkpKSAEhJSUGj0eDu7l6mTHJysrkeT0/PMtfz8vIyl6lI6acIQtR08qyK2kSeV1Gb\nyPMqapLCwkI0Gg06nQ6At956izFjxuDn51dmdMzdqpE9CTNmzCAmJoYffvgBRVEedHOEEEIIIYR4\n4H7//XdSUlLM2y+++CIHDx4EQFUhMd2e7fsyKzr9rtS4noTp06fz3Xff8euvv+Lv72/e7+Pjg6qq\npKSk4OfnZ96fkpKCj4+PuUxJSQnp6ekWvQkpKSl07drVXCY1NbXMda9du2aupyIyDlHUdDJmVtQm\n8ryK2kSeV3E/GI1GDAYD1tbWAHzwwQeENG+PR/2uHDkLH69Px7pOc0q0ddEXQ477Wv69TUvdk77E\nnYZMdSW6a8UsaG99zyt31qggYdq0aaxevZpff/21TBdJYGAgPj4+bNmyhXbt2gGmLpadO3fywQcf\nANCuXTu0Wi1btmyxmLgcHx9PeHg4AGFhYeTm5rJ3717zvISYmBjy8/Pp1KnT/bpVIYQQQgjxCCop\nMa0ZZGUFe/ef4HquLfbODUlKg8+/XIu7hxet24Vz/Dxs+30Umf9z5+YqQ09Azq211Sc1H05evbnn\nyHkdBsO9r0tUY4KEyZMns2LFCtatW4ezs7O5K8XR0REHBwcAXnrpJebNm0fTpk0JCgpi7ty5ODk5\nMWzYMADq1KnD2LFjmTVrFp6enri5uTFz5kxat25NREQEAMHBwfTu3ZsJEyawaNEiVFVl4sSJDBgw\n4J7HbgkhhBBCCHEro9HIxasKG2Jg6dpUjl92w2DUYK0DffFjfyj9FCTCj4dLtz3u6lruztAhBK7n\ngM09TiqoMUHCZ599hqIo5pf5UnPmzGH27NkAzJo1i8LCQqZMmUJGRgYdO3Zk8+bN5iACYMGCBeh0\nOqKioigoKKBXr14sX77cYm7DqlWrmDp1Kn369AFg0KBBfPLJJ/fhLoUQQgghxMPEaFTJzIVrGXDy\nbDrJ1zJo37oxCamwaOVR9p12J6Oo7o3SNxfP0RdXrn4rK2jaAFo2ghaNoHlD8PcBOxvIyoPMHCgq\nhmaBEOCL+Z33XvME19g8CTWF5EkQtYmMmRW1iTyvojaR51UAFOlVYo7CmQQoMcK67Zn8esgBfYnu\nT9VnZwO+7lDXA3w9wNsNrHWgsYJgf2jVGEICwM7m7hfyudd32BrTkyCEEEIIIURNYDCoXLkGJ84X\nsv/IVWydAtl1GLYdKKFQr7mlpEul6rO1hoj20D8cnuxkCgoK9aYgoaau5ClBghBCCCGEeORk5aoc\nPQdHzsHFq5CRA+cT9Bw+lUN2kTuGEgBbIPCWszTl1uVkD16upi8bHWTmgqsTtG4C3duYAgR7W8tg\nwN62uu6sakiQIIQQQgghHjo5eSpX0+FqOiSl3fgzVWX/sWwupzlzqdwcutaAe3kHzAJ9jXRpZYVW\nC35e8EwPaN6wZvYG3AsJEoQQQgghRK1TbFDZe8w0PyA1ExztTBN41/4Gh85AbkF5ZylA5cbn+7hD\no3rg7w0eLqa5AZGPQ8N65fcmPGwkSBBCCCGEEDVaQZHKtgMQdwpOXYIr1+DwWcjO+/N16rTwWAA0\nrldIqyY2eDgr5sCgYV1wsHv4egfuhgQJQgghhBCiRjAaVeIvwv54SMuClOtw8hL8ehDyyu0ZqJiN\ntWmCsNaYSuMGDjRqYI+vu2n50JaNTcuK6rQKYFcdt1LrVTpISEtLIyYmhhMnTpCWloaiKHh4eBAS\nEkKnTp3w8Li7ZA9CCCGEEOLRoaoqxQbT95eSTUOCEq6ZhgoV6uFCEuw6Aul3sb6/vw/YGQ4Q0tgd\nD+8ACgqhWYMMnn3CHn9fmxsrB3lVy/087G4bJOj1er7++muWLl3K7t27qSilgqIohIWF8dxzzzFi\nxAhsbGyqpbFCCCGEEKJ2SM1QWbcTtsbCnmOQkgFF+j9fX9MG0LsjlOQeJiTQlt7dmtKwHijKH3NX\nuN1Tu4VJhUHC559/zty5c0lLS+OJJ57go48+ol27djRs2BBXV1dUVSUjI4MLFy4QGxtLdHQ0kyZN\nYvbs2fzjH/9gwoQJ9/M+hBBCCCHEA5RfqPJNNPyyF84nmXoKjMa7r8fBpoBA9wR6dQnC1Qnc7a/T\npqlCaCvXGz0Drau87aKsCjMu169fnxkzZvDcc89VOktbVlYWX375JR999BGXL1+u0oY+KJJxWdQm\nkhFU1CbyvIra5FF8Xg0G0yuiRnMz4ZeqqsSdMg0Lysk3zRk4dh4SU01LjN5p3oBGA6qxBGurfLq2\ncyKoPhTmXKa4KJNu4S0JbWbKNFxTE4zVJtWWcfn8+fPodHeXYtrZ2ZkZM2YwderUuLine truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x89bf9e8>"
|
||||
"<matplotlib.figure.Figure at 0x8a807f0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -778,9 +760,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x9a9a278>"
|
||||
"<matplotlib.figure.Figure at 0x9ad6438>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -788,9 +770,9 @@
|
||||
},
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x9ae9898>"
|
||||
"<matplotlib.figure.Figure at 0x9b248d0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -848,7 +830,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"execution_count": 13,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -868,7 +850,7 @@
|
||||
"⎣╲╱ x + y ╲╱ x + y ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"execution_count": 13,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -922,7 +904,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"execution_count": 14,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -931,7 +913,7 @@
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8a57e10>"
|
||||
"<matplotlib.figure.Figure at 0x8a5ef98>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -993,13 +975,8 @@
|
||||
"$$\\bar{\\begin{bmatrix}x\\\\y\\\\\\theta\\end{bmatrix}} = \\begin{bmatrix}x\\\\y\\\\\\theta\\end{bmatrix} + \n",
|
||||
"\\begin{bmatrix}- R\\sin(\\theta) + R\\sin(\\theta + \\beta) \\\\\n",
|
||||
"R\\cos(\\theta) - R\\cos(\\theta + \\beta) \\\\\n",
|
||||
"\\beta\\end{bmatrix}$$"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"\\beta\\end{bmatrix}$$\n",
|
||||
"\n",
|
||||
"We find The $\\mathbf F$ by taking the Jacobian of $f(x,u)$.\n",
|
||||
"\n",
|
||||
"$$\\mathbf F = \\frac{\\partial f(x, u)}{\\partial x} =\\begin{bmatrix}\n",
|
||||
@@ -1028,7 +1005,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"execution_count": 15,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1055,7 +1032,7 @@
|
||||
"⎣0 0 1 ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"execution_count": 15,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1087,7 +1064,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 11,
|
||||
"execution_count": 16,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1105,7 +1082,7 @@
|
||||
"⎣0 0 1 ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 11,
|
||||
"execution_count": 16,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1140,7 +1117,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 12,
|
||||
"execution_count": 17,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1186,7 +1163,7 @@
|
||||
" ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 12,
|
||||
"execution_count": 17,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1251,7 +1228,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 13,
|
||||
"execution_count": 18,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
@@ -1274,7 +1251,7 @@
|
||||
"⎣ (pₓ - x) + (p_y - y) (pₓ - x) + (p_y - y) ⎦"
|
||||
]
|
||||
},
|
||||
"execution_count": 13,
|
||||
"execution_count": 18,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
@@ -1297,7 +1274,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 14,
|
||||
"execution_count": 19,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1331,7 +1308,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 15,
|
||||
"execution_count": 20,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1371,7 +1348,7 @@
|
||||
"source": [
|
||||
"### Implementation\n",
|
||||
"\n",
|
||||
"We will use `FilterPy`'s `ExtendedKalmanFilter` class to implement the filter. Its `predict()` method uses the standard linear equations for the process model. Our's is nonlinear, so we will have to override `predict()` with our own implementation. I'll want to also use this class to simulate the robot, so I'll add a method `move()` that computes the position of the robot which both `predict()` and my simulation can call.\n",
|
||||
"We will use `FilterPy`'s `ExtendedKalmanFilter` class to implement the filter. Its `predict()` method uses the standard linear equations for the process model. Ours is nonlinear, so we will have to override `predict()` with our own implementation. I'll want to also use this class to simulate the robot, so I'll add a method `move()` that computes the position of the robot which both `predict()` and my simulation can call.\n",
|
||||
"\n",
|
||||
"The matrices for the prediction step are quite large. While writing this code I made several errors before I finally got it working. I only found my errors by using SymPy's `evalf` function. `evalf` evaluates a SymPy `Matrix` with specific values for the variables. I decided to demonstrate this technique to you, and used `evalf` in the Kalman filter code. You'll need to understand a couple of points.\n",
|
||||
"\n",
|
||||
@@ -1390,7 +1367,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 16,
|
||||
"execution_count": 21,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1471,7 +1448,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 17,
|
||||
"execution_count": 22,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
@@ -1496,7 +1473,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 18,
|
||||
"execution_count": 23,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1573,7 +1550,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 19,
|
||||
"execution_count": 24,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": false
|
||||
@@ -1581,9 +1558,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0XlW9+P/3Oc88ZZ6bsW3SuaUTZW4Lgq0g5YIIKJcA\nov68KohyQb/aFhBRr4gKsq7eAWkVuXAVlKK9yNjWUqBpS8ekbdrM8/gkzzyc/fsjNBKStilJm6R8\nXmtlkbX3Oft8ztlJn082++ytKaUUQgghhBBCiI9MH+sAhBBCCCGEmOgkqRZCCCGEEGKEJKkWQggh\nhBBihCSpFkIIIYQQYoQkqRZCCCGEEGKEJKkWQgghhBBihCSpFkKIU7Rs2TJ0Xae2tnasQxlk06ZN\n6LrOgw8+ONahnJCu61x66aUDyu6//350XWfz5s1jFNVANTU16LrO7bffPtahCCEmAEmqhRDHpev6\nCb9MJtOABOhYQvfhZOmYv/3tb3g8Hux2O88888ywr/PYY499pHhNJhPJyclceOGF/PKXvyQWi43s\ngbxP0zQ0TRuVto7n1ltvHVcJ5plwJp7rBx1Lmo/38zoWMQkhJi7zWAcghBjfNE3j/vvv53j7RBUW\nFg6rnd/97nd84QtfwOl08uKLL7J8+fJhX+e88877SPHGYjFqamp4/vnn2bZtG6+99hovvPDCsNsa\nSx/HZO7rX/86N910E/n5+WMdCgCTJk2ivLycxMTEsQ5FCDEBSFIthDip1atXj+j8Rx55hPvuu4+s\nrCz++te/Mm/evNNyneO1s3r1aubPn8+LL77Ili1buPjii0flOqfTx3Gz25SUFFJSUs7Y9U72jM1m\nMyUlJWcoGiHERCfTP4QQp9U3v/lN7r33XkpKSti2bdtxE+rTaerUqSxduhSA7du3D3nM888/z/Ll\ny0lKSsLhcDBz5kzWrl2L3+8/bruGYfDII48wffp0HA4H+fn53HPPPfh8viGP3717N5/97GfJysrC\nZrORn5/PHXfcQXV19YDjioqKWL9+PfCP+dvHprOMRFVVFbfddht5eXnYbDaysrK44YYb2Lt373HP\nee6557j88stJS0vDbrdTWFjIZz/7WbZu3dp/TE9PDz/5yU+47LLL+tvOyMjg6quvZtu2bcOOb6g5\n1cuXLz/h1KDJkyd/pDjWrVvH5MmT0TSNN998c0Cbx+ajn2hOdWtrK3feeSdTpkzBbreTlpbGpz/9\nabZs2TLo2GPTom6//XZqamq48cYbSU9Px+FwsHjxYv7yl78M+xkJIcYvGakWQpwWsViM0tJSnnnm\nGZYsWcJLL71EamrqmMVzbFTSYrEMqluzZg0PPfQQqamp3HTTTSQlJfHKK6/w/e9/nw0bNrBlyxZc\nLteg8+666y62bt3KZz/7WRITE9m4cSOPPvooW7duZfPmzQOutXHjRq699loMw+Daa69lypQp7Nmz\nhyeffJIXXniBN954g7lz5wJw991385vf/IY9e/Zw66239k+xGcl0kJ07d3LZZZfR29vLlVdeyZw5\nczhy5AjPP/88GzZs4MUXX+QTn/jEgHNuvfVW1q9fT1paGtdccw2ZmZk0NDSwefNm/vjHP3LhhRcC\nUF5ezve+9z2WLl3KVVddRXJyMrW1tbz44ots3LiRDRs2sGLFipPGONSUl9tuu23QVCGAHTt2sGHD\nhgH9cipxzJ8/n2984xv8/Oc/p7CwkFtvvbW/nWXLlp0wztraWi688EIaGxtZunQpN954I01NTTz3\n3HNs3LiRJ598kltuuWXQedXV1Zx77rlMmTKFW265hc7OTp599lmuueYaXn311f4//IQQE5QSQojj\n0DRN6bqu7r///uN+fdCbb76pNE1TixcvVldccYXSNE1dddVVKhAIfOTr/OpXvzrleD/swIEDyuVy\nKV3X1c6dOwfUvf3220rTNJWfn6+am5sH1JWWlipd19XXv/71AeXLli1Tmqap9PR0VV9f319uGIa6\n5pprlK7r6kc/+lF/ud/vV2lpacpsNqtNmzYNaOvJJ59UmqapuXPnDii/9dZbla7rg44/mWN98MAD\nDwwonzlzptJ1Xf32t78dUP7aa68pXddVZmamCgaD/eW//vWvlaZp6txzz1Ver3fQdRobG/u/7+np\nUR0dHYOOaWhoUDk5OWrGjBmD6jRNU8uXLx9Qdv/99w/rno8ePaoyMzOVy+VS27dv/8hxVFdXDxnH\nh+tvu+22AeUrVqxQuq6r73//+wPK9+3bp5xOp3I4HKqhoaG//FifDHXOyy+/rDRNU1deeeUJ71kI\nMf5JUi2EOK5jicDxvkwm04DjP5g8aJqmSkpKVCwWG9F15s+ff8rxHkvIv/e976mbb75ZOZ1Opeu6\nuu+++wadc8cddyhd14dM3ltaWpTT6VQej2fAfSxbtkzpuq5+8IMfDDrn4MGDStd1VVJS0l/29NNP\n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 truncated
|
||||
"image/png": "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\ne/XAAw/w4x//mPPPP59Vq1Yds34cyTOeN28eMJhmMlr60/PPPw8MH0shxAeDBNVCiOMqOzubF154\nYWjG+LLLLjvs2s/Hy2233UZ+fj4PP/wwDQ0NQ+U33ngjSim++93vDs0wH3LnnXcSi8W4/vrrR6Su\nKKX46U9/SktLy1CZaZrceeedQ+0esmzZMvLy8vjjH/84Irh7+OGH2bJlC7Nnz+ass84aKj+0/GBz\nc/NR3jmcc845zJgxg1dffZVHH3102LEXX3yRp556ioKCAq644oqh8ltvvRWlFLfccstQysPbHZqR\nhcFdNfft2zdi9nbFihXU19cfVd+ffvppbrvtNqZPn87TTz+N3W4f89z32o+cnBw0TRs2hu+mrKyM\nj3zkI7S2to6YMd+5cyc///nPcTqdXHvtteNuUwjx/iDpH0KId/Wtb31rzGOXXnrpsGBwNF6vl2ef\nfZYrrriC5557jksuuYS1a9eOmm5xvHi9Xr761a9yxx13cNddd/HYY48Bg1ugf+1rX+N73/ses2fP\n5qqrrsLv9/Pcc8+xdetWTjvtNL773e+OaE/TNM455xxOP/30YetU79ixg7POOosvf/nLQ+e63W4e\nfvhhPvGJT3DRRRdx5ZVXMmnSJOrq6njmmWfIzc0d2uzlkIsvvpgf/vCHfPWrX2XHjh3k5OQA8I1v\nfOOI7n/VqlVcfPHFLF++nCeeeII5c+bQ0NDAk08+icPh4JFHHsHpdA6df9NNN7Fx40YeeeQRpkyZ\nwrJlyygsLKSjo4N169ZxxRVX8KMf/QgY/IXllltu4fTTT+fKK6/EZrOxceNG6uvrufzyy1mzZs0R\n9Rng05/+NEopzjzzTO6///4Rx7Ozs/niF794RP3weDx86EMfYtOmTVx++eXMnz8fm83GBRdccNhd\nN3/+859z3nnncffdd/Piiy9y9tln097ezh/+8AeSySS//OUvx52PLoR4HxnPEiHr169Xl19+uSor\nK1OapqlVq1YNOx6JRNR//dd/qfLycuVyudS0adPUj3/842O2RIkQ4uQ43HJ6h75++tOfDp3/8ssv\nK13X1YUXXjhqe6lUSl1xxRVK13W1cOHCoTWFNU0bsTzfkXi3duLxuCorK1NWq1Vt27Zt2LE//vGP\navHixcrv9yun06lmzJih7r77bhWJREa0s3jxYmWxWNTBgwfVypUr1fTp05XT6VQVFLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa9fb2b0>"
|
||||
"<matplotlib.figure.Figure at 0xa91dba8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1593,7 +1570,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.0243 0.0411 0.00221]\n"
|
||||
"Final P: [ 0.0245 0.0406 0.00216]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1621,16 +1598,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 20,
|
||||
"execution_count": 25,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeUHtV9+P/3zDy97LO9d/UK6nRJNCObCP2MMdjhSOAS\nDoljG+ODndggTLDjxIoLtvN1vo4xwrH5Qgw4kmPFVJUIYbOSWPXtTdvrs09vc39/rLWw3pVY1Bd9\nXufsYc+dmTufmavd57PDZ+7VlFIKIYQQQgghxGnTL3QAQgghhBBCTHWSVAshhBBCCHGGJKkWQggh\nhBDiDElSLYQQQgghxBmSpFoIIYQQQogzJEm1EEIIIYQQZ0iSaiGEeJ9WrVqFruu0trZe6FDG2bFj\nB7qu89hjj13oUE5J13Wuv/76MW2PPvoouq6zc+fOCxTVWC0tLei6zqc+9akLHYoQYgqQpFoIcVK6\nrp/yyzCMMQnQiYTuz5OlE1566SW8Xi8Oh4Nnnnlm0ud54oknTitewzDIyMjg6quv5kc/+hHJZPLM\nbsifaJqGpmlnpa+Tueeeey6qBPN8OB/39d1OJM0n+/d6IWISQkxdlgsdgBDi4qZpGo8++ignWyeq\nvLx8Uv38x3/8B5/+9KdxuVxs2bKF1atXT/o8V1xxxWnFm0wmaWlp4YUXXmDPnj28+uqrvPjii5Pu\n60K6FJO5v/3bv+UTn/gEpaWlFzoUAIqKijh69Cg+n+9ChyKEmAIkqRZCvKeHH374jI7ftGkTX/nK\nV8jPz+d3v/sdl1122Tk5z8n6efjhh1m0aBFbtmxh165dXHvttWflPOfSpbjYbWZmJpmZmeftfO91\njy0WCzNnzjxP0Qghpjop/xBCnFNf+tKXeOihh5g5cyZ79uw5aUJ9Lk2fPp2VK1cC8NZbb024zwsv\nvMDq1atJT0/H6XQyd+5cNm7cSCgUOmm/pmmyadMmZs+ejdPppLS0lC9/+csEg8EJ96+urubjH/84\n+fn52O12SktL+cxnPkNzc/OY/SoqKnj66aeBd+q3T5SznImmpibuvfdeSkpKsNvt5Ofnc+edd3Lw\n4MGTHvPcc89x0003kZ2djcPhoLy8nI9//OPs3r17dJ/h4WG+853vcMMNN4z2nZuby9q1a9mzZ8+k\n45uopnr16tWnLA2qrKw8rTg2b95MZWUlmqaxffv2MX2eqEc/VU11T08Pn//855k2bRoOh4Ps7Gz+\n4i/+gl27do3b90RZ1Kc+9SlaWlq46667yMnJwel0smzZMv77v/970vdICHHxkifVQohzIplMsmHD\nBp555hlWrFjBb3/7W7Kysi5YPCeeSlqt1nHbHnnkER5//HGysrL4xCc+QXp6Oi+//DL/8A//wNat\nW9m1axdut3vccV/4whfYvXs3H//4x/H5fGzbto3vfve77N69m507d44517Zt2/joRz+KaZp89KMf\nZdq0aRw4cIAnn3ySF198kddff52FCxcC8MADD/Dzn/+cAwcOcM8994yW2JxJOci+ffu44YYbCAQC\nfOQjH2HBggU0NDTwwgsvsHXrVrZs2cKNN9445ph77rmHp59+muzsbNatW0deXh7t7e3s3LmT559/\nnquvvhqAo0eP8vWvf52VK1dy6623kpGRQWtrK1u2bGHbtm1s3bqVW2655T1jnKjk5d577x1XKgSw\nd+9etm7dOmZc3k8cixYt4otf/CLf//73KS8v55577hntZ9WqVaeMs7W1lauvvpqOjg5WrlzJXXfd\nRWdnJ8899xzbtm3jySefZP369eOOa25uZvny5UybNo3169czMDDAs88+y7p163jllVdG//ATQkxR\nSgghTkLTNKXrunr00UdP+vVu27dvV5qmqWXLlqmbb75ZaZqmbr31VhUOh0/7PD/5yU/ed7x/7siR\nI8rtditd19W+ffvGbHvzzTeVpmmqtLRUdXV1jdm2YcMGpeu6+tu//dsx7atWrVKapqmcnBx1/Pjx\n0XbTNNW6deuUruvq29/+9mh7KBRS2dnZymKxqB07dozp68knn1SapqmFCxeOab/nnnuUruvj9n8v\nJ8bgG9/4xpj2uXPnKl3X1S9+8Ysx7a+++qrSdV3l5eWpSCQy2v5v//ZvStM0tXz5cuX3+8edp6Oj\nY/T74eFh1d/fP26f9vZ2VVhYqObMmTNum6ZpavXq1WPaHn300Uldc2Njo8rLy1Nut1u99dZbpx1H\nc3PzhHH8+fZ77713TPstt9yidF1X//AP/zCm/dChQ8rlcimn06na29tH20+MyUTH/P73v1eapqmP\nfOQjp7xmIcTFT5JqIcRJnUgETvZlGMaY/d+dPGiapmbOnKmSyeQZnWfRokXvO94TCfnXv/51dffd\ndyuXy6V0XVdf+cpXxh3zmc98Rum6PmHy3t3drVwul/J6vWOuY9WqVUrXdfXNb35z3DE1NTVK13U1\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0x8a57e10>"
|
||||
"<matplotlib.figure.Figure at 0x9b77a90>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1640,7 +1617,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.0207 0.0198 0.00153]\n"
|
||||
"Final P: [ 0.0203 0.02 0.00152]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1663,7 +1640,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 21,
|
||||
"execution_count": 26,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1671,9 +1648,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "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\nEOLqIEG1EKJdeXt78+233zbuGI8bN+6cdz+3l6eeegp/f3+WLl1Kenp6Y/p9992Hpmm88sorjTvM\nZ8ydO5fa2lpmz57d7OiKpmm88847nDp1qjHN4XAwd+7cxnbPmDhxIn5+fnz++efNgrulS5eyd+9e\nevXqxdChQxvTz1w/mJWV1caZw3XXXUdcXBy7d+9mxYoVTfK2bNnC2rVrCQgIYMKECY3pc+bMQdM0\nHnnkkcYjD790ZkcWTr9V89ixY812b+Pj40lJSWnT2L/44gueeuopunfvzhdffIGrq+tZy17oOHx8\nfFAUpckank9YWBi33HIL2dnZzXbMDx8+zIcffojRaOSee+5pdZtCiF8HOf4hhDivl1566ax5t956\na5NgsCXu7u5s2LCBCRMmsGnTJsaMGcP69etbPG7RXtzd3Xnuued49tlnmT9/PqtWrQJOvwL997//\nPa+99hq9evViypQpeHl5sWnTJvbt20ffvn155ZVXmrWnKArXXXcd/fr1a3JP9U8//cTQoUN5+umn\nG8uazWaWLl3KnXfeyc0338zkyZPp1KkTycnJ/Oc//8HX17fxZS9njB49mjfffJPnnnuOn376CR8f\nHwCef/75i5r/smXLGD16NLNmzWL16tX07t2b9PR01qxZg8FgYPny5RiNxsbyDzzwADt37mT58uV0\n7tyZiRMnEhgYSF5eHtu2bWPChAm89dZbwOkfWB555BH69evH5MmTcXFxYefOnaSkpDB+/HgSEhIu\naswAd999N5qmMWTIEJYsWdIs39vbmyeeeOKixuHm5sa1115LYmIi48ePZ8CAAbi4uHDjjTee862b\nH374IcOGDWPBggVs2bKFa665htzcXP71r39RX1/PX//611afRxdC/Iq05oqQ7du3a+PHj9fCwsI0\nRVG0ZcuWNcmvrq7WHnvsMS08PFwzmUxat27dtLfffttpV5QIIS6Pc12nd+brnXfeaSy/detWTVVV\nbdSoUS2219DQoE2YMEFTVVUbNGhQ453CiqI0u57vYpyvnbq6Oi0sLEzT6/XagQMHmuR9/vnn2ogR\nIzQvLy/NaDRqcXFx2oIFC7Tq6upm7YwYMULT6XTaiRMntMWLF2vdu3fXjEajFhERoT377LMt1tE0\nTdu/f782ZcoULSgoSHN1ddXCw8O1+++/Xztx4kSL5d99912tV69emslkavEKw5acWLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xaddd0f0>"
|
||||
"<matplotlib.figure.Figure at 0x8a5e470>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1683,7 +1660,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.0199 0.0446 0.000224]\n"
|
||||
"Final P: [ 0.0203 0.0457 0.000225]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1703,7 +1680,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 22,
|
||||
"execution_count": 27,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": false
|
||||
@@ -1711,9 +1688,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4VNX9+PH3nX3LTPbJRkLYV5FdwAVUrFQUxKrYuoBb\n67dWxfqz7bdVcKmt39ZatT61tVJBlIoKFlRQVBAEVDbZFQIhIdtkny0zmczM/f0RMxiTSQJhUfm8\nnmce9dx7zj13Zp7kk+Pnfo6iqqqKEEIIIYQQ4rhpTvcEhBBCCCGE+K6ToFoIIYQQQohukqBaCCGE\nEEKIbpKgWgghhBBCiG6SoFoIIYQQQohukqBaCCGEEEKIbpKgWgghjtHEiRPRaDQUFxef7qm08dFH\nH6HRaHj44YdP91Q6pNFouPDCC1u1zZs3D41Gw7p1607TrForKipCo9Fw8803n+6pCCG+AySoFkLE\npdFoOnxptdpWAVBLQPfNYKnFe++9R0JCAiaTicWLF3f5Ok8//fRxzVer1ZKUlMSECRP429/+Rjgc\n7t4b8hVFUVAU5YSMFc+sWbO+VQHmqXAq3tevawma431fT8echBDfXbrTPQEhxLeboijMmzePePtE\n9ezZs0vjLFq0iFtuuQWLxcLy5cuZNGlSl69zzjnnHNd8w+EwRUVFLF26lE2bNvHBBx+wbNmyLo91\nOp2JwdwvfvELrrvuOnJzc0/3VADIzs5m3759OByO0z0VIcR3gATVQohOPfDAA93q/+c//5lf/epX\nZGRk8M477zBs2LCTcp144zzwwAMMHz6c5cuXs379es4777wTcp2T6Uzc7DY5OZnk5ORTdr3O3mOd\nTke/fv1O0WyEEN91kv4hhDip7r33Xu6//3769evHpk2b4gbUJ1OfPn244IILANi8eXO75yxdupRJ\nkyaRmJiI2Wxm0KBBzJ07F7/fH3fcaDTKn//8ZwYMGIDZbCY3N5f77rsPn8/X7vk7duzgmmuuISMj\nA6PRSG5uLrfeeiuHDx9udV5+fj4LFy4EjuZvt6SzdEdhYSGzZ8+mR48eGI1GMjIyuPbaa9m1a1fc\nPkuWLGHy5MmkpqZiMpno2bMn11xzDRs2bIid4/F4+NOf/sRFF10UGzs9PZ0rrriCTZs2dXl+7eVU\nT5o0qcPUoF69eh3XPBYsWECvXr1QFIW1a9e2GrMlH72jnOrKykruuusuevfujclkIjU1lcsvv5z1\n69e3ObclLermm2+mqKiImTNnkpaWhtlsZvTo0bz99ttdfo+EEN9eslIthDgpwuEwN910E4sXL2bs\n2LG89dZbpKSknLb5tKxK6vX6NscefPBBHn30UVJSUrjuuutITExk9erVPPLII6xYsYL169djtVrb\n9Lv77rvZsGED11xzDQ6Hg5UrV/KXv/yFDRs2sG7dulbXWrlyJTNmzCAajTJjxgx69+7Nzp07mT9/\nPsuWLWPNmjWcddZZAMyZM4d///vf7Ny5k1mzZsVSbLqTDrJt2zYuuugivF4vl112GUOHDuXgwYMs\nXbqUFStWsHz5ci6++OJWfWbNmsXChQtJTU1l+vTpOJ1OSktLWbduHW+88QYTJkwAYN++ffzud7/j\nggsuYOrUqSQlJVFcXMzy5ctZuXIlK1as4NJLL+10ju2lvMyePbtNqhDA1q1bWbFiRavP5VjmMXz4\ncO655x7++te/0rNnT2bNmhUbZ+LEiR3Os7i4mAkTJlBWVsYFF1zAzJkzKS8vZ8mSJaxcuZL58+dz\n4403tul3+PBhxowZQ+/evbnxxhupra3l1VdfZfr06bz//vuxP/yEEN9RqhBCxKEoiqrRaNR58+bF\nfX3d2rVrVUVR1NGjR6uXXHKJqiiKOnXqVLWhoeG4r/Pcc88d83y/ae/evarValU1Go26bdu2Vsc+\n+eQTVVEUNTc3V62oqGh17KabblI1Go36i1/8olX7xIkTVUVR1LS0NLWkpCTWHo1G1enTp6sajUb9\n4x//GGv3+/1qamqqqtPp1I8++qjVWPPnz1cVRVHPOuusVu2zZs1SNRpNm/M70/IZPPTQQ63aBw0a\npGo0GvWll15q1f7BBx+oGo1GdTqdaiAQiLX/4x//UBVFUceMGaO63e421ykrK4v9u8fjUWtqatqc\nU1paqmZlZakDBw5sc0xRFHXSpEmt2ubNm9elez506JDqdDpVq9Wqbt68+bjncfjw4Xbn8c3js2fP\nbtV+6aWXqhqNRn3kkUdate/evVu1WCyq2WxWS0tLY+0tn0l7fd59911VURT1sssu6/CehRDffhJU\nCyHiagkE4r20Wm2r878ePCiKovbr108Nh8Pdus7w4cOPeb4tAfnvfvc79frrr1ctFouq0WjUX/3q\nV2363HrrrapGo2k3eHe5XKrFYlETEhJa3cfEiRNVjUaj/v73v2/T58svv1Q1Go3ar1+/WNvLL7+s\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xae01e48>"
|
||||
"<matplotlib.figure.Figure at 0xa9fa710>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1723,7 +1700,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.29 0.85 0.00375]\n"
|
||||
"Final P: [ 0.247 0.828 0.00358]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1743,7 +1720,7 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 23,
|
||||
"execution_count": 28,
|
||||
"metadata": {
|
||||
"collapsed": false,
|
||||
"scrolled": true
|
||||
@@ -1751,9 +1728,9 @@
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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\nUsNOMXe+fvSjH/HDH/6QG2+8kbVr145ZHRfSx3PmzAFODDMZbvjTm2++CZz+WQohrg4SqoUQ48rr\n9fLWW28NPjG+4447zjr383j5/Oc/T2ZmJs8++yxHjx4d3P7QQw+hlOJb3/rW4BPmkx555BFCoRAP\nPPDAkKErSimeeuopGhsbB7cZhsEjjzwyeN6TVq5cSUZGBr/+9a+HhLtnn32WHTt2MH36dBYuXDi4\n/eT0gw0NDaO8c1i0aBFVVVW8//77/PznPz9t35///GdeeeUVsrKyuOuuuwa3f+Yzn0EpxcMPPzw4\n5OFUJ5/IwolVNWtqaoY8vX3ssceorq4eVe2//e1v+fznP8+UKVP47W9/i9VqPWPb860jLS0NTdNO\n+wzPJT8/nw984AM0NTUNeWJ+4MABfvKTn2C32/noRz864nMKIa4MMvxDCHFOjz/++Bn33XbbbaeF\nweG43W7+9Kc/cdddd/HGG29w6623sn79+mGHW4wXt9vNV77yFb70pS/x6KOP8sILLwAnlkD/6le/\nyne+8x2mT5/Ohz70ITweD2+88QY7d+5k1qxZfOtb3xpyPk3TWLRoEbNnzz5tnup9+/axcOFCvvCF\nLwy2dTqdPPvss/zTP/0Tt9xyC/fccw+TJk1iz549vPbaa6Snpw8u9nLS8uXL+d73vsdXvvIV9u3b\nR1paGgBf+9rXLuj+165dy/Lly1m1ahUvvvgiM2bM4OjRo7z88svYbDaee+457Hb7YPuPf/zjbN68\nmeeee47JkyezcuVKsrOzaW1t5Z133uGuu+7iBz/4AXDiLywPP/wws2fP5p577sFisbB582aqq6u5\n8847Wbdu3QXVDPDP//zPKKW45pprePrpp4fs93q9fPazn72gOlwuF9dddx1bt27lzjvvZO7cuVgs\nFm666aazrrr5k5/8hBtuuIHVq1fz5z//mWuvvZaWlhZeeuklotEo//M//zPi8ehCiCvIxEw6IoS4\nHJxtOr2TX0899dRg+w0bNihd19XNN9887PlisZi66667lK7rav78+YNzCmuaNmR6vgtxrvOEw2GV\nn5+vzGaz2r1792n7fv3rX6slS5Yoj8ej7Ha7qqqqUqtXr1bBYHDIeZYsWaJMJpOqra1V3//+99WU\nKVOU3W5XhYWF6ktf+tKwxyil1K5du9SHPvQh5fP5lNVqVQUFBepjH/uYqq2tHbb9jLine truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAtUAAADnCAYAAADRnqrkAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl0VfW9///n3mc+Jycn8zxDQhLmGVGZFJWrV7lybfV+\n+xO17eryd1tbW5dtbyuotdNqb3u1d/B+7/15BW1ttVWrbWnFAaGAIoOMgUDIPJzMJ2ee9v79kUtK\nmgDBJITA+7FWVuke3/tzso4vNu/92Yqu6zpCCCGEEEKIT0yd6AKEEEIIIYSY7CRUCyGEEEIIMUoS\nqoUQQgghhBglCdVCCCGEEEKMkoRqIYQQQgghRklCtRBCCCGEEKMkoVoIIS7SihUrUFWVhoaGiS5l\niPfffx9VVXnyyScnupTzUlWVVatWDVr2+OOPo6oq27dvn6CqBquvr0dVVR544IGJLkUIMQlIqBZC\nnJOqquf9MRgMgwLQmUD312HpjLfeegun04nVauWll14a8XmeeeaZT1SvwWAgOTmZa6+9ln/9138l\nFouNbkD+l6IoKIoyJsc6l/vuu++yCpiXwqUY17OdCc3n+n2diJqEEJOXcaILEEJc3hRF4fHHH+dc\n74kqKioa0XFefPFFPvvZz2K323njjTdYuXLliM+zZMmST1RvLBajvr6eV199ld27d/POO+/w2muv\njfhYE+lqDHNf+tKXuOeeeygoKJjoUgDIzc2lqqoKl8s10aUIISYBCdVCiAt67LHHRrX/j3/8Y77+\n9a+TlZXFH/7wB2bPnj0u5znXcR577DHmzp3LG2+8wY4dO7j++uvH5Dzj6Wp82W1KSgopKSmX7HwX\nGmOj0UhZWdklqkYIMdlJ+4cQYlx99atf5dFHH6WsrIzdu3efM1CPp6lTp7J8+XIAPvroo2G3efXV\nV1m5ciVJSUnYbDYqKyvZuHEjfr//nMfVNI0f//jHlJeXY7PZKCgo4JFHHsHn8w27/cGDB/nUpz5F\nVlYWFouFgoICPve5z1FXVzdou+LiYjZv3gz8pX/7TDvLaNTW1nL//feTn5+PxWIhKyuLT3/60xw+\nfPic+7z88susXr2atLQ0rFYrRUVFfOpTn2Lnzp0D2/T19fGjH/2IG264YeDYGRkZ3H777ezevXvE\n9Q3XU71y5crztgaVlJR8ojo2bdpESUkJiqKwbdu2Qcc8049+vp7q9vZ2HnroIaZMmYLVaiUtLY2/\n/du/ZceOHUO2PdMW9cADD1BfX8/dd99Neno6NpuNhQsX8vvf/37EYySEuHzJnWohxLiIxWKsX7+e\nl156icWLF/O73/2O1NTUCavnzF1Jk8k0ZN2GDRt46qmnSE1N5Z577iEpKYmtW7fyne98hzfffJMd\nO3bgcDiG7PflL3+ZnTt38qlPfQqXy8WWLVv4yU9+ws6dO9m+ffugc23ZsoU777wTTdO48847mTJl\nCocOHeK5557jtdde47333mPWrFkAPPzww/zP//wPhw4d4r777htosRlNO8j+/fu54YYb8Hq93Hrr\nrcycOZOamhpeffVV3nzzTd544w1uvPHGQfvcd999bN68mbS0NNauXUtmZibNzc1s376d3/zmN1x7\n7bUAVFVV8e1vf5vly5dz2223kZycTENDA2+88QZbtmzhzTff5JZbbrlgjcO1vNx///1DWoUA9u3b\nx5tvvjnoc7mYOubOnctXvvIV/uVf/oWioiLuu+++geOsWLHivHU2NDRw7bXX0tLSwvLly7n77rtp\nbW3l5ZdfZsuWLTz33HPce++9Q/arq6tj0aJFTJkyhXvvvZfu7m5+9atfsXbtWt5+++2Bv/gJISYp\nXQghzkFRFF1VVf3xxx8/58/Ztm3bpiuKoi9cuFC/6aabdEVR9Ntuu00PBAKf+DzPPvvsRdf7144d\nO6Y7HA5dVVV9//79g9Z98MEHuqIoekFBgd7W1jZo3fr163VVVfUvfelLg5avWLFCVxRFT09P15ua\nmgaWa5qmr127VldVVf/BD34wsNzv9+tpaWm60WjU33///UHHeu6553RFUfRZs2YNWn7ffffpqqoO\n2f5CznwGTzzxxKDllZWVuqqq+gsvvDBo+TvvvKOrqqpnZmbqwWBwYPl//ud/6oqi6IsWLdI9Hs+Q\n87S0tAz8ua+vT+/q6hqyTXNzs56Tk6NXVFQMWacoir5y5cpByx5//PERXfPp06f1zMxM3eFw6B99\n9NEnrqOurm7YOv56/f333z9o+S233KKrqqp/5zvfGbT8yJEjut1u1202m97c3Dyw/MxnMtw+f/rT\nn3RFUfRbb731vNcshLj8SagWQpzTmSBwrh+DwTBo+7PDg6IoellZmR6LxUZ1nrlz5150vWcC+be/\n/W39M5/5jG6323VVVfWvf/3rQ/b53Oc+p6uqOmx4d7vdut1u151O56DrWLFiha6qqv7d7353yD4n\n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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xa9a7dd8>"
|
||||
"<matplotlib.figure.Figure at 0xaa3dcf8>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1763,7 +1740,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"Final P: [ 0.00838 0.00886 0.000762]\n"
|
||||
"Final P: [ 0.0085 0.00873 0.000763]\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -1783,7 +1760,7 @@
|
||||
"source": [
|
||||
"### Discussion\n",
|
||||
"\n",
|
||||
"I said that this was a real problem, and in some ways it is. I've seen alternative presentations that used robot motion models that led to simpler Jacobians. On the other hand, my model of the movement is also simplistic in several ways. First, it uses a bicycle model. A real car has two sets of tires, and each travels on a different radius. The wheels do not grip the surface perfectly. I also assumed that the robot responds instantaneously to the control input. Sebastian Thrun writes in *Probabilistic Robots* that simplified models are justified because the filters perform well when used to track real vehicles. The lesson here is that while you have to have a reasonably accurate nonlinear model, it does not need to be perfect to operate well. As a designer you will need to balance the fidelity of your model with the difficulty of the math and the CPU time required to perform the linear algebra. \n",
|
||||
"I said that this was a real problem, and in some ways it is. I've seen alternative presentations that used robot motion models that led to simpler Jacobians. On the other hand, my model of the movement is also simplistic in several ways. First, it uses a bicycle model. A real car has two sets of tires, and each travels on a different radius. The wheels do not grip the surface perfectly. I also assumed that the robot responds instantaneously to the control input. Sebastian Thrun writes in *Probabilistic Robots* that this simplified model is justified because the filters perform well when used to track real vehicles. The lesson here is that while you have to have a reasonably accurate nonlinear model, it does not need to be perfect to operate well. As a designer you will need to balance the fidelity of your model with the difficulty of the math and the CPU time required to perform the linear algebra. \n",
|
||||
"\n",
|
||||
"Another way in which this problem was simplistic is that we assumed that we knew the correspondance between the landmarks and measurements. But suppose we are using radar - how would we know that a specific signal return corresponded to a specific building in the local scene? This question hints at SLAM algorithms - simultaneous localization and mapping. SLAM is not the point of this book, so I will not elaborate on this topic. "
|
||||
]
|
||||
@@ -1808,16 +1785,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 24,
|
||||
"execution_count": 29,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "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 truncated
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuIAAADaCAYAAADjVSfWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xlc1NX+x/HXDDuiuKC4oOSuiTuYipVZYmhpZppaapIZ\n7WY/u3mrq9bVvF3L0hTr3lzLpV1zDb2lmVq4p5ktbpmAIooo2wDz++ObUyMgIzAMy/v5eHwfzpzv\nOd/vZ/wC85kz53uOyWq1WhERERERkVJldnUAIiIiIiKVkRJxEREREREXUCIuIiIiIuICSsRFRERE\nRFxAibiIiIiIiAsoERcRERERcQEl4iIiIiIiLuBwIj537lyaNGmCj48PoaGhbN26tdA2b7zxBq1b\nt8bb25sGDRrw97//vVjBioiIiIhUFO6OVFqxYgXjxo1j3rx5hIeHM2fOHCIjIzl06BBBQUH5thk/\nfjxr165lxowZhISEkJKSQnx8fIkGLyIiIiJSXpkcWVmza9eudOjQgXnz5tnKWrRoweDBg5k6dWqe\n+ocPH6Zt27YcOHCAFi1alGzEIiIiIiIVQKFDUywWC7t27aJ379525REREWzbti3fNqtWraJp06as\nXbuWpk2b0rhxYx544AHOnDlTMlGLiIiIiJRzhSbiSUlJ5OTkEBgYaFceGBhIQkJCvm2OHDnCsWPH\nWLFiBYsXL+a9997jxx9/pH///iUTtYiIiIhIOefQGPFrlZubS1ZWFu+99x5NmzYFYMmSJbRs2ZK4\nuDjCwsJsdVNSUpwRgoiIiIhIqfD39y9Su0J7xAMCAnBzcyMxMdGuPDExkbp16+bbpl69eri7u9uS\ncIDmzZvj5ubGiRMnihSoiIiIiEhFUmgi7uHhQefOnYmNjbUrj42NJTw8PN824eHhZGdnc/ToUVvZ\nr7/+Sk5ODsHBwcUMWURERESk/HNo1pQPPviAkSNHMmfOHMLDw4mJiWHBggX88MMPBAUFMXHiROLi\n4ti4cSMAVquVLl264Ofnx8yZM7FarTz99NNYLBa++eYbu2P/dWhKUbv1pWTs3LkTgNDQUBdHUrlV\n9utgmmICwDqp0D9NTlfZr0VZoetQduhalA26DmVDSeSwDo0RHzJkCMnJyUydOpX4+HhCQkJYt26d\nbQ7xhIQEu95vk8nE6tWrefLJJ7n55pvx8fEhIiKC1157rUhBioiIiIhUNA7frBkdHU10dHS++xYs\nWJCnLDAwkBUrVhQ9MhERERGRCszhJe5FRK6FyWRsIiIikj8l4iIiIiIiLqBEXERERETEBZyyoI+I\niIhIcVmtVrKysnBggrdK5fJU0BkZGS6OpGLz9PTEbHZun7UScRERESlzcnNzyczMxNPTEzc3N1eH\nU6Z4e3u7OoQKz2q1kpGRgZeXl1OTcQ1NERERkTInKysLb29vJeHiEiaTCW9vb7Kyspx6HvWIi1Qw\nv1/4HYBF+xbxw5kf8PXwBaB5zeZMCJ9QanHom2QRKS6Tpl4SFyqNnz8l4iIVTPAbweRYc/KU3xR8\nU6km4iIiInJ1GpoiUkHV86sHQP2q9V0ciYiIiORHPeIiFcCOkzt4e9fbALbe8BNPn8Dd7M7mY5vp\nuainC6MTERGR/CgRF6kAjpw7wsK9CwutN37DeM6mn7U9H9hqIHe1usuJkYmIiJSO48eP07hxYxYu\nXMjIkSNdHY5DNDRFpALp0qAL8/vPZ37/+ZhN9r/eexP2MnPHTBbvW2zb9ifud1GkIiKV16JFizCb\nzZjNZr755pt86zRr1gyz2UyvXr2cGsv27duZMmUKFy5ccMrxLRYLb731Fj169KBGjRp4eXnRpEkT\nHnzwQXbv3u2Uc5YnSsRFKpCmNZoyuuNoRnccnScRv5D55x/Z9oHtnR6LyWRsIiKSPx8fH5YuXZqn\n/Ntvv+XIkSP4+Pg4PYZt27bx0ksvcf78+RI/9rlz5+jRowdPPfUU/v7+TJ48mXnz5nH//fezbds2\nunTpwqlTp0r8vOWJhqaIlGPTt05nf+J+jp0/VmCd9nXbs/mBzXZlq39azb7Efew8tZN3dr1DNa9q\nDA0Z6uRoRUTkr/r27cuHH37IrFmz7OZLX7p0Ka1bty6VOdSduWrpqFGj2LVrFytWrOCee+6x2zdl\nyhRef/31EjmPxWIpt/PNq0dcpBz76thXLDuwjO0ntxdYp7p3dW4Kvslu83Y3VmX7/KfPeXj1w7zw\nvxdKK2QREcGYo3rYsGEkJyezYcMGW3lubi4rVqxg+PDh+SbJ6enpTJgwgeDgYLy9vWnRogX/+te/\n8tQ1m808+uijrFy5krZt2+Lt7U1ISIjduaZMmcKzzz4LwHXXXYfZbMbNzY0tW7bY6nzxxRf07NmT\nqlWrUrVqVSIjI9m3b1+hry8uLo7Vq1fz4IMP5knCL7/+Z555hvr1jZm9Tpw4wWOPPcb1119PlSpV\nqFGjBnfeeScHDhywa7d582bMZjNLly5l8uTJBAcH4+vry8mTJwuMZf/+/fTt2xd/f3/8/Py45ZZb\n2Lp1a6GvoTSoR1ykAni2+7O0r9ueYP9gh+p3rteZhzo9REpmCh8c/MDJ0YmISH6CgoLo0aMHS5cu\npW/fvgDExsZy5swZhg8fzvLly/O0GTBgAJs2beLBBx+kU6dObNq0iYkTJ3L8+HHmzp1rV3fbtm18\n/vnnPPLII1StWpVZs2Zxzz33cOLECWrUqMGgQYP46aefWL58OW+++Sa1atUCoHXr1oDRMz9ixAgi\nIiKYPn06mZmZvPPOO9x0003ExcXRokWLAl/bqlWrMJlMjBgxwqH/i7i4OLZu3crgwYNp1KgRp06d\n4u2336Znz54cPHiQwMBAu/rTpk3Dzc2NcePGYbVa8fPzIzU1Nc9xf/zxR3r06EHVqlX529/+hpeX\nF//5z3+47bbb2LhxIz169HAoPqexutj58+dtm7hWXFycNS4uztVhVHrXch36LOljZTLWdT+vK9K5\nfj77s5XJWOvOqGv9/PDn1s8Pf249m3a2SMe6krG2ZhHaTcbKZJf/abJarfqdKCt0HcqO0rwW6enp\npXIeV1i4cKHVbDZbv/32W+vbb79t9fPzs6alpVmtVqt1xIgR1m7dulmtVqs1JCTEesstt9jarVy5\n0moymawvv/yy3fFGjx5tNZvN1oMHD9rKTCaT1cvLy3rkyBFb2f79+60mk8k6Z84cW9mMGTOsZrPZ\nevz4cbtjXrp0yVqzZk3rmDFj7MrPnz9vrVOnjvW+++676mu8++67rWaz2ZqSkuLIf4k1IyMjT9nR\no0et3t7e1qlTp9rKvvrqK6vJZLIGBwfn+Rk5duyY1WQyWRctWmQrGzhwoNXLy8v666+/2sqSkpKs\nAQEB1rCwsELjutrPYUnksOoRFxESLiZw57I7AXgu/Dm6N+xOI/9GtK/r/Js6RURKgmmKc+8Ot05y\nzljqwYMH88QTT/DZZ58xcOBAVq5cySuvvJJv3bVr1+Lm5saTTz5pV/7MM8+wcOFC1qxZw/XXX28r\n79WrF40bN7Y9b9u2LdWqVePIkSOFxhUbG8v58+cZNmwYZ8/+Oe2t1Wrlxhtv5Msvv7xq+8uzsFSt\nWrXQcwF4eXnZHqenp5Oeno6fnx8tW7Zk165deeqPGjUKb2/vqx4zNzeXL774gv79+9OkSRNbea1a\ntXjggQd4/fXXOXPmDLVr13YoRmdQIi5Sifl6+NKveT8A1vy8BoDp30wHYGynsbx959tFPrYT7/8R\nEakwatSoQZ8+fXj//fdxc3MjPT2de++9N9+6x48fJzAwkGrVqtmVt2zZErPZzLFjx+zKGzZsmO/5\nzp07V2hcP/30E1arldtuuy3PPpPJVOjNkZdjTE1NzRNvfjIzM3nxxRd5//33iY+PtztXQEBAnvp/\nTawLcubMGdLS0vIdQnN5+M2xY8fKRyI+d+5cZsyYQXx8PG3atOGNN94ocFzN5QnV/8pkMrFu3Toi\nIiKKF7FIJZeamcqLX74IwKGkQ8U6Vv2q9Vk9fDUAE76YwI9nf+T4+eN8f/p7jp4/yqeHPsVsMjOg\n1YBixy0i4kzO6rEuDcOHD2fkyJGkpKRw22232cZqF1dBybLVgZ6S3NxcTCYTixYtst1QeS1at27N\nZ599xvfff094eHih9R9//HEWLlzIk08+Sbdu3ahevTpms5mnnnqK3NzcPPVLY2rH0uBQIr5ixQrG\njRvHvHnzCA8PZ86cOURGRnLo0CGCgoLybWMymdiwYQPt2rWzldWsWbNkohapxNIsabz57Zslftx/\nR/wbgLd3vk30mmhij8QSeyQWb3dv0p9PL/HziYiIYcCAAXh5ebFt2zYWLVpUYL3g4GA2btxIamqq\n3ZCPw4cPk5uby3XXXXfN5zYVsOBD06ZNsVqtBAQEFGlRof79+zNt2jQWL17sUCL+0UcfMWrUKF57\n7TW78nPnzhW5x7p27dr4+vpy+PDhPPsOHTI6soryf1aSHJq+cObMmURFRREVFUXLli2ZNWsW9erV\nIyYmpsA2VquVmjVrUqdOHdvm7q6RMCIlpYpHFWb2mcnMPjNpFdCqxI57XfXruKvVXdzZ4s4SO6aI\niBTMx8eHefPmMWnSJAYOHFhgvTvuuIOcnBxmzZplV/76669jMpno16/fNZ+7SpUqAHmGq/Tp04fq\n1aszbdo0LBZLnnZJSUlXPW6XLl3o27cv8+fP5+OPP86z32q18vrrr9sW9HFzc8vT871s2bJiLfhj\nNpu5/fbb+fzzzzl69KitPDk5mcWLFxMWFubSYSngQI+4xWJh165dTJgwwa48IiKCbdu2XbXt3Xff\nTXp6Os2bN+fpp59m0KBBxYtWRGyqeFZhXNdxJX7cPs360KdZH9It6fhO8y3x44uISLine truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xad8e0b8>"
|
||||
"<matplotlib.figure.Figure at 0xa802160>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1827,7 +1804,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"actual mean=1.30, std=1.14\n",
|
||||
"actual mean=1.30, std=1.12\n",
|
||||
"EKF mean=1.00, std=0.95\n"
|
||||
]
|
||||
}
|
||||
@@ -1846,16 +1823,16 @@
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 25,
|
||||
"execution_count": 30,
|
||||
"metadata": {
|
||||
"collapsed": false
|
||||
},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuIAAADaCAYAAADjVSfWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X18zfX/x/HHOWeXtmEsczHG5JoUQ0yFQq7qW6JQo/l+\ntV8okTJRukD1FaVsuhRJVulCctFQpHUx+zbCULlmm82YYbPZzu+PT07NNhvO2dnmeb/dzs0578/7\n8/68ztvM67zP+/N+m6xWqxURERERESlTZmcHICIiIiJyNVIiLiIiIiLiBErERUREREScQIm4iIiI\niIgTKBEXEREREXECJeIiIiIiIk6gRFxERERExAlKnYhHRkYSFBSEp6cnwcHBbNq0qcRzXn31VVq0\naIGHhwf16tVj8uTJVxSsiIiIiEhl4VKaStHR0YwbN4758+cTEhLCvHnz6NOnD4mJiQQEBBR5zvjx\n41m5ciWzZs2idevWZGRkkJSUZNfgRUREREQqKlNpdta88cYbuf7665k/f76trGnTpgwaNIjp06cX\nqr9r1y7atGnDtm3baNq0qX0jFhERERGpBEqcmpKbm0t8fDw9e/YsUN6rVy9iY2OLPGf58uU0btyY\nlStX0rhxYxo1asSIESNITU21T9QiIiIiIhVciYl4WloaeXl5+Pv7Fyj39/cnOTm5yHP27NnDvn37\niI6OZtGiRSxevJidO3dyxx132CdqEREREZEKrlRzxC9Vfn4+OTk5LF68mMaNGwPwwQcf0KxZM+Li\n4ujQoYOtbkZGhiNCEBEREREpE9WqVbus80ocEffz88NisZCSklKgPCUlhdq1axd5Tp06dXBxcbEl\n4QBNmjTBYrFw4MCBywpURERERKQyKTERd3V1pX379sTExBQoj4mJISQkpMhzQkJCOHfuHHv37rWV\n/fnnn+Tl5REYGHiFIYuIiIiIVHylWjXl448/JjQ0lHnz5hESEkJUVBQLFixgx44dBAQEEBERQVxc\nHGvXrgXAarXSsWNHvL29mTNnDlarlccee4zc3Fx++OGHAm3/c2rK5Q7rS9E2b94MQHBwsJMjqVwq\ne7+anjUBYH2mxF8NdlXZ+9VZ1K+OoX51DPWrY6hfHcMeOWyp5ogPHjyY9PR0pk+fTlJSEq1bt2bV\nqlW2NcSTk5MLjH6bTCZWrFjBI488wi233IKnpye9evXilVdeuawgRSqDnWk7GbpsaIGy1/u8TkiD\nor9ZEhERkcqt1DdrhoeHEx4eXuSxBQsWFCrz9/cnOjr68iMTqWSycrP4NfnXAmUnz550UjQiIiLi\nbKXe4l5E7KNpzaZ0Dujs7DCKN81qPERERMShlIiLlLEqrlWo5qH7IURERK52SsRFRERERJzAIRv6\niIiIiFwpq9VKTk4OpVjgTS7i/NLR2dnZTo6kYnFzc8NsduyYtRJxERERKXfy8/M5e/Ysbm5uWCwW\nZ4dToXl4eDg7hArHarWSnZ2Nu7u7Q5NxTU0RERGRcicnJwcPDw8l4eIUJpMJDw8PcnJyHHodjYiL\n2NFXu75iS8oW22tfD19GdxztxIguwzTTX0/0VbCIOJfJZCq5koiDlMXPnxJxETv6YucXvJfwnu11\nY9/GFS8RFxERkTKhRFzEAToHdObHQz+ScjqFkV+O5ODJg7S6ppWzwxIREZFyRIm4iAPcEngLPx76\nkVM5p2wj5DF7YpwclYiIiJQnullTxAFqedXinQHv8M6Ad/Cr4kdj38a0q9OOdnXa0cKvhbPDExER\nqXT279+P2Wxm0aJFzg6l1JSIizhAVfeqjGw3kpHtRpI6MZU/HvmD+FHxxI+KZ8nAJbZ6e47vYUvy\nFv5I/8OJ0YqISFlauHAhZrMZs9nMDz/8UGSda6+9FrPZTI8ePRway48//sizzz7LyZMnHdJ+bm4u\nb7zxBl27dsXX1xd3d3eCgoIYOXIk//vf/xxyzYpEibiIE41ZNYbr37yesC/DnB3K36ZZjYeIiDiU\np6cnS5YsKVT+888/s2fPHjw9PR0eQ2xsLM899xwnTpywe9vHjx+na9euPProo1SrVo1p06Yxf/58\n7r//fmJjY+nYsSNHjhyx+3UrEs0RF3GCRtUbcZ3/dZzKOcWe43vYdWwXD375IAARXSNoWrOpkyMU\nERFH69u3L5988glz584tsF76kiVLaNGiRZmsoe7IXUuHDx9OfHw80dHR3HPPPQWOPfvss8yePdsu\n18nNza2w681rRFzECSL7RbIlfAsL7lwAwNHTR3k/4X3eT3ifo6ePOjk6ERFxNJPJxJAhQ0hPT2fN\nmjW28vz8fKKjoxk6dGiRSXJWVhYTJ04kMDAQDw8PmjZtyksvvVSortls5uGHH+bLL7+kTZs2eHh4\n0Lp16wLXevbZZ3niiScAaNiwIWazGYvFwsaNG211vvnmG7p164aPjw8+Pj706dOHLVu2UJK4uDhW\nrFjByJEjCyXh59//hAkTqFu3LgAHDhxg9OjRtGzZEi8vL3x9fRkwYADbtm0rcN6GDRswm80sWbKE\nadOmERgYSJUqVTh06FCxsWzdupW+fftSrVo1vL296d69O5s2bSrxPZQFjYiLOFHTmk157w5jVZUZ\nm2ZorriIyFUkICCArl27smTJEvr27QtATEwMqampDB06lKVLlxY6584772TdunWMHDmSdu3asW7d\nOiIiIti/fz+RkZEF6sbGxvLVV1/xf//3f/j4+DB37lzuueceDhw4gK+vLwMHDmT37t0sXbqU1157\njZo1awLQooWxqMCSJUt44IEH6NWrFy+++CJnz57lrbfe4uabbyYuLo6mTYv/9nb58uWYTCYeeOCB\nUvVFXFwcmzZtYtCgQTRo0IAjR47w5ptv0q1bN7Zv346/v3+B+jNmzMBisTBu3DisVive3t5kZmYW\nanfnzp107doVHx8fnnzySdzd3Xn77be57bbbWLt2LV27di1VfI6iRFzEiWp71+bBG4wpKe/++q4S\ncRGRq8zQoUOZMGECWVlZeHp68uGHH9KpUycaNWpUqO7y5ctZu3Ytzz33HFOmTAEgPDycsLAw3nzz\nTcaMGUPLli1t9Xfu3EliYqKtrW7dutG2bVs++ugjHn74YVq3bk27du1YunQpd955Jw0aNLCde+bM\nGcaOHUtYWBhvv/22rXzkyJE0bdqU5557jsWLFxf7vnbs2AHAddddV6p+6N+/PwMHDixQ9sADD9Ci\nRQveffddJk+eXODYqVOn2LlzJx4eHrayohLxyZMnk5OTw/fff09QUBAAI0aMoHnz5owfP55ffvml\nVPE5ihJxkXKs3Zvt2Jqy1fZ6UKtBfDTwIydGJCJSPpmedex25NZnHDOXetCgQYwdO5YvvviCu+66\niy+//JKZM2cWWXflypVYLBYeeeSRAuUTJkzg/fff5+uvvy6QiPfo0aNAQt+mTRuqVq3Knj17Sowr\nJiaGEydOMGTIEI4dO2Yrt1qt3HTTTXz77bcXPf/8Kiw+Pj4lXgvA3d3d9jwrK4usrCy8vb1p1qwZ\n8fHxheoPHz68QBJelPz8fL755hvuuOMOWxIOULNmTUaMGMHs2bNJTU3lmmuuKVWMjqBEXKSc6b24\nN2fPnSXPmlfoWL413/EBTDv/n5lWThERcTRfX1969+7Nhx9+iMViISsri3vvvbfIuvv378ff35+q\nVasWKG/WrBlms5l9+/YVKK9fv36R1zt+/HiJce3evRur1cptt91W6JjJZCrx5sjzMWZmZhaKtyhn\nz55l6tSpfPjhhyQlJRW4lp+fX6H6/0ysi5OamsqZM2eKnEJzfvrNvn37KkYiHhkZyaxZs0hKSqJV\nq1a8+uqrxc6r2b9/f6GvVEwmE6tWraJXr15XFrFIJXcm90yhsie6PMHLsS87IRoRkYrBUSPWZWHo\n0KGEhoaSkZHBbbfdZpurfaWKS5ZLs1JKfn4+JpOJhQsX2m6ovBQtWrTgiy++4LfffiMkJKTE+mPG\njOH999/nkUceoXPnzlSvXh2z2cyjjz5Kfn7hQaiyWNqxLJQqEY+OjmbcuHHMnz+fkJAQ5s2bR58+\nfUhMTCQgIKDIc0wmE2vWrCkwN6hGjRr2iVqkHDmXf479J/YDcDLn8jdEWH3/avLy8zh08hAb9m/A\ny9XLdqyo5FxERCqHO++8E3d3d2JjY1m4cGGx9QIDA1m7di2ZmZkFpnzs2rWL/Px8GjZseMnXNpmK\nntLTuHFjrFYrfn5+l7Wp0B133MGMGTNYtGhRqRLxTz/9lOHDh/PKK68UKD9+/Phlj1hfc801VKlS\nhV27dhU6lpiYCHBZfWZPpVq+cM6cOYSFhREWFkazZs2YO3cuderUISoqqthzrFYrNWrUoFatWraH\ni4tmwkjlc+zMMa59/Vquff1aPt3x6WW34+3mTTWParSq1YqHOzzM8OuH2x41PPUhVkSksvL09GT+\n/Pk888wz3HXXXcXW69+/P3l5ecydO7dA+ezZszGZTPTr1++Sr+3lZQz6XDhdpXfv3lSvXp0ZM2aQ\nm5tb6Ly0tLSLttuxY0f69u3Le++9x7Jlywodt1qtzJ4927ahj8ViKTTy/dFHH13Rhj9ms5nbb7+d\nr776ir1799rK09PTWbRoER06dHDqtBQoxYh4bm4u8fHxTJw4sUB5r169iI2Nvei5d999N1lZWTRp\n0oTHHnus0N2wIpWJ2WSmYfWGAPi4l+7mFBERuTpdOD1k2LBhJZ7Tv39/evbsyTPPPMO+fftsyxd+\n/vnnhIeHF7hRs7SCg4OxWq1MmjSJoUOH4ubmxq233oqfn59tF8wbbriBIUOG4O/vz4EDB1i9ejWt\nW7fmvffeu2jbCxcupG/fvgwePJg+ffrQs2dPqlatyr59+/j000/ZvXs3Q4YMAYwR9Line truncated
|
||||
"image/png": "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 truncated
|
||||
"text/plain": [
|
||||
"<matplotlib.figure.Figure at 0xade09b0>"
|
||||
"<matplotlib.figure.Figure at 0xaa754e0>"
|
||||
]
|
||||
},
|
||||
"metadata": {},
|
||||
@@ -1865,7 +1842,7 @@
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"actual mean=1.30, std=1.13\n",
|
||||
"actual mean=1.29, std=1.12\n",
|
||||
"UKF mean=1.30, std=1.08\n"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ Introductory text for Kalman and Bayesian filters. All code is written in Python
|
||||
|
||||
**"Kalman and Bayesian Filters in Python" looks amazing! ... your book is just what I needed** - Allen Downey, Professor and O'Reilly author of several math and programming textbooks, via twitter.
|
||||
|
||||
Start reading online now:
|
||||
Start reading online now by clicking the binder badge below:
|
||||
|
||||
|
||||
[](http://mybinder.org/repo/rlabbe/Kalman-and-Bayesian-Filters-in-Python)
|
||||
|
||||
@@ -184,19 +184,15 @@
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
a:link{
|
||||
font-weight: bold;
|
||||
color:#447adb;
|
||||
}
|
||||
a:visited{
|
||||
font-weight: bold;
|
||||
color: #1d3b84;
|
||||
}
|
||||
a:hover{
|
||||
font-weight: bold;
|
||||
color: #1d3b84;
|
||||
}
|
||||
a:focus{
|
||||
font-weight: bold;
|
||||
color:#447adb;
|
||||
}
|
||||
a:active{
|
||||
|
||||
@@ -36,7 +36,6 @@ def plot_dog_track(xs, dog, measurement_var, process_var):
|
||||
|
||||
|
||||
def print_gh(predict, update, z):
|
||||
print(predict, update, z)
|
||||
predict_template = '{: 7.3f} {: 8.3f}'
|
||||
update_template = '{:.3f}\t{: 7.3f} {: 7.3f}'
|
||||
|
||||
@@ -45,7 +44,6 @@ def print_gh(predict, update, z):
|
||||
|
||||
|
||||
def print_variance(positions):
|
||||
print('Variance:')
|
||||
for i in range(0, len(positions), 5):
|
||||
print('\t{:.4f} {:.4f} {:.4f} {:.4f} {:.4f}'.format(
|
||||
*[v[1] for v in positions[i:i+5]]))
|
||||
|
||||
@@ -258,7 +258,7 @@ def plot_sigma_points():
|
||||
plot_covariance_ellipse(x, P, facecolor='g', alpha=0.2, variance=[1, 4])
|
||||
plt.title('alpha=1')
|
||||
plt.show()
|
||||
print(sum(Wc0))
|
||||
|
||||
|
||||
def plot_radar(xs, t, plot_x=True, plot_vel=True, plot_alt=True):
|
||||
xs = np.asarray(xs)
|
||||
@@ -267,16 +267,19 @@ def plot_radar(xs, t, plot_x=True, plot_vel=True, plot_alt=True):
|
||||
plt.plot(t, xs[:, 0]/1000.)
|
||||
plt.xlabel('time(sec)')
|
||||
plt.ylabel('position(km)')
|
||||
plt.tight_layout()
|
||||
if plot_vel:
|
||||
plt.figure()
|
||||
plt.plot(t, xs[:, 1])
|
||||
plt.xlabel('time(sec)')
|
||||
plt.ylabel('velocity')
|
||||
plt.tight_layout()
|
||||
if plot_alt:
|
||||
plt.figure()
|
||||
plt.plot(t, xs[:,2])
|
||||
plt.xlabel('time(sec)')
|
||||
plt.ylabel('altitude')
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user