Got air drag working well, and a KF showing the errors due to the process model.
This commit is contained in:
1 parent
40debbd003
commit
38fa86d52c
2 files changed
+384
-149
No files matched your search
+275
-87
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"metadata": {
|
||||
"name": "",
|
||||
"signature": "sha256:1176e606a0fbcfee32c2c1282d705afff40c345291d62a713bbb17979900fd8d"
|
||||
"signature": "sha256:dc7abfb3c31bceb18f38ed34d63ab344a0e937dfb0c1b339c16885b1cc985f8a"
|
||||
},
|
||||
"nbformat": 3,
|
||||
"nbformat_minor": 0,
|
||||
@@ -246,13 +246,13 @@
|
||||
],
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 93,
|
||||
"prompt_number": 1,
|
||||
"text": [
|
||||
"<IPython.core.display.HTML at 0x3858250>"
|
||||
"<IPython.core.display.HTML at 0x1a8cb90>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 93
|
||||
"prompt_number": 1
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
@@ -313,7 +313,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 94
|
||||
"prompt_number": 2
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -340,13 +340,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3858d90>"
|
||||
"<matplotlib.figure.Figure at 0x2a06a50>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 95
|
||||
"prompt_number": 3
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -425,7 +425,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 96
|
||||
"prompt_number": 4
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -444,7 +444,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 97
|
||||
"prompt_number": 5
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -511,7 +511,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 98
|
||||
"prompt_number": 6
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -546,7 +546,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 99
|
||||
"prompt_number": 7
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -581,7 +581,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 100
|
||||
"prompt_number": 8
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -625,7 +625,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 101
|
||||
"prompt_number": 9
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
@@ -693,13 +693,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x4493610>"
|
||||
"<matplotlib.figure.Figure at 0x2a84dd0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 102
|
||||
"prompt_number": 10
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -774,9 +774,9 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3d21dd0>"
|
||||
"<matplotlib.figure.Figure at 0x3419550>"
|
||||
]
|
||||
},
|
||||
{
|
||||
@@ -791,7 +791,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 103
|
||||
"prompt_number": 11
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -828,7 +828,7 @@
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 104
|
||||
"prompt_number": 12
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -859,13 +859,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3362c90>"
|
||||
"<matplotlib.figure.Figure at 0x2a91550>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 105
|
||||
"prompt_number": 13
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -942,7 +942,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 106
|
||||
"prompt_number": 14
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -983,21 +983,21 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3369c90>"
|
||||
"<matplotlib.figure.Figure at 0x2aa42d0>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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\nb69T7967deaZ/Rz/78kxxxwn5vH+j6uqqiRJU6dO1bE65putPPHEE8rKytK1116rMWPGNF9AeP31\n12vhwoVtLizcP34wLiwEgKNj29LKlW598YVLJSURDR0aVkpK9HONjdLLL3v0wx9m6GtfC+sXv2hQ\naWlEn3ziUnl5XvNznH56SHPn1ik9veV5p0zJ0p//7Nn/XfTuu7UaODDa19HQIN15Z6ZefjlNklRe\nHtTvflevQMDSFVdka9266ASmTm3Sj3/c2DyfNWtcOu+8lu87YkRIf/5znTwe6U9/StVNN2XJti1d\neqlf//M/jSooiIv7fwFIcHF1s5XU1FRNnz5dkyZN0pQpUzRjxgxJksfjaXccieXAv/RgFrKLTw0N\n0sqVLq1c6WrTArFqlVuVlTmaOjVblZU5Wr7c3fy59evduuOOTO3e7dLSpan69a+jRW9RUUT/9m9+\nSZJl2br11qZWBbQk3XVXo0pKQkpNtfWznzXo5JNbGqMzM6UHHmjUk0/W6xe/8OnnP29Qz55Sba3V\nXEBL0rvvpsrna3nOvDxbRUUtzzNqVFAeT7Q95Kmn0mXb0baSv/wlTdu2tbSYbNrk0rx5KXr//RQ1\nNHTuv2G849wzG/kh5cgPObzbbrut+ePKykpVVla2ecyhxgEg2W3daumNN1K1Y4dL3/hGQAMGRBQM\nSi++6NHdd2dKkh57rEGTJgWUGu200KZNLjU1RQvOUMjS55+7dOaZYUnRVeoDhULR/8/Pl374w0ZN\nnuxXZqZ02mnhNnMZODCihQvr5fdLhYW20tJaf/6442x961vBVmNeb0RXXOHXq69GH3zDDU3KyWn5\nfL9+tv7whzrNm+dR794RXXRR9Os9Humss0L68MPor6HevSPKzbWb/5tMmZKlVatSJNl65hmfrryy\n5fvW1kb/Xf/a9AkAHHHM7RyxQjsHgGQ0c2a6fv7zDEnRQnLBglq53dJZZ+XJ54sWyj17RrRkSa2K\ni6Mv1ytWuDV2bI78fktut62//rVOI0ZEi2KfT/rd79L0ox9l6KSTwnrmGZ/KytrZaiOGtm+3tHat\nWxkZtgYNCrcqog9n61ZLCxemavt2l8aNC+i006LzXLbMrdGjc5sfN3p0QC+/HF3eXr3apf/zfzJV\nV+fSo4826PzzQzH/9wBIfI7uEw0AODaBgPTBB6nNxzt2uFRba6lPn4hOOCGstWujL9EnnBBWRkbL\neseQIWHNm1enzz936fjjIxo2rGVVOStLuukmv8aPDygjQ93SY1xUZKuoqOPFbJ8+tqZMCbQZLyiw\n1adPWFu3RttULr44ugrt80X7sleujP43u/babL3//j7169f637hzp6W9ey316hVhtRpAl4lZTzSS\nG71h5iK7rhcKSR995NZLL6Xqo4/czS0WHo90881NkqJFYGWlX8XFtvLzpWee8enqq5t03XVNmjWr\nQT16tDyfZUnDhoX1zW8G5fe/03wR335padHWC1Mv0jv++Ij+8Id6PfaYT88/X6cJE6KFdjgsNTS0\n/Nry+6VwuPVWfZ9/7tI3v5mts87K0623Zmnr1vjdUpVzz2zkB1aiAaCLrVgRvRAwHI62X8yfX6cz\nzoiuHldWBrVoUZ3q6y317x9uLnzLyiJ64olGJ6ftqLKyiMrKWq9S5+ZKjzzi09VXZ6ux0dKsWT4d\nd1zrVpUPPkjRmjXRX20LFnh0/fV+9elDyweA2KOIRkzs348R5iG7Y2fb0RuV+HyWTjghrIKC1p//\n8ktX84ppOGzpyy9dzUV0erp0+ultL/I7WsmW39lnh7VkSa3C4Wjby8Gr8FlZrVffMzK6cXIdlGzZ\nJRryA+0cAHCM3nsvRRdckKuLL87VQw9lavfu1p8/6aSI0tKixV1amq2TTuraC/0SXd++tkpK2hbQ\nUnTHj1tvbVL//mH94AcNGjo0ugq9a5eltWtd+uqr+G3vAGAWimjEBL1h5iK7jqmqcmnNGpdqalrG\nHn88TX5/tDh7/vk0bd7c+qV16NCw5s+v029/W6/58+s0dGjnV54PRn6tFRfbevDBRr3+eq1uucWv\nvLzoLiDTpmXq3HPzVFmZo3Xr4uNXH9mZjfwQH68kAGCA1atdGj06R+edl6d77snUzp3RwnnAgAN3\nx7CVldX66ywrWkhfdllQQ4eGZbEY2qVSUqS8PMn1r99w//ynW2+8Eb0T4+bNbr31Vmq7X7d7t/Tu\nuyl67z239u3rrtkCMBVFNGKC3jBzkd3R+8MfPNq1K/qy+coradqwIfrxDTf4NX16o8aNC2jOnDqV\nlnZfuwb5HVm0T7qlV9rrbZuPzyc9+miGLr88R+PG5erXv05TMNjmYTFFdmYjP3BhIQAcpeLiluLL\n5WpZcS4psXX//U2H+Co4bfDgsH75S59+85t0nX9+UOXlbXfr2L3bpWeeablF49NPp+uaawLine truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3f46290>"
|
||||
"<matplotlib.figure.Figure at 0x2c34550>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 107
|
||||
"prompt_number": 15
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1134,7 +1134,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 108
|
||||
"prompt_number": 16
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1173,13 +1173,13 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAECCAYAAADw0Rw8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd8XOWZ779nmjSjMuqy2ki2Jcu2bNxtLMs2YLCBYJLQ\nTQikwELoSdiUD7m5ZDfZzYVkL3fzIZDAbnY3gVCTmB4w1ZILwpaRu2xZ0qh3Te/n3D9GGkuussrM\nkf1++ZwPOv037xk/857nfd7nAYFAIBAIBAKBQCAQCAQCgUAgEAgEAoFAIBAIBAKBQCAQCAQCwQTx\nv4H9g8tPB7fdBNQBh4FrYqRLIBAIBBPAdOAooAH0QD0wCzgGZAIFg/sFAoFAEGM0YzzPDgQA4+Di\nB6YR7t13A82Dy4IJ0CgQCASCcaAd43keIAS8BXwP+NngtbKBXGAG4V59PaJnLxAIBFOSImAPkASk\nA4eA24DfDzvmz8CGqCsTCAQCwQh0YzxvBVANOAbXawj77XOGHTMNaD/xxBdffFHJyMgY420FAoHg\nwqSnp6f+lltuKR7LuWM19PXAjwEDYZfNYuBfgW8SHoyNB/KB2hNPzMjIYPHixWO87eTwxhtvsHHj\nxljLGIEaNYE6dQlNo0NoGj1q1LV79+6ZYz13rIb+c+CvhHvyAM8SNuo/AqoGtz08VlHRxmq1xlrC\nSahRE6hTl9A0OoSm0aNWXWNlrIYewgOwPzth28uDi0AgEAhUwljDK88rLr/88lhLOAk1agJ16hKa\nRofQNHrUqmusSNG+4ZYtWxS1+egFAoFA7ezevZvLL798TDZ7PK6b84bKykoqKipiLWMEatQE6tQ1\nlTQpikJXVxehUCjqmmw2G2azOer3PRNq1ASx0aUoCmazmcTExAm/tjD0AkEU6erqIikpCZPJFPV7\n5+bmRv2eZ0ONmiA2uhRFoa+vD5/PR3p6+oReW7huBOcFiqLQ7mqn3dlOgj4Bu8/O/t79hOQQcdo4\nPCEP/pCf5oZmlpctxxV0AVCcWkxpainuoBuT3kS6cWL/gZ1IW1ubao2bQB2c7jsiXDeCCw5f0Mf2\ntu0c6jtE7eFaAuYAqXGpSEh8Wv8p5mQzs1JnUd9Wj9fgRa/VMzd9Lh9YP+Bz/+ekxKeQ7EnmtfjX\n8AQ8lKaV4uhxkJebR4Ypg0xTJsWpxSydthSdRvwzEUxtxDeYqeXjjTWx0iUrMjvadrCrYxedrk4+\nPfophVmFWJIsvN/wPsUzirEqVhQUnA4n6Snp7OrcRXd3N7OKZgHwgfUDQoQw6o3YfXb2tOxh9vTZ\nGLQG6vrq6GjvoF0TnsydFchiV84u/t/n/4+F2Quxt9n5+pqvU5pWiiSdvVOl1ucnuDARhl6gWuw+\nOx80fUDDQAPvHXiPRHMis1Jnsb9vP/22fhKSEqjrqwMFtBotgWCANmcbWiWcq88dcOMP+YHwG4A/\n5CcUDA+C2v12AnIg4rzscHXgkT3otXoUReGzps8o1Bei1+j5xPoJSpNCb0IvKLAydyWl6aWitz/I\nD37wA1588UXcbjevvfYaa9eujbUkIOzOu++++3j77beRZZn6+nr0en1kf3l5Ob/61a8oLy+PbFu9\nejWNjY243W66u7vRaM6PCPTz41OMEzX2vNSoCSZfly/oY2vzVn67+7fcv+V+dnfu5ujAUVr6W/CE\nPFS1VdHl6kJCQitp8QQ8yFoZCBt2jaTBG/ICEJSDyIpMUA7iCrjQSTqCchAAT9ATOcYb9BJUgpF9\nzoATt9aNVqNFkiQCoQANSgMNAw002hp59bNXeefYO/xT1T+xs20n3e7uqLZTZWXlpFxz3rx5kXW7\n3c7atWv5xS9+cdZzH3/8caxWK/n5+aN624kWO3bs4NNPP+XQoUNYrdYRRh5g27ZtI4w8wNatW9m2\nbdsZr5uenk5jY+NEy51URHdEoBp2d+zmzfo3CSkhdnfupre/l05XJ06/Ew0aJMJG1+6zIylhg+Lt\n8+K0OmlyNuHVe3F5XXjbvOxt3YtH7yHYE2Rvy16UJIVAKECoO8Te9r249W5CPSH2texDSVYIxYUI\n2AJY9VYcOPD7/NhsNlLNqfR4evApPvSasKGob65Hn6bH6XdS1VpFvpLP4pLFfGnmlyhOHVPOqQij\ncfmc7Zjxuo08Hg+bNm1i+fLlPProo2O+Tqxpbm7GYrEQHx9/TucpinLWfWc6Ro2IHj2T00MaL2rU\nBBOvq9XRyn/W/ic//PiHfOfN77Cnaw9Ntib8IT9OhxO9Ro/NZ8MbDPfSNRoNvn4ffY19WPdaCQQD\nBAwBlBSFuMQ4dJk6EosTmV8xn8J5hSSWJrLwkoXMWziPjFkZZJVlMb9iPnlz8zDPNrPokkUUzSki\nyZiEKWSCAQj5wkbf6XDS0NJAr62XUCDs8gmEAjjiHLj8LgxaA3qNnmMNx6jvr+eHH/2QX332K7Y2\nb+WjTz8aU3tMRPuO5xqhUIhvfetb5OXl8cQTT0S2v//++6xZswaLxcLs2bNH1dMHuO+++9i4cSOz\nZs3ipz/9KStWrOCyyy7D4wm/Uf37v/87ixcvJj8/n6VLl/K3v/1txLkPPPAAV199NRaLhQceeGBU\n92xpacFisfDwww9TXV2NxWLBYrEQCAQAeOyxx7BYLGRkZPDJJ5+Mtmm48cYbKSwsBIi0xfAfwgMH\nDrBx40ZmzJjBJZdcQnV19YjzFyxYwHPPPcell15KQUEBX/va10Z97/EievSCmOAJetjVsYs369/E\nbDDTZG/C7XDjT/FzsPfgiGODvUHszXasTisyMn6jH6/OCylgwIA2WYvZbCbVnEqbsy0SOmmOM9Or\nCfvV9Ro9CfoEvNrwD4ZRZ8SjDRubBH0CcRlxmPQmLAUWvMe8BANBGICAPoCiU3D1urA2W3Hhwuf3\n4XQ6STWnoigKbdo2TP0m9Bo9b+9+G8c8Bx3tHZTYS8hPzo9uw46DIZ92Z2cnf/rTn07a//jjj7Ns\n2TJaWlpYv349ixcv5qqrrjrrdVesWMF3v/tdvva1r3Ho0CE2bdrEZ599xtq1a0lJSeGVV15h5syZ\nvPfee9xxxx2sWbOGtLQ0AD7++GPeffddFEWhvLycb37zm2fNfpufn4/VauXPf/4zf/zjH3n77bdH\n7H/sscd47LHHWLhw4Tm5ml555RUg7LrZunUrRUVFkX0Oh4Prr7+eH//4x7z++uts2bKFO+64g127\ndmE0GgGQJIn//u//5rnnnqOkpISamppT3WZSEIYedfrD1agJxq/L6XfyWt1rHBs4xvbW7TgcDnLS\nc7D5bEiDI6MGrYHW1laCrWFjGzQE8Rv8yGYZjaTBgIGEjAQsBRYUReGI+wgJiQmE5BAFSQW09bXh\nDrpJMiRRpClCJnzepZZLeb/3ffyyn8XZi9nRvSNy3CzDLI7YjhCUg6ROS8WgN2ApsNDr6aW3sxeN\nrAlrMQYJ2oI4kh3Y7XYcOAgFQxG3TmdbJwPFA/TH9XPflvsoUUrYtGoTC7MWotWce0G3ysrKk3ro\njz/++Ij1ioqKCfm+dHR0cPjwYerr62loaKC4+Lgb6oorroj8XVhYSEVFBfv27RuVoZ8+fTpFRUVk\nZGRgNpuxWCx0d4fHNW6//fbIcevXr8dsNlNXV8fFF18MwFVXXUVeXh4Ac+fOpb6+ftRpzqPpXnnv\nvffIzs6OfJ4rrriCjIwMdu7cySWXXBI57o477qC0tBSAJUuWRE2fMPSCqKAoCt3ubn5b81t0kg6n\n3wmAy+HCn+LH2mTF2+aFAVBQCBqDOLVOUlJSiCcefUBPYlIiGakZ+EN+uq3dBOUg/pCfHF0Os9Jm\n4Ql4mJsxlx0NO7iv/D4CcoB9hn3csPoGkMKRNUtCS1h78Vp2dewi35vP7NmzaXW0YvfbaWlsIduU\nzYKsBbzZ8yb+kB+zwYwxz0iPtgdLgYWDxw6SEEoIG31NkFBcKNLbV1DoC/WxvWE7mSmZhJQQnx39\nDFO2ier2au5ccOdJ7XKiIT/RiMOpDfmPfvSjCX5CYDabef311/nXf/1XHnzwQd56661Ij3fXrl38\n7Gc/49ChQwQCATwez4gfgjOh1WrR6XRotdrI+lAKiJdeeomnnnqK1tZWZFnG4XBEXCxDmoYwGAz4\nfL6J+rgTSmtrK4cOHWL69OmRbcFgkK6urhHHzZgxI9rSAGHoAXXGPKtRE4xNV01nDZ80f0J1ezVH\nO46SmZqJoihopeM93ORpyQQIYJlpAaDP00e7ph1LQXidAbBkWej39hOviydLk8X66euZlTKLrX1b\n+WHFD0kzhl/3K/2VVFjCGq8oOt4TLUguYFnOMgCuKb6Ga4qvGaFzTWgN0xdMp7qjmmBvEF2aDr1W\nz4HeA3TQgYJCYUEhPfqw0e/x9KAP6EmNS8VSYMHmszHgGyAzNRO7zY7ZbMYddNPj7mFf1z729ezj\nnpn3kMvxWY8TYcTP9mMx2h6/yWQiKSmJRx99lPLycn7/+99z9913A3DXXXdx991389e//hWtVsvt\nt99+Uo/ZYDCMOoePoig0Nzfz8MMP8/rrr7NsWfi5zJw5M+YDnUPROaFQ6JThlady9+Tl5VFRUcGr\nr756xmvrdLExucLQCyaV7a3beefYO5j0JpwBJx6nB1LDMfI9nT24m91YB6wENUHsDjuN+kY0kgYF\nBa3reDy80WCkLL2MopQiLrVcyoHdB7hy2ZUApHSmRIw8jN29NHReXlIeXyn5CoqicLT/KFa7lRf9\nL5KZlUmvp5euji78IT9ajRaTy0R7UzvWASu2eBuubhfNcc34fD567b04tU6ODRxDp9Gxp24P9nz7\nOFv01LonssefkJDAE088wZ133smVV15JYWEhLpeLtLQ0NBoNlZWVfPTRR8yePXvEecXFxWLine truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3870bd0>"
|
||||
"<matplotlib.figure.Figure at 0x3c044d0>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 109
|
||||
"prompt_number": 17
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1292,15 +1292,12 @@
|
||||
"from KalmanFilter import KalmanFilter\n",
|
||||
"from math import sin,cos,radians\n",
|
||||
"\n",
|
||||
"def ball_kf(x, y, omega, v0, dt):\n",
|
||||
"def ball_kf(x, y, omega, v0, dt, r=0.5, q=0.02):\n",
|
||||
"\n",
|
||||
" g = 9.8 # gravitational constant\n",
|
||||
"\n",
|
||||
" f1 = KalmanFilter(dim_x=5, dim_z=2)\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" ay = .5*dt**2\n",
|
||||
"\n",
|
||||
" f1.F = np.mat ([[1, dt, 0, 0, 0], # x = x0+dx*dt\n",
|
||||
" [0, 1, 0, 0, 0], # dx = dx\n",
|
||||
" [0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2\n",
|
||||
@@ -1311,8 +1308,8 @@
|
||||
" [1, 0, 0, 0, 0],\n",
|
||||
" [0, 0, 1, 0, 0]])\n",
|
||||
" \n",
|
||||
" f1.R *= 0.5\n",
|
||||
" f1.Q *= 0.02\n",
|
||||
" f1.R *= r\n",
|
||||
" f1.Q *= q\n",
|
||||
"\n",
|
||||
" omega = radians(omega)\n",
|
||||
" vx = cos(omega) * v0\n",
|
||||
@@ -1325,7 +1322,7 @@
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 110
|
||||
"prompt_number": 34
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1338,10 +1335,10 @@
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"y = 15.\n",
|
||||
"y = 1.\n",
|
||||
"x = 0.\n",
|
||||
"theta = 20. # launch angle\n",
|
||||
"v0 = 100.\n",
|
||||
"theta = 35. # launch angle\n",
|
||||
"v0 = 50.\n",
|
||||
"dt = 1/10. # time step\n",
|
||||
"\n",
|
||||
"ball = BallTrajectory2D(x0=x, y0=y, theta_deg=theta, velocity=v0, noise=[1,1])\n",
|
||||
@@ -1361,8 +1358,7 @@
|
||||
" \n",
|
||||
" f1.predict() \n",
|
||||
" \n",
|
||||
" #p1 = plt.scatter(f1.x[0,0], f1.x[2,0], color='black', marker='+', s=75)\n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
"\n",
|
||||
"p2, = plt.plot (xs, ys,lw=2)\n",
|
||||
"plt.legend([p2,p1], ['Kalman filter', 'Measurements'])\n",
|
||||
@@ -1374,13 +1370,20 @@
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x4a324d0>"
|
||||
"<matplotlib.figure.Figure at 0x343c950>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"237.122227572\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 111
|
||||
"prompt_number": 26
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
@@ -1403,7 +1406,11 @@
|
||||
"source": [
|
||||
"We are now ready to design a practical Kalman filter application. For this problem we assume that we are tracking a ball travelling through the Earth's atmosphere. The path of the ball is influenced by wind, drag, and the rotation of the ball. We will assume that our sensor is a camera; code that we will not implement will perform some type of image processing to detect the position of the ball. This is typically called *blob detection* in computer vision. However, image processing code is not perfect; in any given frame it is possible to either detect no blob or to detect spurious blobs that do not correspond to the ball. Finally, we will not assume that we know the starting position, angle, or rotation of the ball; the tracking code will have to initiate tracking based on the measurements that are provided. The main simplification that we are making here is a 2D world; we assume that the ball is always travelling orthogonal to the plane of the camera's sensor. We have to make that simplification at this point because we have not yet discussed how we might extract 3D information from a camera, which necessarily provides only 2D data. \n",
|
||||
"\n",
|
||||
"Our first step is to learn the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a nonspinning, smooth ball, such as a cannonball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n",
|
||||
"Our first step is to implement the math for a ball moving through air. There are several treatments available. A robust solution takes into account issues such as ball roughness (which affects drag non-linearly depending on velocity), the Magnus effect (spin causes one side of the ball to have higher velocity relative to the air vs the opposite side, so the coefficient of drag differs on opposite sides), the effect of lift, humidity, air density, and so on. I assume the reader is not interested in the details of ball physics, and so will restrict this treatment to the effect of air drag on a nonspinning baseball. I will use the math developed by Nicholas Giordano and Hisao Nakanishi in *Computational Physics* [1997]. \n",
|
||||
"\n",
|
||||
"**Important**: Before I continue, let me point out that you will not have to understand this next piece of physics to proceed with the Kalman filter. My goal is to create a reasonably accurate behavior of a baseball in the real world, so that we can test how our Kalman filter performs with real-world behavior. In real world applications it is usually impossible to completely model the physics of a real world system, and we make do with a process model that incorporates the large scale behaviors. We then tune $\\mathbf{Q}$ and $\\mathbf{R}$ until the filter works well with our data. There is a real risk to this; it is easy to finely tune a Kalman filter so it works perfectly with your test data, but performs badly when presented with slightly different data. This is perhaps the hardest part of designing a Kalman filter, and why it gets referred to with terms such as 'black art'. \n",
|
||||
"\n",
|
||||
"I dislike books that implement things without explanation, so I will now develop the physics for a ball moving through air. Move on past the implementation of the simulation if you are not interested. \n",
|
||||
"\n",
|
||||
"A ball moving through air encounters wind resistance. This imparts a force on the wall, called *drag*, which alters the flight of the ball. In Giordano this is denoted as\n",
|
||||
"\n",
|
||||
@@ -1420,73 +1427,254 @@
|
||||
"$$ a_x = -\\frac{B_2}{m}v v_x\\\\\n",
|
||||
"a_y = -\\frac{B_2}{m}v v_y$$\n",
|
||||
"\n",
|
||||
"Giordano provides this function for $\\frac{B_2}{m}$, which takes air density, the cross section of a baseball, and its roughness into account. Understand that this is an approximation based on wind tunnel tests and several simplifying assumptions. \n",
|
||||
"Giordano provides the following function for $\\frac{B_2}{m}$, which takes air density, the cross section of a baseball, and its roughness into account. Understand that this is an approximation based on wind tunnel tests and several simplifying assumptions. It is in SI units: velocity is in meters/sec and time is in seconds.\n",
|
||||
"\n",
|
||||
"$$\\frac{B_2}{m} = 0.0039 + \\frac{0.0058}{1+e^{(v-35)/5}}$$\n",
|
||||
"$$\\frac{B_2}{m} = 0.0039 + \\frac{0.0058}{1+\\exp{[(v-35)/5]}}$$\n",
|
||||
"\n",
|
||||
"\n"
|
||||
"Starting with this Euler discretation of the ball path in a vacuum:\n",
|
||||
"$$\\begin{aligned}\n",
|
||||
"x &= v_x \\Delta t \\\\\n",
|
||||
"y &= v_y \\Delta t \\\\\n",
|
||||
"v_x &= v_x \\\\\n",
|
||||
"v_y &= v_y - 9.8 \\Delta t\n",
|
||||
"\\end{aligned}\n",
|
||||
"$$\n",
|
||||
"\n",
|
||||
"We can incorporate this force (acceleration) into our equations by incorporating $accel * \\Delta t$ into the velocity update equations. We should subtract this compenent because drag will reduce the velocity. The code to do this is quite straightforward, we just need to break out the Force into $x$ and $y$ components. \n",
|
||||
"\n",
|
||||
"I will not belabor this issue further because the computational physics is beyond the scope of this book. Recognize that a higher fidelity simulation would require incorporating things like altitude, temperature, ball spin, and several other factors. My intent here is to impart some real-world behavior into our simulation to test how our simpler prediction model used by the Kalman filter reacts to this behavior. Your process model will never exactly model what happens in the world, and a large factor in designing a good Kalman filter is carefully testing how it performs against real world data. \n",
|
||||
"\n",
|
||||
"The code below computes the behavior of a baseball in air, at sea level, in the presense of wind. I plot the same initial hit with no wind, and then with a tail wind at 10 mph. Baseball statistics are universally done in US customary units, and we will follow suit here (http://en.wikipedia.org/wiki/United_States_customary_units). Note that the velocity of 50 m/s corresponds to a velocity of 110 mph, which is a typical exit speed for a baseball for a home run hit."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from math import sqrt, exp\n",
|
||||
"def a_drag(v):\n",
|
||||
" #return 4.0E-5 * v\n",
|
||||
" return 0.0039 + 0.0058 / (1. + exp((v-35.)/5.))\n",
|
||||
"from math import sqrt, exp, cos, sin, radians\n",
|
||||
"\n",
|
||||
"mph_to_m_s = 0.447 # mph to meters/sec\n",
|
||||
"v = 50\n",
|
||||
"def drag_force(velocity):\n",
|
||||
" \"\"\" Returns the force on a baseball due to air drag at\n",
|
||||
" the specified velocity. Units are SI\"\"\"\n",
|
||||
"\n",
|
||||
" return (0.0039 + 0.0058 / (1. + exp((velocity-35.)/5.))) * velocity\n",
|
||||
"\n",
|
||||
"v = 50.\n",
|
||||
"y = 1\n",
|
||||
"x = 0\n",
|
||||
"dt = .001\n",
|
||||
"dt = .1\n",
|
||||
"theta = radians(35)\n",
|
||||
"\n",
|
||||
"def solve(x,y,v, v_wind):\n",
|
||||
" vx = v*cos(theta)\n",
|
||||
" vy = v*sin(theta)\n",
|
||||
"def solve(x, y, vel, v_wind, launch_angle):\n",
|
||||
" xs = []\n",
|
||||
" ys = []\n",
|
||||
" v_x = vel*cos(launch_angle)\n",
|
||||
" v_y = vel*sin(launch_angle)\n",
|
||||
" while y >= 0:\n",
|
||||
" # Euler equations for x and y\n",
|
||||
" x += vx*dt\n",
|
||||
" y += vy*dt\n",
|
||||
" x += v_x*dt\n",
|
||||
" y += v_y*dt\n",
|
||||
"\n",
|
||||
" # force due to air drag \n",
|
||||
" v = sqrt ((vx-v_wind)**2 + vy**2) \n",
|
||||
" F = a_drag(v)*v\n",
|
||||
" velocity = sqrt ((v_x-v_wind)**2 + v_y**2) \n",
|
||||
" F = drag_force(velocity)\n",
|
||||
"\n",
|
||||
" # euler's equations for vx and vy\n",
|
||||
" vx = vx - F*(vx-v_wind)*dt\n",
|
||||
" vy = vy - 9.8*dt - F*vy*dt\n",
|
||||
" \n",
|
||||
" #plt.scatter(x,y)\n",
|
||||
" return x, y\n",
|
||||
" v_x = v_x - F*(v_x-v_wind)*dt\n",
|
||||
" v_y = v_y - 9.8*dt - F*v_y*dt\n",
|
||||
" \n",
|
||||
"x,y = solve(0, 1, v, 10*mph_to_m_s)\n",
|
||||
"x2,y2 = solve(0, 1, v, -10*mph_to_m_s)\n",
|
||||
"print (x,x2)\n",
|
||||
"(x-x2)*3.28"
|
||||
" xs.append(x)\n",
|
||||
" ys.append(y)\n",
|
||||
" \n",
|
||||
" return xs, ys\n",
|
||||
" \n",
|
||||
"x,y = solve(x=0, y=1, vel=v, v_wind=0, launch_angle=theta)\n",
|
||||
"p1 = plt.scatter(x, y, color='blue')\n",
|
||||
"\n",
|
||||
"x,y = solve(x=0, y=1,vel=v, v_wind=4.47, launch_angle=theta) # roughly 10 mph wind\n",
|
||||
"p2 = plt.scatter(x, y, color='green', marker=\"v\")\n",
|
||||
"plt.legend([p1,p2], ['no wind', '10mph wind'])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"output_type": "stream",
|
||||
"stream": "stdout",
|
||||
"text": [
|
||||
"132.904542049 115.061343571\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "pyout",
|
||||
"prompt_number": 289,
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"58.52569100894303"
|
||||
"<matplotlib.figure.Figure at 0x3424650>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 289
|
||||
"prompt_number": 29
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"We can easily see the difference between the trajectory in a vacuum and in the air. I used the same initial velocity and launch angle in the ball in a vacuum section above. We computed that the ball in a vacuum would travel over 240 meters (nearly 800 ft). In the air, the distance is just over 120 meters, or roughly 400 ft. 400ft is a realistic distance for a well hit home run ball, so we can be confident that our simulation is reasonably accurate.\n",
|
||||
"\n",
|
||||
"Without further ado we will create a ball simulation that uses the math above to create a more realistic ball trajectory. I will note that the nonlinear behavior of drag means that there is no analytic solution to the ball position at any point in time, so we need to compute the position step-wise. I use Euler's method to propogate the solution; use of a more accurate technique such as Runge-Kutta is left as an exercise for the reader. That modest complication is unnessesary for what we are doing because the accuracy difference between the techniques will be small for the time steps we will be using. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"from math import radians, sin, cos, sqrt, exp\n",
|
||||
"\n",
|
||||
"class BaseballPath(object):\n",
|
||||
" def __init__(self, x0, y0, launch_angle_deg, velocity_ms, noise=(1.0,1.0)): \n",
|
||||
" \"\"\" Create 2D baseball path object \n",
|
||||
" (x = distance from start point in ground plane, y=height above ground)\n",
|
||||
" \n",
|
||||
" x0,y0 initial position\n",
|
||||
" launch_angle_deg angle ball is travelling respective to ground plane\n",
|
||||
" velocity_ms speeed of ball in meters/second\n",
|
||||
" noise amount of noise to add to each reported position in (x,y)\n",
|
||||
" \"\"\"\n",
|
||||
" \n",
|
||||
" omega = radians(launch_angle_deg)\n",
|
||||
" self.v_x = velocity_ms * cos(omega)\n",
|
||||
" self.v_y = velocity_ms * sin(omega)\n",
|
||||
"\n",
|
||||
" self.x = x0\n",
|
||||
" self.y = y0\n",
|
||||
"\n",
|
||||
" self.noise = noise\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" def drag_force (self, velocity):\n",
|
||||
" \"\"\" Returns the force on a baseball due to air drag at\n",
|
||||
" the specified velocity. Units are SI\n",
|
||||
" \"\"\"\n",
|
||||
" B_m = 0.0039 + 0.0058 / (1. + exp((velocity-35.)/5.))\n",
|
||||
" return B_m * velocity\n",
|
||||
"\n",
|
||||
"\n",
|
||||
" def update(self, dt, vel_wind=0.):\n",
|
||||
" \"\"\" compute the ball position based on the specified time step and\n",
|
||||
" wind velocity. Returns (x,y) position tuple.\n",
|
||||
" \"\"\"\n",
|
||||
"\n",
|
||||
" # Euler equations for x and y\n",
|
||||
" self.x += self.v_x*dt\n",
|
||||
" self.y += self.v_y*dt\n",
|
||||
"\n",
|
||||
" # force due to air drag\n",
|
||||
" v_x_wind = self.v_x - vel_wind\n",
|
||||
" v = sqrt (v_x_wind**2 + self.v_y**2)\n",
|
||||
" F = self.drag_force(v)\n",
|
||||
"\n",
|
||||
" # Euler's equations for velocity\n",
|
||||
" self.v_x = self.v_x - F*v_x_wind*dt\n",
|
||||
" self.v_y = self.v_y - 9.81*dt - F*self.v_y*dt\n",
|
||||
"\n",
|
||||
" return (self.x + random.randn()*self.noise[0], \n",
|
||||
" self.y + random.randn()*self.noise[1])"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"prompt_number": 30
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Now we can test the Kalman filter against measurements created by this model. There is truly a significant difference in the predictions by the process model; the Kalman filter assumes that the ball is in a vacuum, and thus predicts that the ball would travel about twice as far as it actually does."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"collapsed": false,
|
||||
"input": [
|
||||
"y = 1.\n",
|
||||
"x = 0.\n",
|
||||
"theta = 35. # launch angle\n",
|
||||
"v0 = 50.\n",
|
||||
"dt = 1/10. # time step\n",
|
||||
"\n",
|
||||
"ball = BaseballPath(x0=x, y0=y, launch_angle_deg=theta, velocity_ms=v0, noise=[.3,.3])\n",
|
||||
"f1 = ball_kf(x,y,theta,v0,dt,r=1.)\n",
|
||||
"f2 = ball_kf(x,y,theta,v0,dt,r=10.)\n",
|
||||
"t = 0\n",
|
||||
"xs = []\n",
|
||||
"ys = []\n",
|
||||
"xs2 = []\n",
|
||||
"ys2 = []\n",
|
||||
"\n",
|
||||
"while f1.x[2,0] > 0:\n",
|
||||
" t += dt\n",
|
||||
" x,y = ball.update(dt)\n",
|
||||
" z = np.mat([[x,y]]).T\n",
|
||||
"\n",
|
||||
" f1.update(z)\n",
|
||||
" f2.update(z)\n",
|
||||
" xs.append(f1.x[0,0])\n",
|
||||
" ys.append(f1.x[2,0])\n",
|
||||
" xs2.append(f2.x[0,0])\n",
|
||||
" ys2.append(f2.x[2,0]) \n",
|
||||
" f1.predict() \n",
|
||||
" f2.predict()\n",
|
||||
" \n",
|
||||
" p1 = plt.scatter(x, y, color='green', marker='o', s=75, alpha=0.5)\n",
|
||||
"\n",
|
||||
"p2, = plt.plot (xs, ys,lw=2)\n",
|
||||
"p3, = plt.plot (xs2, ys2,lw=4, c='r')\n",
|
||||
"plt.legend([p1,p2, p3], ['Measurements', 'Kalman filter(R=0.5)', 'Kalman filter(R=10)'])\n",
|
||||
"plt.show()"
|
||||
],
|
||||
"language": "python",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"metadata": {},
|
||||
"output_type": "display_data",
|
||||
"png": "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 truncated
|
||||
"text": [
|
||||
"<matplotlib.figure.Figure at 0x3443950>"
|
||||
]
|
||||
}
|
||||
],
|
||||
"prompt_number": 48
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I have plotted the output of two different Kalman filter settings. The measurements are depicted as green circles, a Kalman filter with R=0.5 as a thin blue line, and a Kalman filter with R=10 as a thick red line. These R values are chosen merely to show the effect of $\\textbf{R}$ on the output, they are not intended to imply a correct design.\n",
|
||||
"\n",
|
||||
"With R=0.5 we see that the Kalman filter follows the measurements quite closely, albeit slightly overshooting at the end of the trajectory. This small value of R tells the Kalman filter that we expect there to be about 1/2 meter error in the ball measurements, which is quite small, so the Kalman filter prefers the position implied by the measurement vs the process model. The small amount of overshoot is attributable to the incorrect assumption that the ball is travelling in a vacuum during the predict step. We see the effect of this when we set R=10, which incorrectly tells the Kalman filter that the noise in the measurments is on order of 10 meters. In this case the Kalman filter weights the prediction more, and the trajectory ends up overshoooting the measurements because air drag is not being considered by the filter. \n",
|
||||
"\n",
|
||||
"At this point we should question the value of $\\textbf{Q}$, which tells the Kalman filter how much process noise there is in the system. We can think of air drag as process noise, and setting $Q=\\verb,I*0.1,$, for example, would cause the Kalman filter to fit the measurements quite well. If you are reading this in IPython Notebook I urge you to modify the code above to see the effects of various values for $\\textbf{Q}$ and $\\textbf{R}$. \n",
|
||||
"\n",
|
||||
"However, the errors caused by our process model are anything but Gaussian, so a large $\\textbf{Q}$ is a poor representation of the errors in the model. A better approach is to redesign the Kalman filter to model the behavior of a ball in air.\n",
|
||||
"\n",
|
||||
"This is where Kalman filter design becomes an 'art'. I prefer to think of it as emperical engineering. We try designs, measure their performance, work to understand the limits of the mathematical model that we are using, make changes based on that new understanding, and measure the performance of that new system to see if it matches our expectations. Blithely changing $\\textbf{Q}$ and $\\textbf{R}$ will eventually give you a filter that performs very well for a specific set of data, but the filter is likely to perform badly in different situations. Much of this theory and practice was developed by the radar folks in the 1960s and beyond. They were trying to develop filters to track aircraft and missles based on signals generated by radar. Testing was (and is) cumbersome and expensive, and they endlessly faught against overtuning their filters to the rather sparse data they had available. Your application may be less expensive and difficult to test, and you must do everything you can to ensure that your filter is robust in the presense of various process noise. There is significant literature devoted to this topic, and you will have to read it and master it if your application is critical. An excellent introduction to the topic (and excellent introduction to Kalman filters taking a g-h filters approach is the book *Tracking and Kalman Filters Made Easy* by Eli Brookner. I highly recommend this book even if tracking is not your primary interest, as its approach to the math is very clear, yet still rigorous."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
"level": 3,
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Kalman Filter with Air Drag"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"I will dispense with the step 1, step 2, type approach and proceed in a more natural style that you would use in a non-toy engineering problem. We have already developed a Kalman filter that does excellently at tracking a ball in a vacuum, but that does not incorporate the effects of air drag into the model. We know that the process model is implemented with $\\textbf{F}$, so we will turn our attention to that immediately.\n",
|
||||
"\n",
|
||||
"Notionally, the computation that $\\textbf{F}$ computes is\n",
|
||||
"\n",
|
||||
"$$x' = Fx$$\n",
|
||||
"\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "heading",
|
||||
|
||||
+109
-62
@@ -7,89 +7,136 @@ Created on Sat Jul 5 16:07:29 2014
|
||||
|
||||
import numpy as np
|
||||
from KalmanFilter import KalmanFilter
|
||||
from math import radians, sin, cos
|
||||
from math import radians, sin, cos, sqrt, exp
|
||||
import numpy.random as random
|
||||
import matplotlib.markers as markers
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
|
||||
class BallPath(object):
|
||||
def __init__(self, x0, y0, omega_deg, velocity, g=9.8, noise=[1.0,1.0]):
|
||||
omega = radians(omega_deg)
|
||||
self.vx0 = velocity * cos(omega)
|
||||
self.vy0 = velocity * sin(omega)
|
||||
|
||||
|
||||
self.x0 = x0
|
||||
self.y0 = y0
|
||||
|
||||
|
||||
self.g = g
|
||||
self.noise = noise
|
||||
|
||||
|
||||
def pos_at_t(self, t):
|
||||
""" returns (x,y) tuple of ball position at time t"""
|
||||
x = self.vx0*t + self.x0
|
||||
y = -0.5*self.g*t**2 + self.vy0*t + self.y0
|
||||
|
||||
|
||||
return (x +random.randn()*self.noise[0], y +random.randn()*self.noise[1])
|
||||
|
||||
|
||||
|
||||
class BaseballPath(object):
|
||||
def __init__(self, x0, y0, omega_deg, velocity, noise=[1.0,1.0]):
|
||||
omega = radians(omega_deg)
|
||||
self.v_x = velocity * cos(omega)
|
||||
self.v_y = velocity * 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 test_baseball_path():
|
||||
ball = BaseballPath (0, 1, 35, 50)
|
||||
while ball.y > 0:
|
||||
ball.update (0.1, 0.)
|
||||
plt.scatter (ball.x, ball.y)
|
||||
|
||||
|
||||
|
||||
|
||||
y = 15
|
||||
x = 0
|
||||
omega = 0.
|
||||
noise = [1,1]
|
||||
v0 = 100.
|
||||
ball = BallPath (x0=x, y0=y, omega_deg=omega, velocity=v0, noise=noise)
|
||||
t = 0
|
||||
dt = 1
|
||||
g = 9.8
|
||||
|
||||
|
||||
f1 = KalmanFilter(dim=6)
|
||||
dt = 1/30. # time step
|
||||
|
||||
ay = -.5*dt**2
|
||||
|
||||
f1.F = np.mat ([[1, dt, 0, 0, 0, 0], # x=x0+dx*dt
|
||||
[0, 1, dt, 0, 0, 0], # dx = dx
|
||||
[0, 0, 0, 0, 0, 0], # ddx = 0
|
||||
[0, 0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2
|
||||
[0, 0, 0, 0, 1, dt], # dy = dy0 + ddy*dt
|
||||
[0, 0, 0, 0, 0, 1]]) # ddy = -g
|
||||
f1.B = 0.
|
||||
|
||||
f1.H = np.mat([
|
||||
[1, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 0, 0]])
|
||||
|
||||
f1.R = np.eye(2) * 5
|
||||
f1.Q = np.eye(6) * 0.
|
||||
|
||||
omega = radians(omega)
|
||||
vx = cos(omega) * v0
|
||||
vy = sin(omega) * v0
|
||||
|
||||
f1.x = np.mat([x,vx,0,y,vy,-9.8]).T
|
||||
|
||||
f1.P = np.eye(6) * 500.
|
||||
|
||||
|
||||
|
||||
|
||||
z = np.mat([[0,0]]).T
|
||||
count = 0
|
||||
markers.MarkerStyle(fillstyle='none')
|
||||
|
||||
np.set_printoptions(precision=4)
|
||||
while f1.x[3,0] > 0:
|
||||
count += 1
|
||||
#f1.update (z)
|
||||
f1.predict()
|
||||
print f1.x[0,0], f1.x[3,0]
|
||||
#markers.set_fillstyle('none')
|
||||
plt.scatter(f1.x[0,0],f1.x[3,0], color='green')
|
||||
|
||||
def test_ball_path():
|
||||
|
||||
y = 15
|
||||
x = 0
|
||||
omega = 0.
|
||||
noise = [1,1]
|
||||
v0 = 100.
|
||||
ball = BallPath (x0=x, y0=y, omega_deg=omega, velocity=v0, noise=noise)
|
||||
dt = 1
|
||||
|
||||
|
||||
f1 = KalmanFilter(dim=6)
|
||||
dt = 1/30. # time step
|
||||
|
||||
ay = -.5*dt**2
|
||||
|
||||
f1.F = np.mat ([[1, dt, 0, 0, 0, 0], # x=x0+dx*dt
|
||||
[0, 1, dt, 0, 0, 0], # dx = dx
|
||||
[0, 0, 0, 0, 0, 0], # ddx = 0
|
||||
[0, 0, 0, 1, dt, ay], # y = y0 +dy*dt+1/2*g*dt^2
|
||||
[0, 0, 0, 0, 1, dt], # dy = dy0 + ddy*dt
|
||||
[0, 0, 0, 0, 0, 1]]) # ddy = -g
|
||||
f1.B = 0.
|
||||
|
||||
f1.H = np.mat([
|
||||
[1, 0, 0, 0, 0, 0],
|
||||
[0, 0, 0, 1, 0, 0]])
|
||||
|
||||
f1.R = np.eye(2) * 5
|
||||
f1.Q = np.eye(6) * 0.
|
||||
|
||||
omega = radians(omega)
|
||||
vx = cos(omega) * v0
|
||||
vy = sin(omega) * v0
|
||||
|
||||
f1.x = np.mat([x,vx,0,y,vy,-9.8]).T
|
||||
|
||||
f1.P = np.eye(6) * 500.
|
||||
|
||||
z = np.mat([[0,0]]).T
|
||||
count = 0
|
||||
markers.MarkerStyle(fillstyle='none')
|
||||
|
||||
np.set_printoptions(precision=4)
|
||||
while f1.x[3,0] > 0:
|
||||
count += 1
|
||||
#f1.update (z)
|
||||
f1.predict()
|
||||
plt.scatter(f1.x[0,0],f1.x[3,0], color='green')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
test_baseball_path()
|
||||
#test_ball_path()
|
||||
|
||||
|
||||
Reference in new issue
Block a user