Work on EKF chapter.
Started developing EKF chapter. Stalled - not sure what is the best initial example to develop. Air drag seems unnecessarily 'mathy', but then you need diff eq to compute Jacobians.
This commit is contained in:
1 parent
7b9c6c4409
commit
b9f462678d
5 files changed
+307
-25
No files matched your search
+122
-25
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:4ca13721197346f81b4551f2897e3b34983888159a0e887ab7d3fe729999e595"
|
||||
"signature": "sha256:2703ec2a794449aaabf6044e38967bdacd2cadc551c734b81dfa513e4ae2ea54"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -41,10 +41,10 @@
|
||||
" margin-right: auto;\n",
|
||||
" }\n",
|
||||
" div.text_cell code {\n",
|
||||
" background: #FFFFFF;\n",
|
||||
" background: transparent;\n",
|
||||
" color: #000000;\n",
|
||||
" font-weight: 600;\n",
|
||||
" font-size: 13pt;\n",
|
||||
" font-size: 11pt;\n",
|
||||
" font-style: bold;\n",
|
||||
" font-family: 'Source Code Pro', Consolas, monocco, monospace;\n",
|
||||
" }\n",
|
||||
@@ -250,7 +250,7 @@
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"<IPython.core.display.HTML at 0x2a13b90>"
|
||||
"<IPython.core.display.HTML at 0x2e14cd0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -289,7 +289,22 @@
|
||||
"\n",
|
||||
"That's nonlinear. 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 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 multipy it using linear algebra we get another Gaussian equation as a result. That is very rare. $\\sin{x}*\\sin{y}$ does not yield a $\\sin(\\cdot)$ as an output."
|
||||
"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 multipy it using linear algebra we get another Gaussian equation as a result. That is very rare. $\\sin{x}*\\sin{y}$ does not yield a $\\sin(\\cdot)$ as an output.\n",
|
||||
"\n",
|
||||
"If you are not well versed in signals and systems there is a perhaps startling fact that you should be aware of. A linear system is defined as a system whose output is linearly proportional to the sum of all its inputs. A consequence of this is that to be linear if the input is zero than the output must also be zero. Consider an audio amp - if a sing into a microphone, and you start talking, the output should be the sum of our voices (input) scaled by the amplifier gain. But if amplifier outputs a nonzero signal for a zero input the additive relationship no longer holds. This is because you can say $amp(roger) = amp(roger + 0)$ This clearly should give the same output, but if amp(0) is nonzero, then\n",
|
||||
"\n",
|
||||
"$$\n",
|
||||
"\\begin{aligned}\n",
|
||||
"amp(roger) &= amp(roger + 0) \\\\\n",
|
||||
"&= amp(roger) + amp(0) \\\\\n",
|
||||
"&= amp(roger) + non\\_zero\\_value\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"which is clearly nonsense. Hence, an apparently linear equation such as\n",
|
||||
"$$L(f(t)) = f(t) + 1$$\n",
|
||||
"\n",
|
||||
"is not linear because $L(0) = 1$! Be careful!"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -326,9 +341,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAssAAAFyCAYAAAADJZf7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3V+MVPd9///XzFlmWFhYGwNlV1kaqxXQEEoAt4oDrgS0\nvXF8EVV2VF+0sYqK6tz4wlJ925sGVbWEKsUtUXJTqZVMFUdq8UVUuzfBjVZJsfiiSCjYCvADzzKG\nxfPXc87M2fldDGc8czizO7P7mTmfOfN8SJE5Z4fdD+TNZ9772df5fFLNZrMpAAAAAI9Jxz0AAAAA\nwFY0ywAAAEAPNMsAAABADzTLAAAAQA80ywAAAEAPNMsAAABAD6s2y3fv3tWJEyf01a9+VceOHdN7\n770nSXIcR0eOHNGRI0f02muvtV9/8eJF7du3T/v379elS5fWvA8AAADYLLXaPsv5fF737t3ToUOH\ndPv2bX3jG9/QnTt3tG3bNpVKpa7Xep6nAwcOaHFxUbVaTSdPntRHH33U8z4AAABgu6nVPrh7927t\n3r1bkrR37155nifP8yJfu7i4qIMHD2rXrl2SpIWFBV29elXFYjHy/uHDh03+OQAAAADjVm2WO/30\npz/VsWPHlMlkVKvVdOzYMU1PT+t73/uennvuOd27d09zc3O6cOGCduzYoT179iiXy6lcLkfep1kG\nAACA7fpqlpeWlvT666/rP//zPyW1ssy7d+/WL3/5S33rW9/SjRs3FKQ5zp49K0l65513uj5H5/1U\nKmXsDwAAAAAMy5rNcq1W04svvqg333xTTz/9tCS1oxnPPPOM5ufndevWLc3PzyuXy7V/39LSkubn\n51UqlR67Pzc399jXefvtt7Vz584N/4EAAACAXmq1mp5//vm+X79qs9xsNvXKK6/o5Zdf1p/+6Z9K\nkh4+fKjNmzdrenpaN2/e1N27d7V37149/fTT+tWvfqVPP/1UtVpNd+7c0e///u/L87zI+2E7d+7U\n0aNHB/zjIun+67/+Sy+88ELcw4BlqAtEoS4QRk0gypUrVwZ6/arN8gcffKAf//jHun79un7wgx8o\nlUrp+9//vl555RVls1k5jqMf/ehHmp6eliSdO3dOx48flySdP39ekpTJZCLvA/24fft23EOAhagL\nRKEuEEZNwIRVm+UTJ05E7n5x/fr1yNe/9NJLeumll/q+DwAAANiME/xgtT/+4z+OewiwEHWBKNQF\n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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x222e950>"
|
||||
"<matplotlib.figure.Figure at 0x3d8f9d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -358,9 +373,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAsUAAAF9CAYAAADsuhWdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VPW9//H3ZN/3QFgSwxIIaESCiguKoEWhgNpqlbbS\nXqWtor39tVytgK16K67XVqsW29vb63JbtSpFoW4otBrcKqBEkQiBkAUIWSf7OvP7IzImkGUmzJkz\nZ+b1fDx81DM5mfP22y/ffDj5zPfYioqKnAIAAACCWIjZAQAAAACzURQDAAAg6FEUAwAAIOhRFAMA\nACDoURQDAAAg6FEUAwAAIOhRFAMAgD66u7u1atUqzZw5U7m5uVq5cqVpWT744AMtXLhQp5xyinJz\nc3Xw4EHTsgzlkUce0dy5c82OgWGiKIZlzZ07V48++qjh18nNzdX69esNvw6AwFVeXq7c3Fz961//\nMjuKW15//XW9/PLLWrt2rbZu3arVq1ebluXOO+9Ubm6u3nrrLW3dulUZGRmm5HDnZ8F1112nF198\n0UeJ4G1hZgcA/JnT6ezzvwBwIqyylpSUlGjEiBHKz883NYfT6dSBAwe0bNkyjRw50tQcvf93IDEx\nMYqJifFFJBjAxhPt4Gtr167Vs88+q9raWmVnZ2vFihW64IILXF/Pzc3V008/rTPOOEOStG7dOq1a\ntUq7d++W1HOHuL9fn91000266aabJEnXXHONUlNTZbPZtHnzZqWlpWnFihVasGCBpJ67NhdddJE2\nb96s0aNHS+r5tdff/vY3bd682ZWjP/fee68uu+wy7wwGgIB2dK3pT+91TupZ2y699FJ1dXXphRde\nUGtrqxYtWqRf/epX2rdvnx544AEVFhbKbrdr7Nixuvbaa3XllVe6vv+aa65RXl6ejhw5orfeeksp\nKSlauXJln+t/8cUXWrNmjT799FPZbDbl5OTo9ttvd613jzzyiB577LHjsl5++eW65557JEkdHR16\n6KGHtHHjRjU2Nmry5Mn6+c9/runTpx/33/3b3/5WL7/8srZu3aqIiAjdfPPNuuKKK9wau4HW4KPr\n9rp16/Too4+61uyjYzB27FhXVnfGRJKef/55Pfnkkzpw4IBSU1M1f/58/fznPx80R++fBX/4wx/0\n61//WpI0evToPpmO2rZtm+69914VFRUpPj5eixcv1ooVKxQW1nN/8tZbb5XD4VBCQoJeeuklRUVF\nafny5VqyZIlb44UTR/sEfOrFF1/U448/rhUrVmjjxo2aPXu2brrpJpWVlXn0HgUFBcrIyNC1116r\nrVu3auvWrbr22mv7nLdp0yZNmDBBL730kr75zW/q5ptvVklJyaDvbbPZXP++detWFRQUSJJWr17t\nus78+fPd/w8GENRGjx6trVu36vnnn5ckPfroo6615LTTTjvu/PXr16uxsVFPPvmknnvuOU2bNk2S\nVFtbq2nTpmnt2rV67bXXdO211+qXv/yla4066vnnn9d5552nl156SdOmTdPq1avV3t7u+vp//Md/\nKCoqSn/961/1wgsv6KqrrlJnZ6fr69ddd522bt2qf/u3f1NGRoYra+/2iZUrV6qgoEAPPvigXn75\nZZ1//vm69tprVVlZedx/z4MPPqiZM2dq/fr1euyxx5SWlub22A20BnvaPjHUmPzf//2f/vM//1NX\nXHGFNm7cqN/85jfq7u4eMkfvnwXXXHONa9x6/xw5ym6360c/+pFycnK0fv163XXXXVq3bp1+//vf\n9zlv06ZNGjt2rNatW6cFCxZozZo1/Y4rjEH7BHzqL3/5iy699FItXrxYUs8C/cYbb+jZZ5/VzTff\n7NZ7JCcnS5JCQkIUExOj1NTUfs876aSTXHeOly9frg0bNuivf/2rbrnllgHfu/evxnq/b3x8/IDX\nAYCBhISEKDU1Va2trZKkxMTEQdeS5ORk3XHHHa7jyZMnS5JOP/10nX766a7Xr7zySj3zzDP6xz/+\noVmzZrlenzVrli699FJJPQXuK6+8otLSUuXk5EjquYO7cOFCTZgwQZKUnZ3d5/pHf/0fExPjyt5b\nSUmJ/v73v+v5559XXl6epK/W15dfflk/+MEP+pw/d+5cXXPNNZJ61mRPeGsNHmpMHn/8cX3nO9/R\n97//fVfO3ne93ckRHR2t6OhoxcTE9NtisXHjRknSHXfcoYiICI0fP15Lly7Vn//8Z914442u83Jy\nclw5brjhBj355JP6/PPPTW0dCSYUxfCp0tJSfeMb3+jzWm5urg4cOOD1ax1d8Hofl5aWev06AOAt\nvQvf3lpbW/W73/1OW7Zs0ZEjR9TZ2an29nZNmTKlz3m9i9zExERJPXcpj/rud7+rhx9+WO+++66m\nTZumuXPnuu5Gu2PXrl2SpKVLl/Z5vaOjo9/f+M2YMcPt9zbKYGNSU1Oj6urqPm0sRigpKVF2drYi\nIiJcr02ZMkW1tbVqampSXFzccVmTkpIkSfX19YZmw1coimE6p9PZ76+bjnI4HF6/Zn/XM+I6AOCJ\nhISEfl+///779d577+nnP/+5srOzFRoaqn//938/bt0KDQ097nt737n82c9+pm9+85t6//33tWXL\nFv3+97/X3XfffdzNiqE888wzio2N7fPascfSV0WoEdxdx4caE18Z6po2m63frPAdeorhU1lZWa4P\nzEk9i8Tu3buVlZXlei0hIUFNTU2u44H2pAwPD1dXV9eA1/riiy+OOz56naM/eJqbm/tcp79FNiws\nbNDrAMBQwsPDJWnYa8lHH32ka665RnPmzNG4ceOUnp6uioqKYb3XSSedpKuuukqPP/64zj//fL3x\nxhtuf+/RO9NHjhxRZmZmn39SUlKGlWe44uPj+6zhknTo0CGP3iM1NVXp6en68MMPhzz3RH4WZGdn\n68CBA316mXft2qWUlBTXXWKYj6IYPrVkyRK9/PLLeumll7R//37913/9lw4dOqSrr77adU5eXp42\nbtwop9OpioqKAfeFHDdunN59911VVlaqvb29zwcjpJ5Wjccee0z79+/X7373O5WVlbk+qR0fH6+T\nTjpJL730kiRp9+7deuuttwa8zubNm1VbW6v29nbuKAPwWHp6umJjY/X666+roaFB7e3tHt2tHDdu\nnF555RXt2bNHu3fv1i233HLcmjeUzs5O3X777frggw9UXl6ud999V5999pmmTp3qUY758+fr9ttv\n16ZNm1RWVqaPPvpId999tz766COP8pyoqVOnqqmpSW+//bYk6YUXXhjWh9Kuv/56PfPMM3ryySdV\nUlKinTt3as2aNcedN9jPgqqqKlVVVamlpUUOh0PV1dWqqqpyFcELFy6U1NNTXFxcrM2bN+vpp5/W\nt7/9bdd7WGW7vkBGUQyfuuKKK/TDH/5Qv/71r7Vo0SK9/fbb+u1vf6vMzEzXObfeequKi4t11lln\n6dZbb9Wll17a7x3cn/70pwoJCdEll1zi+lR2bxdddJGKiop02WWX6cUXX9T999+vcePGub7+q1/9\nSps2bdLZZ5+thx56yPXhv2Pddtttqqio0AUXXKBp06bp5Zdf9tJoAAgWISEhuuuuu/Tee+/pnHPO\n0bRp0zwqIletWqXo6Gh961vf0o9+9CPl5+e71Qvce+0MCQlRc3OzVq5cqfnz52vlypVauHChbrjh\nhn6/b6C2tvvuu0+LFi3SPffco/nz5+tnP/uZampqNGrUqAGvbYTRo0frlltu0cqVKzV79mzt2bOn\nzwfkBnJsru985zv6xS9+oRdeeEGLFi3S8uXL+21jGOxnwXnnnafzzjtP//u//6vKykrNmjVL5513\nnl599VVJPW0kjz/+uPbu3avLLrtMt912my677DJdf/31A+aC7w17n+L77rtPL7/8slJSUrRhwwZJ\n0iuvvKKHH35YUk9hM2fOHO8lBTxw7F6VQLBjzQaAwQ37TvG8efP67K/X0dGhBx98UM8884yeeOIJ\n3X333V4JCAA4cazZADC4YRfF06dPd20XIkk7d+5UTk6OUlJSNGrUKGVkZPT5QBUAwDys2QAwOK9t\nyVZVVaX09HQ9++yzSkxMVHp6uo4cOTLg4xEBIz399NNmRwD8Gms2APTl9X2Kj+4isGnTJprGAcDP\nsWYDQA+vFcUjRoxQVVWV6/joXYhjfbhzl0Ylx3vrsgDgM42NjR5tX+XP3F2zd+zYobS0NF9GAwCv\n8WTd9lpRnJeXpz179rj276usrOz313CjkuOVn5/vrcsa7rHHHuvzXHJ/ZqWskrXyktU4Vsq7fft2\nsyN4jbtrdlpamqXWbLNZaT77A8arZ3/ip7cf1lt7a7Xmkgkamxg16PmMmWc8WbeHXRTfeeed2rRp\nk+rr6zV79mzdfvvtWrFihZYsWSKpZ09FAIB/YM0G/E+Xw6mH3inVgfo2PbR4kpKjw82OFNSGXRTf\nfvvtuv322497fcGCBScUyN/0fvywv7NSVslaeclqHKvltapgWbPNxnz2TDCPV3NHt3711n5FhNp0\n/4KJig4//oEh/QnmMTOa1z9oF2gmTZpkdgS3WSmrZK28ZDWO1fICg2E+eyZYx6u6uUO3vb5PU0fG\n6sazxyo0xP0PuQbrmPkCj3keQu8Povg7K2WVrJWXrMaxWl5gMMxnzwTjeJXUter/bfhCF0xI0o/P\n8awgloJzzHyFO8UAAAA+8PHBRt29uUTXnzVGcyemmB0Hx7AVFRU5fXnBsrIyPskMwJK2b9+uzMxM\ns2P4FGs24B2b99bq8fcrtGputk4bzda0vuLJus2dYgAAAIM4nU49t7NSGz+v1n0LJmpcSrTZkTAA\neoqHUFBQYHYEt1kpq2StvGQ1jtXyAoNhPnsm0Mer2+HUI++W6x/FdXpo0SSvFMSBPmZm4kLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x22bf3d0>"
|
||||
"<matplotlib.figure.Figure at 0x3d92e90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -392,9 +407,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3f6bfd0>"
|
||||
"<matplotlib.figure.Figure at 0x5b20b50>"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -412,10 +427,7 @@
|
||||
"\n",
|
||||
"These equations do not hold for non-Gaussians, and certainly do not hold for the probability distribution shown in the 'output' chart above. \n",
|
||||
"\n",
|
||||
"Think of what this implies for the Kalman filter algorithm of the previous chapter. All of the equations assume that a Gaussian passed through the process function results in another Gaussian. If this is not true then all of the assumptions and guarantees of the Kalman filter do not hold. Let's look at what happens when we pass the output back through the transfer function again, simulating the next step time step of the Kalman filter.\n",
|
||||
"\n",
|
||||
"**process function? what is the correct name**\n",
|
||||
"\n"
|
||||
"Think of what this implies for the Kalman filter algorithm of the previous chapter. All of the equations assume that a Gaussian passed through the process function results in another Gaussian. If this is not true then all of the assumptions and guarantees of the Kalman filter do not hold. Let's look at what happens when we pass the output back through the function again, simulating the next step time step of the Kalman filter."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -431,9 +443,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3f6d910>"
|
||||
"<matplotlib.figure.Figure at 0x5b1e550>"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -460,8 +472,8 @@
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"input mean, variance: 0.0013, 0.9985\n",
|
||||
"output mean, variance: -0.0293, 2.2394\n"
|
||||
"input mean, variance: 0.0010, 1.0013\n",
|
||||
"output mean, variance: -0.0291, 2.2439\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -490,16 +502,16 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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\nXnoJ8+bNw65du7B9+3a8/PLL+PDDDzF37twO5dy/fz+8vLya3efj42P1z2MPrfXjjY2NLe5rr026\nSnvvqVAoLLXDHXkedR5neskhYmNjcezYMcu22WzG8ePHERsba7nPz88P5eXllu2srKxWX8vFxaVZ\nLdrV0tLSmm2fPHnS8j5+fn4A0OwTdlZWVqudqEajaVbfRUTUUS4uLgBgc1+yb98+PPLII5g2bRri\n4uIQHh6OCxcu2PRasbGxmD9/PrZt24ZbbrkFW7Zssfq5gwcPBgDk5uYiJiam2S0oKMimPLby8/Nr\n1ocD6PAaviEhIQgPD8ePP/7Y7r6d+VvQp08fnDlzplkt8dGjRxEcHAxvb2+bXpPsh4NecoiFCxfi\n008/xaefforTp0/jz3/+My5evIgFCxZY9rn++uuxadMmmM1mZGVl4eOPP271teLi4vD9998jJycH\nRqOxxSf8s2fP4m9/+xtOnz6NF154AefOnUNSUhIAwNfXF3369MEnn3wCADh+/HirZ/Refp9t27ah\nsLAQRqORM8JE1GFhYWHw9vbGl19+idLSUhiNxhYzeNea0evbty8+//xz/PLLLzhx4gT++Mc/tujz\nzGbzNV+jvr4eCxcuxI8//ogLFy7ghx9+QGpqKoYMGWL1zxEXF4eZM2diwYIF2Lp1K86fP499+/bh\n8ccfx759+6x+HXsYMmQIysrK8J///AcA8OGHH7Y4ma69NgGAp59+GmvXrsVbb72FM2fO4PDhw1i6\ndGmL/a71t+DyyW2VlZVobGxEfn4+DAaDZZB77733Amhaczg9PR1ff/013n77bSxevLhZVpIGB73k\nEPPmzcNTTz2Fp556CgkJCdixYwe+/PJLy3I+APDGG2/g1KlTCA4Otizh0toM7EsvvQSlUom+ffvC\nw8MDL774ouUxhUKBGTNm4Pjx4xg8eDA+/PBDfPLJJ83qpd5//31s3boVISEhWLlyJe6///5WM7/z\nzju4cOECoqKi4OHhgU8//dSOLUJE3YFSqcT69euxc+dOhIaGwsPDo8Ug8VplXm+++SY8PT0xcuRI\nTJ06FWPGjMGIESNaPP/q17hyW6lUoqKiAnPnzkV8fDweeOAB3HvvvXj22WdbvF9rr3XZxo0bcd99\n9+Hxxx9Hv379MHv2bOTn50Or1Vr989iDVqvFa6+9hrlz5yIqKgonT55ssa5we20CAIsXL8a7776L\n9evXIyEhAdOnT2+1zOBafwsiIiIQERGBN954Azk5OQgPD0dERIRlqUx/f398/fXX+OWXXzB48GAk\nJSVhzpw5ePrpp6+ZlbqGwtyJjxwVFRXo27cvli1b1mIZKaKuMGHCBERHR3doTUii7op9NhF1Z52a\n6X3xxRcxbNgwfmIhyVjzlRYRNWGfTUTdmc2D3oyMDBQUFCAxMZGDDpIMvyYisg77bCLq7mwe9D71\n1FN47rnn7BiFqON2797N0gYiK7DPJqLuzqZB79dff424uDhERUVxxoCISHDss4mIbLw4xaFDh7B5\n82Z89dVXKCwshFKpREREBGbPnm3Z5/PPP+/ytfyIiOzFaDRi6tSpUsewC/bZROTsrOmzO7V6AwCs\nWrUK3t7eeOKJJ5rdv3PnTgwdOrT1YA0m7EgvhIeLCjfFBXbm7e1mzZo1zdbRE5mcsgLyyiunrIC8\n8sopKwD8/PPPmDRpktQx7M6WPltKthw3dY0mbDpqwLfpRXhoRAQmxwbYvfZf5ONZ1GzM1THM1THW\n9NmSrNPrplbijv7BOF1QjfdTcmCoqJUiBhEROSEXlRJzh0XgpZt7Y3NaAVb+9zwKquqkjkVEErOp\nvOFKf/3rX216nkKhwCNjopBTVotvThWisq4Rj+m07T/RQa5ebFtkcsoKyCuvnLIC8sorp6zOzNY+\nWyqdOW5igzzwzvQ4fH48H4u2ZmDe9RG4Oc4+s74iH8+iZmOujmEu+5P8imw9fF3x4PAe0KiUKJTw\nk/iVV/ASnZyyAvLKK6esgLzyyikriaOzx41GpcT9Q8Px91tjsf1UAZ7+zznkV3T+b43Ix7Oo2Zir\nY5jL/iQf9F42sbc/3kvJwSc/5+FobkWXv39BQUGXv6et5JQVkFdeOWUF5JVXTllJHPY6bqID3PH2\n7X0xMNwLS77KwNe/FsDUiVNaRD6eRc3GXB3DXPbX6fIGe4kP8cTTE3oBAN49kI20vEqEeLng5r5i\nnOhGRETyplIqMHtwGEb39MXre/XYm1mKx8dqEeHjKnU0IuoCnV69oS2dORN4Y2oeLlXWoVeAO8ZF\n+yHEy8XO6YiIrs1ZV29oi6irNzhKo8mMrScv4bPj+bhvSBim9w+Gkld3JJItYVdvaM9IrS8Swr3g\n7arCx6l52JFeiLxyrvBARET2oVIqcPfAUKy+PQ57M0uxbPsZZJcZpY5FRA4k5KA3LtgDN8Line truncated
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAr0AAAF9CAYAAAAJJNDxAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd8VFXeBvBnSiY9k94zJNRQQgvSDKAsutJFLKALIrIr\nRFh2xUWxvOKrrrusXRAs6yvqKqsSaYu7sIKGBKSXUBIQSCa9917m/SMyJCQhM5OZ3HMnz/fzmQ/c\nmZuZJyc3Z07O/O65ipSUFAOIiIiIiOyYUuoARERERES2xkEvEREREdk9DnqJiIiIyO5x0EtERERE\ndo+DXiIiIiKyexz0EhEREZHd46CXiIioh2psbMQzzzyDMWPGIDIyEmvWrJEsy+HDhzFjxgwMGTIE\nkZGRyMrKkixLZ959911MnjxZ6hhkJg56SXiTJ0/G+vXrbf46kZGR2LZtm81fh4jsV0ZGBiIjI3H0\n6FGpo5jkP//5D3bs2IGNGzciMTERzz77rGRZXnzxRURGRuL7779HYmIiAgMDJclhynvBo48+iq1b\nt3ZTIrIWtdQBiERgMBha/UtE1BVy6UtSU1Ph7++PkSNHSprDYDAgLS0NS5YsQUBAgKQ5Wv7bERcX\nF7i4uHRHJLIiBa/IRrayceNGbNmyBUVFRQgPD8eqVatw2223GR+PjIzEZ599hltuuQUAEBcXh2ee\neQbJyckAmmd42/t4a/ny5Vi+fDkAYMGCBfDx8YFCocC+ffvg6+uLVatWYdq0aQCaZ12mTJmCffv2\nITg4GEDzx1Lffvst9u3bZ8zRnr/85S+4++67rdMYRGTXrvU17WnZzwHNfdvs2bPR0NCAb775BtXV\n1Zg5cyZeeuklXLlyBX/729+QlJSE0tJShIaGYvHixbjvvvuMX79gwQJERUUhLy8P33//Pby9vbFm\nzZpWr3/x4kW88sorOHv2LBQKBfr164cXXnjB2N+9++672LBhQ5usc+bMwauvvgoAqKurw1tvvYVd\nu3ahvLwcAwYMwFNPPYURI0a0+b7feecd7NixA4mJidBoNPjTn/6Ee++916S266gPvtZvx8XFYf36\n9cY++1obhIaGGrOa0iYA8PXXX2Pz5s1IS0uDj48Ppk6diqeeeuqmOVq+F3zwwQd44403AADBwcGt\nMl1z/Phx/OUvf0FKSgrc3d0xa9YsrFq1Cmp18zzj008/jaamJnh4eGD79u1wcnJCbGws5s+fb1J7\nkeVY3kA2sXXrVmzatAmrVq3Crl27MGnSJCxfvhzp6elmPUdCQgICAwOxePFiJCYmIjExEYsXL261\n3969e9GnTx9s374dc+fOxZ/+9Cekpqbe9LkVCoXx/4mJiUhISAAAPPvss8bXmTp1qunfMBH1aMHB\nwUhMTMTXX38NAFi/fr2xLxk+fHib/bdt24by8nJs3rwZ//znPzFs2DAAQFFREYYNG4aNGzfi3//+\nNxYvXoz/+Z//MfZR13z99deYMGECtm/fjmHDhuHZZ59FbW2t8fEnn3wSTk5O+Oqrr/DNN9/ggQce\nQH19vfHxRx99FImJiXjkkUcQGBhozNqyvGHNmjVISEjA66+/jh07dmDixIlYvHgxcnNz23w/r7/+\nOsaMGYNt27Zhw4YN8PX1NbntOuqDzS1v6KxNPv/8c/zv//4v7r33XuzatQtvvvkmGhsbO83R8r1g\nwYIFxnZr+T5yTWlpKR577DH069cP27Ztw8svv4y4uDi8//77rfbbu3cvQkNDERcXh2nTpuGVV15p\nt13JuljeQDbxxRdfYPbs2Zg1axaA5g54z5492LJlC/70pz+Z9BxeXl4AAKVSCRcXF/j4+LS7X69e\nvYwzv7Gxsdi5cye++uorrF69usPnbvnRVcvndXd37/B1iIg6olQq4ePjg+rqagCAVqu9aV/i5eWF\ntWvXGrcHDBgAABg1ahRGjRplvP++++7Dl19+iR9++AExMTHG+2NiYjB79mwAzQPY3bt3Q6/Xo1+/\nfgCaZ2BnzJiBPn36AADCw8Nbvf61j+ddXFyM2VtKTU3Fv/71L3z99deIiooCcL1/3bFjB37729+2\n2n/y5MlYsGABgOY+2RzW6oM7a5NNmzbhoYcewqJFi4w5W85am5LD2dkZzs7OcHFxabcEYteuXQCA\ntWvXQqPRoHfv3li4cCH+8Y9/4PHHHzfu169fP2OOZcuWYfPmzbhw4YKkpR09AQe9ZBN6vR733HNP\nq/siIyORlpZm9de61qG13Nbr9VZ/HSIia2k5sG2puroa7733Hvbv34+8vDzU19ejtrYWAwcObLVf\ny0GsVqsF0DzLeM1vfvMbvP322zh48CCGDRuGyZMnG2eTTXH+/HkAwMKFC1vdX1dX1+4ndtHR0SY/\nt63crE0KCwtRUFDQqszEFlJTUxEeHg6NRmO8b+DAgSgqKkJFRQXc3NzaZPX09AQAlJSU2DQbcdBL\n3chgMLT7cdA1TU1NVn/N9l7PFq9DRGQODw+Pdu9ft24dDh06hKeeegrh4eFQqVT4/e9/36bfUqlU\nbb625czjE088gblz5+Knn37C/v378f777+PPf/5zm8mIznz55ZdwdXVtdd+N28D1QaYtmNqPd9Ym\n3aWz11QoFO1mJdtjTS/ZhE6nM56QBjR3AsnJydDpdMb7PDw8UFFRYdzuaE1GBwcHNDQ0dPhaFy9e\nbLN97XWuvbFUVla2ep32OlG1Wn3T1yEi6oyDgwMAWNyXHDt2DAsWLMDtt9+OiIgI+Pn5ITMz06Ln\n6tWrFx544AFs2rQJEydOxJ49e0z+2mszy3l5eQgLC2t18/b2tiiPpdzd3Vv14QCQnZ1t1nP4+PjA\nz88PR44c6XTfrrwXhIeHIy0trVUt8fnz5+Ht7W2c5SXpcNBLNjF//nzs2LED27dvx9WrV/Haa68h\nOzsb8+bNM+4TFRWFXbt2wWAwIDMzs8N1ESMiInDw4EHk5uaitra21YkHQHMpxYYNG3D16lW89957\nSE9PN57p7O7ujl69emH79u0AgOTkZHz//fcdvs6+fftQVFSE2tpazggTkdn8/Pzg6uqK//znPygr\nK0Ntba1Zs40RERHYvXs3Ll26hOTkZKxevbpNn9eZ+vp6vPDCCzh8+DAyMjJw8OBBnDt3DoMGDTIr\nx9SpU/HCCy9g7969SE9Px7Fjx/DnP/8Zx44dMytPVw0aNAgVFRWIj48HAHzzzTcWnfS1dOlSfPnl\nl9i8eTNSU1Nx5swZvPLKK232u9l7QX5+PvLz81FVVYWmpiYUFBQgPz/fOMidMWMGgOaa3suXL2Pf\nvn347LPP8OCDDxqfQy7L2dkjDnrJJu6991787ne/wxtvvIGZM2ciPj4e77zzDsLCwoz7PP3007h8\n+TLGjh2Lp59+GrNnz253BvaPf/wjlEol7rrrLuNZzS1NmTIFKSkpuPvuu7F161asW7cOERERxsdf\neukl7N27F+PGjcNbb71lPLnuRs899xwyMzNx2223YdiwYdixY4eVWoOIegqlUomXX34Zhw4dwvjx\n4zFs2DCzBonPPPMMnJ2dcf/99+Oxxx7DyJEjTarFbdl3KpVKVFZWYs2aNZg6dSrWrFmDGTNmYNmy\nZe1+XUdlZ3/9618xc+ZMvPrqq5g6dSqeeOIJFBYWIigoqMPXtoXg4GCsXr0aa9aswaRJk3Dp0qVW\nJ6B15MZcDz30EJ5//nl88803mDlzJmJjY9stM7jZe8GECRMwYcIE/N///R9yc3MRExODCRMm4Lvv\nvgPQXOaxadMm/Pzzz7j77rvx3HPP4e6778bSpUs7zEXdp0vr9FZUVOCuu+7C4sWL2ywjRdQdblyr\nkYg6xj6biHqyLs30btq0CUOGDOFfLUREMsA+m4h6MosHvVeuXEFRURGGDBnC+hQiIsGxzyains7i\nQe8bb7yBFStWWDMLkdk+++wzljYQmYB9NhH1dBYNevft24fw8HAEBQVxxoCISHDss4mILLw4xZkz\nZ7Bnzx58//33KC4uhlKphL+/v3GpDgA4efKkWdfeJiISSXl5uVlLPImMfTYR2TtT+uwurd4AAOvX\nr4erqyseeeSRVvenp6dj5MiRHX5dQ5MBf92fimd/FdHhPt1pw4YNra6LLTI5ZQXklVdOWQF55ZVT\nVgA4ceJEqyX27IWlfbZULDlu6hqb8MXJHOxOLsRvxwRjSl9vq5+8J/LxLGo25jIPc5nHlD5bsnV6\n1UoFgj0ckZDKa00TEZH1aFRKLBoVjD/f1Qdbk/Lx/J4ryK+skzoWEUnMovKGlpYvX27x1z5ySzD+\n71gWzudWYliQG0aHeUi2lE7Ly+OKTk5ZAXnllVNWQF555ZTVnnWlz5ZCV46bvr4ueHd2f/zzdC5i\nv03B4luCcVd/68z6inw8i5qNuczDXNanWrFixVpbPHFZWVmbq7a0Z0SwOwYFuGJXcgFKaxrQx8fF\nFnFMIqd6NjllBeSVV05ZAXnllVPW7OxsaLVaqWN0G1P7bCl05bhRKRUYGuSOW0I98MnxLCSkliIq\n0A1ujm2vxNWduWxN1GzMZR7mMp0pfbYQlyF2dlDhd2NCcCq7At+ezZPk7OL8/Pxuf01LySkrIK+8\ncsoKyCuvnLKSOKx13ER4O+OdWQMwNMgNy7enYOf5fDR14b1G5ONZ1GzMZR7msj4hBr1Acw3Wqgk6\nlNU2orCqXuo4RERkZ1RKBeYPD8Rr0/ti76UiPLX7Z2SV1Uodi4i6SZdXb+iIpWcCpxVX4/ufi6FW\nKlBUXY+FI4OgdVJDpeRlM4mo+9jr6g0dEXX1BltpbDLg27N52HI6Fw+NCMTswX5Q8vLMRLJlSp/d\n5RPZrK2XlzMW3+IMAEjKqcD28/lwdVDh/mEBEicjIiJ7oVIqcO/QAIztpcXr8XrEXy3BqoLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x22d0210>"
|
||||
"<matplotlib.figure.Figure at 0x61c3250>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"output mean, variance: -0.0019, 2.2466\n"
|
||||
"output mean, variance: -0.0015, 2.2530\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -509,7 +521,7 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Although the shapes are very different, the mean and variance of each are almost the same. This may lead us to reasoning that perhaps we can ignore this problem if the nonlinear equation is 'close to' linear. To test that, we can iterate several times and then compare the results."
|
||||
"Although the shapes of the output are very different, the mean and variance of each are almost the same. This may lead us to reasoning that perhaps we can ignore this problem if the nonlinear equation is 'close to' linear. To test that, we can iterate several times and then compare the results."
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -532,8 +544,8 @@
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"linear output mean, variance: -0.1088, 7470.5861\n",
|
||||
"nonlinear output mean, variance: -2.0348, 26163.5214\n"
|
||||
"linear output mean, variance: -0.0877, 7491.7787\n",
|
||||
"nonlinear output mean, variance: -2.0078, 26241.0351\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
@@ -545,6 +557,91 @@
|
||||
"source": [
|
||||
"Unfortunately we can see that the nonlinear version is not stable. We have drifted significantly from the mean of 0, and the variance is half an order of magnitude larger. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 2,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The Extended Kalman Filter"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"The extended Kalman filter (EKF) works by linearizing the system model at each update. For example, consider the problem of tracking a cannonball in flight. Obviously it follows a curved flight path. However, if our update rate is small enough, say 1/10 second, then the trajectory over that time is nearly linear. If we linearize that short segment we will get an answer very close to the actual value, and we can use that value to perform the prediction step of the filter. There are many ways to linearize a set of nonlinear differential equations, and the topic is somewhat beyond the scope of this book. In practice, a Taylor series approximation is frequently used with EKFs, and that is what we will use. \n",
|
||||
"\n",
|
||||
"This approach has many issues. First, of course, is the fact that the linearization does not produce an exact answer. More importantly, we are not linearizing the actual path, but our filter's estimation of the path. We linearize the estimation because it is statistically likely to be correct; but of course it is not required to be. So if the filter's output is bad that will cause us to linearize an incorrect estimate, which will almost certainly lead to an even worse estimate. In these cases the filter will quickly diverge. This is where the 'black art' of Kalman filter comes in. We are trying to linearize an estimate, and there is no guarantee that the filter will be stable. A vast amount of the literature on Kalman filters is devoted to this problem. Another issue is that we need to linearize the system using analytic methods. It may be difficult or impossible to find an analytic solution to some problems. In other cases we may be able to find the linearization, but the computation is very expensive. \n",
|
||||
"\n",
|
||||
"In the next chapter we will spend a lot of time on a new development, the unscented Kalman filter(UKF) which avoids many of these problems. I think that as it becomes better known it will supplant the EKF in most applications, though that is still an open question. Certainly research has shown that the UKF performs at least as well as, and often much better than the EKF. \n",
|
||||
"\n",
|
||||
"I think the easiest way to understand the EKF is to just start off with an example. Perhaps the reason for some of my mathmatical choices will not be clear, but trust that the end result will be an EKF."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 3,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Example: A falling Ball"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"In the **Designing Kalman Filters** chapter I first considered tracking a ball in a vacuum, and then in the atmosphere. The Kalman filter performed very well for vacuum, but diverged from the ball's path in the atmosphere. Let us look at the output; to avoid littering this chapter with code from that chapter I have placed it all in the file `ekf_internal.py'."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"import ekf_internal\n",
|
||||
"ekf_internal.plot_ball()b"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x61d0890>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can artifically force the Kalman filter to track the ball by making $Q$ large. That would cause the filter to mistrust its prediction, and scale the kalman gain $K$ to strongly favor the measurments. However, this is not a valid approach. If the Kalman filter is correctly predicting the process we should not 'lie' to the filter by telling it there are process errors that do not exist. We may get away with that for some problems, in some conditions, but in general the Kalman filter's performance will be substandard.\n",
|
||||
"\n",
|
||||
"Recall from the **Designing Kalman Filters** chapter that the acceleration is\n",
|
||||
"\n",
|
||||
"$$a_x = (0.0039 + \\frac{0.0058}{1+\\exp{[(v-35)/5]}})*v*v_x \\\\\n",
|
||||
"a_y = (0.0039 + \\frac{0.0058}{1+\\exp{[(v-35)/5]}})*v*v_y- g\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"These equations will be very unpleasant to work with while we develop this subject, so for now I will retreat to a simpler one dimensional problem using this simplified equation for acceleration that does not take the nonlinearity of the drag coefficient into account:\n",
|
||||
"\n",
|
||||
"\n",
|
||||
"$$\\ddot{x} = \\frac{0.0034ge^{-x/20000}\\dot{x}^2}{2\\beta} - g$$\n",
|
||||
"\n",
|
||||
"Here $\\beta$ is the ballistic coefficient, where a high number indicates a low drag."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": []
|
||||
}
|
||||
],
|
||||
"metadata": {}
|
||||
|
||||
+53
@@ -19,6 +19,59 @@ import matplotlib.pyplot as plt
|
||||
from numpy.random import randn
|
||||
import numpy as np
|
||||
|
||||
|
||||
class BaseballPath(object):
|
||||
def __init__(self, x0, y0, launch_angle_deg, velocity_ms, noise=(1.0,1.0)):
|
||||
""" Create baseball path object in 2D (y=height above ground)
|
||||
|
||||
x0,y0 initial position
|
||||
launch_angle_deg angle ball is travelling respective to ground plane
|
||||
velocity_ms speeed of ball in meters/second
|
||||
noise amount of noise to add to each reported position in (x,y)
|
||||
"""
|
||||
|
||||
omega = radians(launch_angle_deg)
|
||||
self.v_x = velocity_ms * cos(omega)
|
||||
self.v_y = velocity_ms * sin(omega)
|
||||
|
||||
self.x = x0
|
||||
self.y = y0
|
||||
|
||||
self.noise = noise
|
||||
|
||||
|
||||
def drag_force (self, velocity):
|
||||
""" Returns the force on a baseball due to air drag at
|
||||
the specified velocity. Units are SI
|
||||
"""
|
||||
B_m = 0.0039 + 0.0058 / (1. + exp((velocity-35.)/5.))
|
||||
return B_m * velocity
|
||||
|
||||
|
||||
def update(self, dt, vel_wind=0.):
|
||||
""" compute the ball position based on the specified time step and
|
||||
wind velocity. Returns (x,y) position tuple.
|
||||
"""
|
||||
|
||||
# Euler equations for x and y
|
||||
self.x += self.v_x*dt
|
||||
self.y += self.v_y*dt
|
||||
|
||||
# force due to air drag
|
||||
v_x_wind = self.v_x - vel_wind
|
||||
|
||||
v = sqrt (v_x_wind**2 + self.v_y**2)
|
||||
F = self.drag_force(v)
|
||||
|
||||
# Euler's equations for velocity
|
||||
self.v_x = self.v_x - F*v_x_wind*dt
|
||||
self.v_y = self.v_y - 9.81*dt - F*self.v_y*dt
|
||||
|
||||
return (self.x + random.randn()*self.noise[0],
|
||||
self.y + random.randn()*self.noise[1])
|
||||
|
||||
|
||||
|
||||
def a_drag (vel, altitude):
|
||||
""" returns the drag coefficient of a baseball at a given velocity (m/s)
|
||||
and altitude (m).
|
||||
|
||||
+128
@@ -0,0 +1,128 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Created on Fri Jul 18 23:23:08 2014
|
||||
|
||||
@author: rlabbe
|
||||
"""
|
||||
from math import radians, sin, cos, sqrt, exp
|
||||
import numpy.random as random
|
||||
import matplotlib.pyplot as plt
|
||||
import filterpy.kalman as kf
|
||||
import numpy as np
|
||||
|
||||
def ball_kf(x, y, omega, v0, dt, r=0.5, q=0.02):
|
||||
|
||||
g = 9.8 # gravitational constant
|
||||
f1 = kf.KalmanFilter(dim_x=5, dim_z=2)
|
||||
|
||||
ay = .5*dt**2
|
||||
f1.F = np.array ([[1, dt, 0, 0, 0], # x = x0+dx*dt
|
||||
[0, 1, 0, 0, 0], # dx = dx
|
||||
[0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2
|
||||
[0, 0, 0, 1, dt], # dy = dy0 + ddy*dt
|
||||
[0, 0, 0, 0, 1]]) # ddy = -g.
|
||||
|
||||
f1.H = np.array([
|
||||
[1, 0, 0, 0, 0],
|
||||
[0, 0, 1, 0, 0]])
|
||||
|
||||
f1.R *= r
|
||||
f1.Q *= q
|
||||
|
||||
omega = radians(omega)
|
||||
vx = cos(omega) * v0
|
||||
vy = sin(omega) * v0
|
||||
|
||||
f1.x = np.array([[x,vx,y,vy,-9.8]]).T
|
||||
|
||||
return f1
|
||||
|
||||
|
||||
class BaseballPath(object):
|
||||
def __init__(self, x0, y0, launch_angle_deg, velocity_ms, noise=(1.0,1.0)):
|
||||
""" Create baseball path object in 2D (y=height above ground)
|
||||
|
||||
x0,y0 initial position
|
||||
launch_angle_deg angle ball is travelling respective to ground plane
|
||||
velocity_ms speeed of ball in meters/second
|
||||
noise amount of noise to add to each reported position in (x,y)
|
||||
"""
|
||||
|
||||
omega = radians(launch_angle_deg)
|
||||
self.v_x = velocity_ms * cos(omega)
|
||||
self.v_y = velocity_ms * sin(omega)
|
||||
|
||||
self.x = x0
|
||||
self.y = y0
|
||||
|
||||
self.noise = noise
|
||||
|
||||
|
||||
def drag_force (self, velocity):
|
||||
""" Returns the force on a baseball due to air drag at
|
||||
the specified velocity. Units are SI
|
||||
"""
|
||||
B_m = 0.0039 + 0.0058 / (1. + exp((velocity-35.)/5.))
|
||||
return B_m * velocity
|
||||
|
||||
|
||||
def update(self, dt, vel_wind=0.):
|
||||
""" compute the ball position based on the specified time step and
|
||||
wind velocity. Returns (x,y) position tuple.
|
||||
"""
|
||||
|
||||
# Euler equations for x and y
|
||||
self.x += self.v_x*dt
|
||||
self.y += self.v_y*dt
|
||||
|
||||
# force due to air drag
|
||||
v_x_wind = self.v_x - vel_wind
|
||||
|
||||
v = sqrt (v_x_wind**2 + self.v_y**2)
|
||||
F = self.drag_force(v)
|
||||
|
||||
# Euler's equations for velocity
|
||||
self.v_x = self.v_x - F*v_x_wind*dt
|
||||
self.v_y = self.v_y - 9.81*dt - F*self.v_y*dt
|
||||
|
||||
return (self.x + random.randn()*self.noise[0],
|
||||
self.y + random.randn()*self.noise[1])
|
||||
|
||||
|
||||
|
||||
def plot_ball():
|
||||
y = 1.
|
||||
x = 0.
|
||||
theta = 35. # launch angle
|
||||
v0 = 50.
|
||||
dt = 1/10. # time step
|
||||
|
||||
ball = BaseballPath(x0=x, y0=y, launch_angle_deg=theta, velocity_ms=v0, noise=[.3,.3])
|
||||
f1 = ball_kf(x,y,theta,v0,dt,r=1.)
|
||||
f2 = ball_kf(x,y,theta,v0,dt,r=10.)
|
||||
t = 0
|
||||
xs = []
|
||||
ys = []
|
||||
xs2 = []
|
||||
ys2 = []
|
||||
|
||||
while f1.x[2,0] > 0:
|
||||
t += dt
|
||||
x,y = ball.update(dt)
|
||||
z = np.mat([[x,y]]).T
|
||||
|
||||
f1.update(z)
|
||||
f2.update(z)
|
||||
xs.append(f1.x[0,0])
|
||||
ys.append(f1.x[2,0])
|
||||
xs2.append(f2.x[0,0])
|
||||
ys2.append(f2.x[2,0])
|
||||
f1.predict()
|
||||
f2.predict()
|
||||
|
||||
p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)
|
||||
|
||||
p2, = plt.plot (xs, ys,lw=2)
|
||||
p3, = plt.plot (xs2, ys2,lw=4, c='r')
|
||||
plt.legend([p1,p2, p3], ['Measurements', 'Kalman filter(R=0.5)', 'Kalman filter(R=10)'])
|
||||
plt.show()
|
||||
@@ -50,6 +50,9 @@ def rk4(y, x, dx, f):
|
||||
|
||||
return y + (k1 + 2*k2 + 2*k3 + k4) / 6
|
||||
|
||||
def rk2 (y,x,dx,f):
|
||||
"""computes the 2nd order Runge-kutta for dy/dx"""
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ class BaseballPath(object):
|
||||
|
||||
# force due to air drag
|
||||
v_x_wind = self.v_x - vel_wind
|
||||
|
||||
v = sqrt (v_x_wind**2 + self.v_y**2)
|
||||
F = self.drag_force(v)
|
||||
|
||||
|
||||
Reference in new issue
Block a user