{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n"
],
"text/plain": [
""
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from __future__ import division, print_function\n",
"%matplotlib inline\n",
"import sys\n",
"sys.path.insert(0,'..') # allow us to format the book\n",
"sys.path.insert(0,'../code') # allow us to format the book\n",
"\n",
"# use same formatting as rest of book so that the plots are\n",
"# consistant with that look and feel.\n",
"import book_format\n",
"book_format.load_style('..')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook creates the animations for the Multivariate Kalman Filter chapter. It is not really intended to be a readable part of the book, but of course you are free to look at the source code, and even modify it. However, if you are interested in running your own animations, I'll point you to the examples subdirectory of the book, which contains a number of python scripts that you can run and modify from an IDE or the command line. This module saves the animations to GIF files, which is quite slow and not very interactive. "
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import filterpy.stats as stats\n",
"import numpy as np\n",
"from matplotlib.patches import Ellipse\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import cm\n",
"from mpl_toolkits.mplot3d import Axes3D"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\ncggNLEXlkP8HKdlapkoh5fEAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import mkf_internal\n",
"import matplotlib.pyplot as plt\n",
"from gif_animate import animate\n",
"\n",
"def ellipse_animate(frame):\n",
" \n",
" plt.cla()\n",
" cov = frame/15.\n",
" P = np.array([[2,cov],[cov,2]])\n",
" stats.plot_covariance_ellipse((2,7), cov=P, facecolor='g', alpha=0.2, \n",
" title='|2.0 {:.1f}|\\n|{:.1f} 2.0|'.format(cov, cov))\n",
"fig = plt.figure()\n",
"animate('multivariate_ellipse.gif', ellipse_animate, 30, 125, figsize=(3, 3))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"from matplotlib.patches import Ellipse\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib import cm\n",
"from mpl_toolkits.mplot3d import Axes3D\n",
"from gif_animate import animate\n",
"import numpy.random as random\n",
"from DogSimulation import DogSimulation\n",
"import filterpy.stats\n",
"from filterpy.common import Q_discrete_white_noise\n",
"from filterpy.kalman import KalmanFilter\n",
"\n",
"def dog_tracking_filter(R,Q=0,cov=1.):\n",
" dog_filter = KalmanFilter (dim_x=2, dim_z=1)\n",
" dog_filter.x = np.array([0, 0]) # initial state (location and velocity)\n",
" dog_filter.F = np.array([[1,1],\n",
" [0,1]]) # state transition matrix\n",
" dog_filter.H = np.array([[1,0]]) # Measurement function\n",
" dog_filter.R *= R # measurement uncertainty\n",
" dog_filter.P *= cov # covariance matrix \n",
" if np.isscalar(Q):\n",
" dog_filter.Q = Q_discrete_white_noise(2, var=Q)\n",
" else:\n",
" dog_filter.Q = Q\n",
" return dog_filter\n",
"\n",
"R = 5.\n",
"Q = .01\n",
"noise = 2.\n",
"P = 20.\n",
"dog = DogSimulation(measurement_variance=R, process_variance=Q)\n",
"f = dog_tracking_filter(R=R, Q=Q, cov=P)\n",
"random.seed(200)\n",
"zs = []\n",
"xs = []\n",
"def animate_track(frame):\n",
" if frame > 30: return\n",
" \n",
" plt.gca().set_xlim(-100,100)\n",
" if frame == 0:\n",
" stats.plot_covariance_ellipse ((0, f.x[0]), cov=f.P, axis_equal=True, \n",
" facecolor='g', edgecolor=None, alpha=0.2)\n",
" xs.append (f.x[0])\n",
" \n",
" z = dog.move_and_sense()\n",
" zs.append(z)\n",
" f.update(z)\n",
" xs.append (f.x[0])\n",
" \n",
" stats.plot_covariance_ellipse ((frame+1, f.x[0]), cov=f.P, axis_equal=True, \n",
" facecolor='g', edgecolor=None, alpha=0.5,\n",
" xlim=(-5,30), ylim=(-5,30))\n",
" \n",
" plt.plot(zs, color='r', linestyle='dashed')\n",
" plt.plot(xs, color='b')\n",
" f.predict()\n",
"\n",
"animate('multivariate_track1.gif', animate_track, 37, 200, figsize=(5.5, 5.5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}