{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from scipy.stats import norm" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Kalman Filter Implementation for Constant Velocity Model (CV) in Python\n", "\n", "![Image](http://www.cbcity.de/wp-content/uploads/2013/06/Fahrzeug_GPS_Tunnel-520x181.jpg)\n", "\n", "Situation covered: You drive with your car in a tunnel and the GPS signal is lost. Now the car has to determine, where it is in the tunnel. The only information it has, is the velocity in driving direction. The x and y component of the velocity ($\\dot x$ and $\\dot y$) can be calculated from the absolute velocity (revolutions of the wheels) and the heading of the vehicle (yaw rate sensor).\n", "\n", "`CC-BY-SA2.0 Lizenz Paul Balzer, Motorblog http://www.cbcity.de` " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "![Kalman Filter](Kalman-Filter-Step.png)\n", "\n", "First, we have to initialize the matrices and vectors. Setting up the math." ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "## State Vector\n", "\n", "Constant Velocity Model for Ego Motion\n", "\n", "$$x_k= \\left[ \\matrix{ x \\\\ y \\\\ \\dot x \\\\ \\dot y} \\right] = \\matrix{ \\text{Position X} \\\\ \\text{Position Y} \\\\ \\text{Velocity in X} \\\\ \\text{Velocity in Y}}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Formal Definition (Motion of Law):\n", "\n", "$$x_{k+1} = \\textbf{A} \\cdot x_{k}$$\n", "\n", "which is\n", "\n", "$$x_{k+1} = \\begin{bmatrix}1 & 0 & \\Delta t & 0 \\\\ 0 & 1 & 0 & \\Delta t \\\\ 0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1 \\end{bmatrix} \\cdot \\begin{bmatrix} x \\\\ y \\\\ \\dot x \\\\ \\dot y \\end{bmatrix}_{k}$$" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "Observation Model:\n", "\n", "$$y = \\textbf{H} \\cdot x$$\n", "\n", "which is\n", "\n", "$$y = \\begin{bmatrix}0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1\\end{bmatrix} \\cdot x$$ means: You observe the velocity directly in the correct unit" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Initial State $x_0$\n", "\n", "$$x_{0} = \\begin{bmatrix}0 \\\\ 0 \\\\ 0 \\\\ 0\\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0.]\n", " [0.]\n", " [0.]\n", " [0.]] (4, 1)\n" ] } ], "source": [ "x = np.matrix([[0.0, 0.0, 0.0, 0.0]]).T\n", "print(x, x.shape)\n", "#plt.scatter(float(x[0]),float(x[1]), s=100)\n", "#plt.title('Initial Location')" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Initial Uncertainty $P_0$\n", "\n", "$$P_{0} = \\begin{bmatrix}\\sigma^2_x & 0 & 0 & 0 \\\\ 0 & \\sigma^2_y & 0 & 0 \\\\ 0 & 0 & \\sigma^2_{\\dot x} & 0 \\\\ 0 & 0 & 0 & \\sigma^2_{\\dot y} \\end{bmatrix}$$\n", "\n", "with $\\sigma$ as the standard deviation" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1000. 0. 0. 0.]\n", " [ 0. 1000. 0. 0.]\n", " [ 0. 0. 1000. 0.]\n", " [ 0. 0. 0. 1000.]] (4, 4)\n" ] } ], "source": [ "P = np.diag([1000.0, 1000.0, 1000.0, 1000.0])\n", "print(P, P.shape)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZQAAAF3CAYAAACCFb2MAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAHddJREFUeJzt3X2wJXV95/H3JzyqBAFnRAQUjBizxF0fJgYNsZSHIK4RqUhByAbKsEtcISZgoiYbFuKmAC1WDDGLNZEkaBElMVbEhKwhogXZWkhmoqsiUUZQZ4DATIangBMe/O4f3ROOw5177zmnb997+75fVafO6YfT/etzZ+7nfPv3676pKiRJmtYPLHYDJEnDYKBIkjphoEiSOmGgSJI6YaBIkjphoEiSOmGgSJI6YaAMVJJbkrx20uUj630ryTFdtm2hzPeYhmglH7uWDgNlGRnnl3tVHV5VX9jZ+0aXd9CuU5OsS/IvSe5O8ldJjuxi2+Po8pi60H7ujyZZtcP8LyWpJIfMcxtz/swnPfYk+7Zt+ZckjyS5K8mvjLsdCQwUTSnJucAHgQuB/YHnAf8LOKHHNuza174mcAfws9snkrwEeFpXG+/g2F8KbK6qvarq6cB/BS5NctD0rdNKY6AsU+03119N8uUkDyS5OsmeOyw/JsnHaH7Jf6b9Fvqu0eXt6/ck+WaSh5J8LcmJ82zDM4H3AmdV1aeq6uGqeqyqPlNVv9au8yNJvpDk/va0zJtG9vnJHbb3O0kum0+b2va/O8mXgYeT7DrfY5rHZ3dwkk8l2Zzkn5N8aGTZc5P8WbvsjiTvmONj+hhw2sj06cBHdziWGds6x89uxmNP8kNJtiZ5+Uh7t8xyOuylwN+PTN/cPu8+x3FJT1VVPpbJA/gWcMzI678DngvsB9wKvG2WdY+ZZVsntdv5AeBk4GHggJ29d2QbrwceB3bdyfLdgA3Ab9D8gjoKeAj4YeD5wCPA3u26uwB3A0fM1aaRdn0JOBh42gTHNONn17bj/wGXAs8A9gSObJf9ALAe+O/t8bwAuB04brafF/B14EfabW9sj72AQyb5/Odx7P+lPaanA58FLpnl39RHgfPb1/sAVwDrgCz2v3cfy+9hhbK8XVZVd1XVVuAzNN82x1ZVf9pu53tVdTVwG/DKebz1WcCWqnp8J8uPAPYCLq6qR6vqeuAvgJ+tqm8D/wC8uV33KOCRqrppjDZdVlUbq+q7ExzTzj67V9L8cv+1aiqubVX1t+2yHwNWV9V72+O5Hfh94JQ5PqftVcqxwD8Cd47Z1pnMduy/327jZuAA4L/Nsp2XAr+WZCtNWBbw01XlXWM1tqV87llz+6eR14/Q/CIcW5LTgHOBQ9pZewGrdvqGJ/0zsCrJrjsJlecCG6vqeyPzvg0c2L7+Y5r+hY8Cp7bT47Rp484aNo/37+yzOxj49k6O5/nAc5PcPzJvF+DGnbWj9THgBuBQdjjdNc+2zmSnx976feAa4Myq+teZVkiyB03ldGhVbZpje9KcrFBWhp1+20zyfJpfPmcDz6qqfYCvApnHdv8vsI0nq4wd3QUcnGT039nzePIb+p8Cr207gE+kDZQx2jTjcU15TBuB5+2ks3sjcEdV7TPy+MGqesNsG2yrsTuANwCfGrOtO/vZzfYz3YtmoMQVwAVJ9tvJqj8KPGyYqCsGyspwD835/pk8g+aX02aAJG+l+UUzp6p6gKY/4feSvDnJ05PsluT4JO+nOeXyMPCudv5rgZ8GPtG+fzPwBeAPaX5R3zptmzp4/9/R9OVcnOQZSfZM8hMjyx5sO8SflmSXJD+a5Mfmsd0zgKOq6uEx2zrbz25nfgdYX1X/GfhL4MM7We9lwC1jblvaKQNlZbgI+M12pNWvji6oqq8B/5Om2rgHeAnwf+a74ar6AM3pmt+k+aW4kebb9p9X1aPAm4DjgS00w4lPq6p/HNnEH9N0XP/xyDanbdPE76+qJ2hC74XAd4BNNB3lo8teSlNxbAE+AjxzHtv9ZlWtm6CtO/3ZzSTJCTSDJd7WzjoXeHmSn5th9ZfSVENSJ2LfmySpC1YokqROGCiSNCBJ/iDJvUm+OjJvvyTXJbmtfd63nZ8klyXZ0F7o+/KR95zern9bktPns28DRZKG5Y9o+tFGvQf4XFUdBnyunYamf/Ow9nEmcDk0AQScD/w4zTVR528PodkYKJI0IFV1A7B1h9knAFe2r6/kyaH+JwAfrcZNwD5JDgCOA66rqq1VdR9wHU8NqacwUCRp+PavqrsB2udnt/MP5Psvkt3UztvZ/Fkt2pXySRxeNqZXvOIVi90ESbNYv379lqpaPds6Hfzuu4XmguLt1lbV2gm3NdPFvjXL/Fl565VlZN26p1zGIGkJSfLtHnazrarWjPmee5IcUFV3t6e07m3nb6K53dB2B9Hc4WIT8Nod5n9hrp14ykuSepZk4seErqH50wm0z58emX9aO9rrCOCB9pTYZ4GfSvMH2PYFfqqdNysrFEnq2RTBwFwXoyf5OE11sSrJJprRWhcDf5LkDJo7QJzUrn4tzT3mNtDcJPWt7T62JvkfPPm3ct7b3pl79n0v1pXy9qGMz7saSEtbkvVznY5KUrvsssvE+3jiiSfm3MdisUKRpJ5NU6EsZQaKJPVoyr6QJc1OeUlSJ6xQJKlnQ61QDBRJ6pmBIknqhIEiSerEUAPFTnlJUiesUCSpR0MeNmygSFLPDBRJUicMFElSJwwUSVInhhoojvKSJHXCCkWSeuQoL0lSZwwUSVInDBRJUicMFElSJ4YaKI7ykiR1wgpFknrkKC9JUmcMFElSJwwUSVInDBRJUieGGiiO8pIkdcIKRZJ65CgvSVJnDBRJUicMFElSJ4YaKPPulE9yYZJKct0My5Lkqnb5tUl267aZkqSlbpxRXhcB9wLHJDlmh2W/C5wK3Aj8TFU91lH7JGlwtnfMT/JYyuYdKFX1EPBb7eRF2+cneS9wFrAeeGNVfbfTFkrSgEwTJks9UMbtQ1kL/BKwJslbgAOB84BbgddX1YMdt0+SBmepB8OkxgqUqno8ybuBTwOXA88CvgUcW1Vb5np/kjOBMydopyQNhoHSqqprktwCHE7bp1JVd87zvWtpqhyS1Lj7lqQhGGqgjH3rlSTvoAkTgD0BT3NJksYLlCSnAx8E7gQ+A+wNnL8A7ZKkwRpqp/w416GcCFwBbAWOpRnZtQ34xSQvWpjmSdKwDHmU17wCpb3u5OPAIzSjuW6tqo3Ah2j6YS5euCZK0rCs2EBJcgTw5+3kCVW1bmTxRcADwIlJjlyA9knS4KzIQEnyEuBaYA/g5Kr6/OjyqtoKvK+dvGRBWihJAzPUQJl12HBVfQXYb451LmLkynlJ0srk3YYlqWdLvdKYlIEiST1aDqeuJmWgSFLPDBRJUicMFElSJ4YaKGPfy0uSpJlYoUhSz4ZaoRgoktQjR3lJkjpjoEiSOjHUQLFTXpIGJMk5SW5J8tUkH0+yZ5JDk9yc5LYkVyfZvV13j3Z6Q7v8kGn2baBIUs8W6uaQSQ4E3gGsqaofBXYBTqG5ie+lVXUYcB9wRvuWM4D7quqFwKU8ebPfiRgoktSzBb7b8K7A05LsCjwduBs4Cvhku/xK4M3t6xPaadrlR2eK83EGiiT1aCH/YmNV3Unzp0S+QxMkDwDrgfur6vF2tU3Age3rA4GN7Xsfb9d/1qTHZqBIUs+mDJRVSdaNPM4c2e6+NFXHocBzgWcAx8/QhNr+llmWjc1RXpLUsylHeW2pqjU7WXYMcEdVbW738yng1cA+SXZtq5CDgLva9TcBBwOb2lNkzwS2TtowKxRJGo7vAEckeXrbF3I08DXg88Bb2nVOBz7dvr6mnaZdfn1VWaFI0nKxUNehVNXNST4J/APwOPBFYC3wl8Ankvx2O++K9i1XAB9LsoGmMjllmv0bKJLUs4W8sLGqzgfO32H27cArZ1h3G3BSV/s2UCSpR97LS5LUGQNFktSJoQaKo7wkSZ2wQpGkng21QjFQJKlnBookaWqO8pIkdcZAkSR1YqiB4igvSVInFq1CecUrXsG6desWa/fL0lC/1Sy0Ke51Jy2Iof5f9pSXJPXMQJEkTc1RXpKkzgw1UOyUlyR1wgpFkno21ArFQJGknhkokqROGCiSpKk5ykuS1JmhBoqjvCRJnbBCkaSeDbVCMVAkqWcGiiSpEwaKJGlqjvKSJHVmqIHiKC9JUiesUCSpZ0OtUAwUSeqZgSJJ6oSBIkmamqO8JEmdGWqgOMpLktQJKxRJ6tlQKxQDRZJ6ZqBIkqZmp7wkqTNDDRQ75SVJnbBCkaSeDbVCMVAkqWcGiiSpEwaKJGlqjvKSJHVmqIHiKC9JUifmFShJ3pSkktw0yzovSrItyV1J9u6uiZI0LNtPe03yWMrme8rrRqCAlyXZs6q2zbDOh4E9gHOq6sGuGihJQ7PUg2FS86pQquo+4BZgd2DNjsuTnAa8Dvjrqrq60xZK0sAMtUIZpw/lxvb5VaMzk+wHXAJsA97eUbskaZCmCZMhBcoN7fOrd5j/fmA1cGFVfbOTVknSgBkoM1QoSY4EfgH4OvC+uTaQ5Mwk65Ks27x581gNlSQtbfMOlKq6E7gD2D/JC5LsRtMRH+DtVfXoPLaxtqrWVNWa1atXT9xoSVrOhlqhjHth4w3AoTSnvQ4GDgeuqqrru26YJA3VUg+GSY0bKDcCpwOnAq8F7gfe2XGbJGnQhhoo414pv70f5XjgacCvV9U93TZJkoarj1FeSfZJ8skk/5jk1iSvSrJfkuuS3NY+79uumySXJdmQ5MtJXj7psY0VKFX1DWB7gNwMrJ10x5K0UvXQh/I7wP+uqhcD/wG4FXgP8LmqOgz4XDsNTYFwWPs4E7h80uMaK1CS7NW+fAJ4W1V9b9IdS5K6l+bWV68BrgCoqker6n7gBODKdrUrgTe3r08APlqNm4B9khwwyb7HPeV1HrA/cFlVfWmSHUrSSrfAFcoLgM3AHyb5YpKPJHkGsH9V3Q3QPj+7Xf9AYOPI+ze188Y270BJchRwLnA7TbBIkiYwZaCs2n49X/s4c4fN7wq8HLi8ql4GPMyTp7dmbM4M82qS45p1lFeSw4FzgOcAxwGPASdX1cOT7EySNPUory1V9ZR7Ko7YBGyqqpvb6U/SBMo9SQ6oqrvbU1r3jqx/8Mj7DwLumqRhc1UoxwFn0JyPuxE4tqrWTbIjSdLCj/Kqqn8CNib54XbW0cDXgGtoLvugff50+/oa4LR2tNcRwAPbT42Na9YKpao+AHxgkg1LkhbNLwFXJdmdppvirTQFxJ8kOQP4DnBSu+61wBuADcAj7boT8U8AS1LPFvrCxnbQ1EynxY6eYd0CzupivwaKJPVsqFfKGyiS1DMDRZLUCQNFkjS15XAb+kmNe6W8JEkzskKRpJ4NtUIxUCSpZwaKJKkTBookqRMGiiRpao7ykiRpDlYoktSzoVYoBook9cxAkSR1wkCRJHXCQJEkTc1RXpIkzcEKRZJ6NtQKxUCRpJ4ZKJKkThgokqRODDVQ7JSXJHXCCkWSejTkYcMGiiT1zECRJHXCQJEkdcJA0aKrqsVuwrI01P+8C8l/awtrqP8mHeUlSeqEFYok9chRXpKkzhgokqROGCiSpE4YKJKkTgw1UBzlJUnqhBWKJPXIUV6SpM4YKJKkThgokqRODDVQ7JSXJHXCCkWSejbUCsVAkaQeOcpLktQZA0WS1AkDRZLUiaEGiqO8JEmdsEKRpJ4NtUIxUCSpR47ykiR1xkCRJHXCQJEkdWKogeIoL0lSJ6xQJKlnQ61QDBRJ6tGQR3l5ykuSerY9VCZ5zHP7uyT5YpK/aKcPTXJzktuSXJ1k93b+Hu30hnb5IdMc11SBkmRVkhcnWTXNdiRpJVnoQAF+Gbh1ZPp9wKVVdRhwH3BGO/8M4L6qeiFwabvexKatUM6mafTZU25HklaMhQyUJAcB/xH4SDsd4Cjgk+0qVwJvbl+f0E7TLj86U5yP85SXJA3LB4F3Ad9rp58F3F9Vj7fTm4AD29cHAhsB2uUPtOtPZKpAqaoLqipVdcE025GklWTKCmVVknUjjzNHtvtG4N6qWj+6uxmaUPNYNjZHeUlSjzoY5bWlqtbsZNlPAG9K8gZgT2BvmoplnyS7tlXIQcBd7fqbgIOBTUl2BZ4JbJ20YZ7ykqSeLVQfSlX9elUdVFWHAKcA11fVzwGfB97SrnY68On29TXtNO3y66vKCkWSlotFuA7l3cAnkvw28EXginb+FcDHkmygqUxOmWYn865QklyYpJJcN8OyJLmqXX5tkt2maZQkaTpV9YWqemP7+vaqemVVvbCqTqqqf23nb2unX9guv32afY5zyusi4F7gmCTH7LDsd4FTgRuBn6mqx6ZplCQNWQ/XoSyKeQdKVT0E/FY7edH2+UneC5wFrAfeWFXf7bSFkjQwQw2UcftQ1gK/BKxJ8haaMczn0Vzc+PqqerDj9knSoCyHYJjUWIFSVY8neTfNCIHLaS6A+RZwbFVtmev97XjpMwGe97znjd1YSRqCoQbK2MOGq+oa4BZgFbAZOKaq7pzne9dW1ZqqWrN69epxdy1JgzDUU15jB0qSdwCHt5N7Ap7mkiSNFyhJTqe56vJO4DM0V2GevwDtkqTBWvEVSpITaS6C2QocSzOyaxvwi0letDDNk6RhmSZMBhEo7XUnHwceoRnNdWtVbQQ+RNOxf/HCNVGShmXFBkqSI4A/bydPqKp1I4svornd8YlJjlyA9knS4KzIQEnyEuBaYA/g5Kr6/OjyqtrKk3/h65IFaaEkDcxQA2XW61Cq6ivAfnOscxEjV85LklYm7zYsST1b6pXGpAwUSerRcjh1NSkDRZJ6ZqBIkjphoEiSOjHUQPFvykuSOmGFIkk9G2qFYqBIUo8c5SVJ6oyBIknqxFADxU55SVInrFAkqWdDrVAMFEnqmYEiSZqao7wkSZ0xUCRJnRhqoDjKS5LUCSsUSerZUCsUA0WSemagSJKm5igvSVJnDBRJUieGGiiO8pIkdcIKRZJ6NtQKxUCRpJ4ZKJKkqTnKS5LUGQNFktSJoQaKo7wkSZ2wQtHgVdViN2HZGeo36KViqJ+vgSJJPTNQJElTc5SXJKkzQw0UO+UlSZ2wQpGkng21QjFQJKlnBookqRMGiiRpao7ykiR1ZqiB4igvSVInrFAkqWdWKJKkTmzvR5nkMY9tH5zk80luTXJLkl9u5++X5Lokt7XP+7bzk+SyJBuSfDnJyyc9LgNFknq2kIECPA68s6p+BDgCOCvJvwPeA3yuqg4DPtdOAxwPHNY+zgQun/S4DBRJ6tE0YTKfQKmqu6vqH9rXDwG3AgcCJwBXtqtdCby5fX0C8NFq3ATsk+SASY7NPhRJ6llffShJDgFeBtwM7F9Vd0MTOkme3a52ILBx5G2b2nl3j7s/A0WSlpdVSdaNTK+tqrU7rpRkL+DPgF+pqgdnCbGZFkz0R4QMFEnq2ZQVypaqWjPH9nejCZOrqupT7ex7khzQVicHAPe28zcBB4+8/SDgrkkaZh+KJPVsgUd5BbgCuLWqPjCy6Brg9Pb16cCnR+af1o72OgJ4YPupsXFZoUhSzxa4D+UngJ8HvpLkS+283wAuBv4kyRnAd4CT2mXXAm8ANgCPAG+ddMcGiiT1aKHv5VVVf8vM/SIAR8+wfgFndbFvA0WSeuaV8pIkzcIKRZJ6NtQKxUCRpJ4ZKJKkThgokqSpDfkvNtopL0nqhBWKJPVsqBWKgSJJPTNQZpBkFbCK5mZlW7ppkiQN21ADZdo+lLNp/njL2R20RZJWhAX+i42LxlNektSj5RAMk5oqUKrqAuCCTloiSVrWrFAkqWdWKJKkThgokqRODDVQ5jXKK8mbklSSm2ZZ50VJtiW5K8ne3TVRkoZlpY/yuhEo4GVJ9qyqbTOs82FgD+CcqnqwqwZK0pAsh2CY1LwqlKq6D7gF2B1Ys+PyJKcBrwP+uqqu3tl2kpyZZF2SdZs3b56wyZKkpWicCxtvbJ9fNTozyX7AJcA24O2zbaCq1lbVmqpas3r16rEaKklDMdRTXuMEyg3t86t3mP9+YDVwYVV9s5NWSdKADTVQxhnl9ZQKJcmRwC8AXwfe12G7JGmwlnowTGregVJVdya5Azg0yQuAjTQd8QHeXlWPLlAbJWlQVnygtG4ADqU57XUwcDhwVVVd33XDJGmIlsOpq0mNe7fh7ae9TgXOA+4H3tlpiyRJy9K4Fcr2QDm+fT63qu7psD2SNHhDrVDGCpSq+kaSe4D9gZuBtQvSKkkaMAMFSLJX+/IJ4G1V9b3umyRJw2agNM6jqU4uraovLUB7JGnwhhoo8+6UT3IUcC5wO02wSJL0b2atUJIcDpwDPAc4DngMOLmqHu6hbZI0OEMeNjzXKa/jgDOAh2hGeJ1XVesWvFWSNGArMlCq6gPAB3pqiyStCCsyUCRJ3TNQJEmdGGqgjHvrFUmSZmSFIkk9WsmjvCRJHTNQJEmdMFAkSZ0wUCRJUxtyH4qjvCRJnbBCkaSeDbVCMVAkqWcGiiSpEwaKJKkTBookaWqO8pIkaQ5WKJLUs6FWKAaKJPXMQJEkdcJAkSR1YqiBYqe8JKkTBook9Wj7sOFJH/PY/uuTfD3JhiTv6eGQ/o2nvCSpZwt1yivJLsDvAccCm4C/T3JNVX1tQXa4AwNFknq2gH0orwQ2VNXt7X4+AZwAGCiSNEQLGCgHAhtHpjcBP75QO9vRogXK+vXrtyT59mLtfw6rgC2L3Yhlxs9sMn5u41vKn9nz51ph/fr1n02yaop97Jlk3cj02qpa276eKalqin2NZdECpapWL9a+55JkXVWtWex2LCd+ZpPxcxvfcv/Mqur1C7j5TcDBI9MHAXct4P6+j6O8JGk4/h44LMmhSXYHTgGu6Wvn9qFI0kBU1eNJzgY+C+wC/EFV3dLX/g2Uma2dexXtwM9sMn5u4/Mzm0VVXQtcuxj7TlVv/TWSpAGzQpEWUTvaZxWwpaqW6sglaV7slJcW19nAre2ztKxZoUhaVqzqli4rFI0lyZuSVJKbZlnnRUm2Jbkryd59tm+5qaoLqipVdcFit2UZsapbogwUjetGmitvX5Zkz52s82FgD+Ccqnqwt5ZJWlQrPlCSXNh+475uhmVJclW7/Nokuy1GG5eSqroPuAXYHXjK1cpJTgNeB/x1VV3dc/O0AljVLV0rPlCAi4B7gWOSHLPDst8FTqX5Vv4zVfVY341bom5sn181OjPJfsAlwDbg7X03StLiWvGBUlUPAb/VTl60fX6S9wJnAeuBN1bVdxeheUvVDe3zq3eY/35gNXBhVX2z3yYtfVbDGjovbASS7Ap8BXgxcBLNLaA/SNPx9xpHkny/JAfS3ITunqp6TjvvSJqg+Qbw76vq0UVs4pKU5AeBDcCzgWOr6m9Gln2I5gvMjcBxfoHRcrTiKxRo7n8DvLudvBy4FPgWzX96w2QHVXUncAewf5IXtN+mP0xz6+y3GyYzsxoejyMKlx8rlBFJvgocTtOn8mpP2+xckj8CTgd+nuZ22RcCV1XVf1rMdi11VsPzl2Rf4J+Bx4BnVtW2Gda5nmYQyCkOAll8ViitJO+gCROAPQGHu85ue8f8qcB5wP3AOxevOcuD1fD8OaJw+TFQgCSn03xLvBP4DLA3cP6iNmrp2x4oxwNPA369qu5ZxPYsG1V1Dc0vylXAZuCY9jSinsoRhcvIig+UJCcCVwBbgWNpzmVvA34xyYsWs21LWVV9A9geIDfjLcXnzWp4LI4oXEZWdKC01518HHgEeH1V3VpVG4EP0dzn7OLFbN9SlmSv9uUTwNuq6nuL2Z7lwmp4bE+pUNoRhb8AfB1432I0SjNbsZ3ySY4A/oYmOI6vqs+PLNsPuB14JvCTVfW3i9PKpSvJ+4B3AZdW1bmL3Z7loK2G/5Smv+kngX+hGWa9K3B4W/VpB0luBw4FfgjYCHyRpsI7uqquX8y26futyAolyUto/qLZHsDJo2ECUFVbefKbzyU9N2/JS3IUcC5N6J63yM1ZFqyGpzJ62utXacLkKsNk6VmxFYrGk+Rw4BzgOcBxNEM5X1NV6xa1YcuA1fB0kpwBfAT4K+C1wL8CL3YQyNKzIisUTeQ44AzgNTTntY81TOZmNdwJRxQuE1Yokpa8JP8E7E8zovDVDgJZmqxQJC1pjihcPgwUSUvdeTTVyWVV9aXFbox2zlNekpasdkThZ4Hv0NzF+uFFbpJmsetiN0CSRu1kROHJhsnS5ykvSUuNIwqXKU95SZI6YYUiSeqEgSJJ6oSBIknqhIEiSeqEgSJJ6oSBIknqhIEiSeqEgSJJ6oSBIknqxP8HjLwB4YFRDx4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(6, 6))\n", "im = plt.imshow(P, interpolation=\"none\", cmap=plt.get_cmap('binary'))\n", "plt.title('Initial Covariance Matrix $P$')\n", "ylocs, ylabels = plt.yticks()\n", "# set the locations of the yticks\n", "plt.yticks(np.arange(7))\n", "# set the locations and labels of the yticks\n", "plt.yticks(np.arange(6),('$x$', '$y$', '$\\dot x$', '$\\dot y$'), fontsize=22)\n", "\n", "xlocs, xlabels = plt.xticks()\n", "# set the locations of the yticks\n", "plt.xticks(np.arange(7))\n", "# set the locations and labels of the yticks\n", "plt.xticks(np.arange(6),('$x$', '$y$', '$\\dot x$', '$\\dot y$'), fontsize=22)\n", "\n", "plt.xlim([-0.5,3.5])\n", "plt.ylim([3.5, -0.5])\n", "\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "divider = make_axes_locatable(plt.gca())\n", "cax = divider.append_axes(\"right\", \"5%\", pad=\"3%\")\n", "plt.colorbar(im, cax=cax);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Dynamic Matrix $A$\n", "\n", "It is calculated from the dynamics of the Egomotion.\n", "\n", "$$x_{k+1} = x_{k} + \\dot x_{k} \\cdot \\Delta t$$\n", "$$y_{k+1} = y_{k} + \\dot y_{k} \\cdot \\Delta t$$\n", "$$\\dot x_{k+1} = \\dot x_{k}$$\n", "$$\\dot y_{k+1} = \\dot y_{k}$$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 0. 0.1 0. ]\n", " [0. 1. 0. 0.1]\n", " [0. 0. 1. 0. ]\n", " [0. 0. 0. 1. ]] (4, 4)\n" ] } ], "source": [ "dt = 0.1 # Time Step between Filter Steps\n", "\n", "A = np.matrix([[1.0, 0.0, dt, 0.0],\n", " [0.0, 1.0, 0.0, dt],\n", " [0.0, 0.0, 1.0, 0.0],\n", " [0.0, 0.0, 0.0, 1.0]])\n", "print(A, A.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Measurement Matrix $H$\n", "\n", "We directly measure the Velocity $\\dot x$ and $\\dot y$\n", "\n", "$$H = \\begin{bmatrix}0 & 0 & 1 & 0 \\\\ 0 & 0 & 0 & 1\\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 0. 1. 0.]\n", " [0. 0. 0. 1.]] (2, 4)\n" ] } ], "source": [ "H = np.matrix([[0.0, 0.0, 1.0, 0.0],\n", " [0.0, 0.0, 0.0, 1.0]])\n", "print(H, H.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Measurement Noise Covariance $R$\n", "\n", "Tells the Kalman Filter how 'bad' the sensor readings are.\n", "\n", "$$R = \\begin{bmatrix}\\sigma^2_{\\dot x} & 0 \\\\ 0 & \\sigma^2_{\\dot y} \\end{bmatrix}$$" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[100. 0.]\n", " [ 0. 100.]] (2, 2)\n" ] } ], "source": [ "ra = 10.0**2\n", "\n", "R = np.matrix([[ra, 0.0],\n", " [0.0, ra]])\n", "print(R, R.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Process Noise Covariance $Q$\n", "\n", "The Position of the car can be influenced by a force (e.g. wind), which leads to an acceleration disturbance (noise). This process noise has to be modeled with the process noise covariance matrix Q.\n", "\n", "$$Q = \\begin{bmatrix}\n", " \\sigma_{x}^2 & 0 & \\sigma_{x \\dot x} & 0 \\\\\n", " 0 & \\sigma_{y}^2 & 0 & \\sigma_{y \\dot y} \\\\\n", " \\sigma_{\\dot x x} & 0 & \\sigma_{\\dot x}^2 & 0 \\\\\n", " 0 & \\sigma_{\\dot y y} & 0 & \\sigma_{\\dot y}^2 \n", " \\end{bmatrix} \\cdot \\sigma_{a}$$\n", "\n", "with $\\sigma_{a}$ as the magnitude of the standard deviation of the acceleration, which distrubs the car. We do not assume cross correlation, which means if an acceleration will act in x direction of the movement, it will not push in y direction at the same time.\n", "\n", "We can construct the values with the help of a matrix $G$, which is an \"actor\" to the state vector." ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from sympy import Symbol, Matrix\n", "from sympy.interactive import printing\n", "printing.init_printing()\n", "dts = Symbol('\\Delta t')\n", "\n", "As = Matrix([[1, 0, dts, 0],\n", " [0, 1, 0, dts],\n", " [0, 0, 1, 0],\n", " [0, 0, 0, 1]])\n", "# this\n", "Gs = Matrix([dts**2/2, dts])" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\frac{\\Delta t^{2}}{2}\\\\\\Delta t\\end{matrix}\\right]$$" ], "text/plain": [ "⎡ 2⎤\n", "⎢\\Delta t ⎥\n", "⎢─────────⎥\n", "⎢ 2 ⎥\n", "⎢ ⎥\n", "⎣\\Delta t ⎦" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Gs" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/latex": [ "$$\\left[\\begin{matrix}\\frac{\\Delta t^{4}}{4} & \\frac{\\Delta t^{3}}{2}\\\\\\frac{\\Delta t^{3}}{2} & \\Delta t^{2}\\end{matrix}\\right]$$" ], "text/plain": [ "⎡ 4 3⎤\n", "⎢\\Delta t \\Delta t ⎥\n", "⎢───────── ─────────⎥\n", "⎢ 4 2 ⎥\n", "⎢ ⎥\n", "⎢ 3 ⎥\n", "⎢\\Delta t 2⎥\n", "⎢───────── \\Delta t ⎥\n", "⎣ 2 ⎦" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Gs*Gs.T" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "sv = 8.8\n", "\n", "Q = np.matrix([[(dt**4)/4, 0, (dt**3)/2, 0],\n", " [0, (dt**4)/4, 0, (dt**3)/2],\n", " [(dt**3)/2, 0, dt**2, 0],\n", " [0, (dt**3)/2, 0, dt**2]]) * sv**2" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(6, 6))\n", "im = plt.imshow(Q, interpolation=\"none\", cmap=plt.get_cmap('binary'))\n", "plt.title('Process Noise Covariance Matrix $Q$')\n", "ylocs, ylabels = plt.yticks()\n", "# set the locations of the yticks\n", "plt.yticks(np.arange(7))\n", "# set the locations and labels of the yticks\n", "plt.yticks(np.arange(6),('$x$', '$y$', '$\\dot x$', '$\\dot y$'), fontsize=22)\n", "\n", "xlocs, xlabels = plt.xticks()\n", "# set the locations of the yticks\n", "plt.xticks(np.arange(7))\n", "# set the locations and labels of the yticks\n", "plt.xticks(np.arange(6),('$x$', '$y$', '$\\dot x$', '$\\dot y$'), fontsize=22)\n", "\n", "plt.xlim([-0.5,3.5])\n", "plt.ylim([3.5, -0.5])\n", "\n", "from mpl_toolkits.axes_grid1 import make_axes_locatable\n", "divider = make_axes_locatable(plt.gca())\n", "cax = divider.append_axes(\"right\", \"5%\", pad=\"3%\")\n", "plt.colorbar(im, cax=cax);" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Identity Matrix $I$" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[1. 0. 0. 0.]\n", " [0. 1. 0. 0.]\n", " [0. 0. 1. 0.]\n", " [0. 0. 0. 1.]] (4, 4)\n" ] } ], "source": [ "I = np.eye(4)\n", "print(I, I.shape)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Measurements\n", "\n", "For example, we are using some random generated measurement values" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 200)\n", "Standard Deviation of Acceleration Measurements=1.03\n", "You assumed 100.00 in R.\n" ] } ], "source": [ "m = 200 # Measurements\n", "vx= 20 # in X\n", "vy= 10 # in Y\n", "\n", "mx = np.array(vx+np.random.randn(m))\n", "my = np.array(vy+np.random.randn(m))\n", "\n", "measurements = np.vstack((mx,my))\n", "\n", "print(measurements.shape)\n", "\n", "print('Standard Deviation of Acceleration Measurements=%.2f' % np.std(mx))\n", "print('You assumed %.2f in R.' % R[0,0])" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(16,5))\n", "\n", "plt.step(range(m),mx, label='$\\dot x$')\n", "plt.step(range(m),my, label='$\\dot y$')\n", "plt.ylabel(r'Velocity $m/s$')\n", "plt.title('Measurements')\n", "plt.legend(loc='best',prop={'size':18})" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "# Preallocation for Plotting\n", "xt = []\n", "yt = []\n", "dxt= []\n", "dyt= []\n", "Zx = []\n", "Zy = []\n", "Px = []\n", "Py = []\n", "Pdx= []\n", "Pdy= []\n", "Rdx= []\n", "Rdy= []\n", "Kx = []\n", "Ky = []\n", "Kdx= []\n", "Kdy= []\n", "\n", "def savestates(x, Z, P, R, K):\n", " xt.append(float(x[0]))\n", " yt.append(float(x[1]))\n", " dxt.append(float(x[2]))\n", " dyt.append(float(x[3]))\n", " Zx.append(float(Z[0]))\n", " Zy.append(float(Z[1]))\n", " Px.append(float(P[0,0]))\n", " Py.append(float(P[1,1]))\n", " Pdx.append(float(P[2,2]))\n", " Pdy.append(float(P[3,3]))\n", " Rdx.append(float(R[0,0]))\n", " Rdy.append(float(R[1,1]))\n", " Kx.append(float(K[0,0]))\n", " Ky.append(float(K[1,0]))\n", " Kdx.append(float(K[2,0]))\n", " Kdy.append(float(K[3,0])) " ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Kalman Filter\n", "\n", "![Kalman Filter](Kalman-Filter-Step.png)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "for n in range(len(measurements[0])):\n", " \n", " # Time Update (Prediction)\n", " # ========================\n", " # Project the state ahead\n", " x = A*x\n", " \n", " # Project the error covariance ahead\n", " P = A*P*A.T + Q\n", " \n", " \n", " # Measurement Update (Correction)\n", " # ===============================\n", " # Compute the Kalman Gain\n", " S = H*P*H.T + R\n", " K = (P*H.T) * np.linalg.pinv(S)\n", "\n", " \n", " # Update the estimate via z\n", " Z = measurements[:,n].reshape(2,1)\n", " y = Z - (H*x) # Innovation or Residual\n", " x = x + (K*y)\n", " \n", " # Update the error covariance\n", " P = (I - (K*H))*P\n", " \n", " \n", " \n", " # Save states (for Plotting)\n", " savestates(x, Z, P, R, K)" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Let's take a look at the filter performance" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Kalman Gains $K$" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_K():\n", " fig = plt.figure(figsize=(16,9))\n", " plt.plot(range(len(measurements[0])),Kx, label='Kalman Gain for $x$')\n", " plt.plot(range(len(measurements[0])),Ky, label='Kalman Gain for $y$')\n", " plt.plot(range(len(measurements[0])),Kdx, label='Kalman Gain for $\\dot x$')\n", " plt.plot(range(len(measurements[0])),Kdy, label='Kalman Gain for $\\dot y$')\n", "\n", " plt.xlabel('Filter Step')\n", " plt.ylabel('')\n", " plt.title('Kalman Gain (the lower, the more the measurement fullfill the prediction)')\n", " plt.legend(loc='best',prop={'size':22})" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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o3dHvDPsHVeHQkREROSwY8eOWb2vJRFRbTjy2SIif1XVsKr240ipDW4mN07fJSIiIiIiqmNMSm3gNaVERERERER1j0mpDe7ijmItdnUYRERERERETRqTUht4SxgiIiIiIqK6x6TUBk7fJSIiIiIiqntMSm1gUkpERERERFT3mJTa4G5yR2FJoavDICIiIiIiatKYlNrAkVIiIiIiIqK6x6TUBialREREREREdY9JqQ3u4o4iZVJKRERERERUl5iU2sCRUiIiIiIiorrHpNQGJqVERERERER1j0mpDR4mDyalREREREREdYxJqQ0cKSUiIiIiIqp7TEptYFJKRERERERU95iU2uBuMlbfVVVXh0JERERERNRkMSm1wV3cAYC3hSEiIiJqogIDAyEi+Pbbb62WZ2dno2PHjhARREdH4/bt27Vu69SpUzWuo7HbsWMH4uPj0atXL7Ru3Rqenp5o164dwsPDsXDhQnz//fdOba++z/nWrVsRHh6OVq1aQUQgIjh8+HC9tN3Yubs6gIbK3WROSkuK4GHycHE0RERERFSfMjIyMHLkSOTl5SE+Ph6rV6+Gm5ubq8NqlC5cuIDHH3/ckvwHBQXhgQcegLe3Ny5fvoysrCykp6cjKSkJU6ZMwUcffeTagGsgKysL0dHRAIBhw4ahY8eOAABfX19XhtVoMCm1oWxSSkRERETNx65duzB27Fhcu3YNzzzzDFasWAERcXVYjVJeXh4GDRqE3NxchIeHY+XKlejXr1+5fVQV6enpeP3113Hs2DGntZ2WlobCwkJ07tzZaXXa8sUXX6CoqAhLlizBq6++WuftNTVMSm1gUkpERETU/KSmpmLSpEm4efMmli5disTERFeH1KjNmTMHubm5iIiIQFpaGjw9PSvtIyIIDw9HamqqU6fwBgUFOa2uqpw5cwYA0LNnz3prsynhNaU2lE7ZZVJKRERE1Dx88sknGD9+PG7duoW3337bZkKakZGBhQsXIiwsDO3bt4enpyc6deqE6OhoHDx40OF2S68/BIB169YhLCwMLVu2RIcOHTB9+nRcvHgRACyJcnBwMLy8vNC1a1e88MILKCwsdEqMZePYsGED7rvvPnh7e+Ouu+5CZGQk9u/f71C/fvrpJ2zatAkAkJycbDUhrejee+91Sl8A29eUOrOfiYmJEBGsXbsWABAfH2+p/8knnyy37+nTpzFnzhx0794dd9xxB3x8fDB06FCsX7/eat1l41yzZg0GDBhguV61oKDAblypqakQEQwcONDmPsePH4eXlxc6deqEK1euVLvPdUJVXfIvNDRUG7LPjn+mIetC9NzVc64OhYiIiMhhOTk5rg6hwQsICFAAunv3bk1OTlaTyaRubm76wQcf2D0uMjJS3dzctG/fvjp69GgdP368hoSEKAB1c3PTjRs32mzr5MmTlcoAKABdtGiRenp66oMPPqhRUVHaoUMHBaB9+/bVq1ev6qBBg9THx0fHjRunjzzyiLZo0UIB6IwZM5wSY2kcL77XZevPAAAgAElEQVT4oppMJh0yZIhOnDhRe/furQDU09NT09PTq31+V6xYoQD07rvvrvYx1tSkL6q2z7kz+7llyxaNi4vToKAgBaDh4eEaFxencXFxunr1ast+Bw8e1DZt2igA7datm06aNEmHDx+uHh4eCkCnTp2qJSUlVuOcO3eumkwmHTx4sMbExGhoaKgWFBTYjSsvL09FRD09PfXGjRtW9xk6dKgC0D/96U/V6mspRz5bAGRqNXJDJqU2fPHTFxqyLkT/9svfXB0KERERkcOYlFatNGkZO3asJRn57LPPqjxu+/btev78+UrbU1NT1cPDQ319ffXXX3+12pa9pLR9+/blnre8vDzt1auXAtCQkBCNiIgol4xkZWWpu7u7ioieOnWq1jGWxuHr66uZmZmW7cXFxTpjxgwFoMOHD7d/csqYMmWKAtDp06dX+xhratIX1aqTUmf1U1U1Li5OAejatWsrld24cUP9/f0VgCYkJGhRUZGlLDs7W/38/BSAvv/++1bjbN26tWZkZDgUj6paEvd9+/ZVKktJSVEAOmLECIfrrYuklNeU2lB6TWmhVp4OQURERNTobX8eOJ/t6igc0+F3wCP/7vRqt27dCgBISEhAVFRUlfs//PDDVrePGTMGEyZMwPr167F7926MGjXKoTheeukl9OnTx/LYx8cHs2bNwrx585CTk4MjR46gdevWlvJ+/fph5MiRSE1NxZ49e/DEE084JcZly5YhNDTU8thkMuGVV17B6tWrsW/fPhQWFsLDo+q7U1y6dAkA0K5dO6vlO3bssDp1NTExEYGBgU7piz3O6mdVNm3ahDNnziAgIABvvPFGuVWcQ0JCkJiYiDlz5iApKQm///3vKx2/aNEi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rClC6Sq4eNfFGauxfOnOL3VdCgAAwJoilK6CrRNb86KzXpTP3/75tNa6LgcAAGDNEEpXySsveGVueuimfH2fKbwAAADzhNJV8orzX5HJ8cl87MaPdV0KAADAmiGUrpIt41vy0+f/dD5966fz8OMPd10OAADAmiCUrqJX7351Hj/yeP7yu3/ZdSkAAABrglC6ip63/Xl54ZkvzMdu/JgTHgEAAEQoXXWvvujVufnhm/PVe7/adSkAAACdE0pX2cvOe1mmxqec8AgAACBC6arbMr4lr7zglfnsrZ/Ng4892HU5AAAAnRJKO/Dq3a/O9Ox0rvjuFV2XAgAA0CmhtAMXbbsoP7jjB/Phb384h2cPd10OAABAZ4TSjvzqC381dzx6Rz5+48e7LgUAAKAzQmlHfuJZP5GLn3Fx/vjaP87+6f1dlwMAANAJobQjVZXf3PObefDxB/O+b76v63IAAAA6IZR26Aee/gN55QWvzJ9d/2e569G7ui4HAABg1QmlHXvzD705SfKur72r40oAAABWn1DasV1Tu/JLz/+lXHnzlbn+/uu7LgcAAGBVCaVrwOtf+Pps27Qt77j6HZlts12XAwAAsGqE0jVg68TWvPmH35y99+zNn173p12XAwAAsGqE0jXiHz33H+Wlz35p3vnVd+Yb+77RdTkAAACrQihdI6oqb/2xt+asLWflX/y3f5FHph/puiQAAIChE0rXkNMnTs/bf/LtuefAPXnrl96a1lrXJQEAAAyVULrGvGjHi/LmH35zPvu9z+ajN3y063IAAACGSihdg173A6/Li89+cX7/6t/Pl+78UtflAAAADI1QugaN1Eh+78d/LxeccUF+469/I1fffXXXJQEAAAyFULpGnbHpjLzn0vfkmVPPzJs+96Zce++1XZcEAAAwcELpGrb9tO1576XvzZmbz8wb/8sbc/3913ddEgAAwEAJpWvcji078t5L35utE1vzhs++wVReAABgQxFK14FdU7vy3pe9N9tP2543fOYN+dC3P+RyMQAAwIYglK4T52w9Jx98xQdzydmX5N985d/kd7/0u5k+Mt11WQAAACsilK4jWye25l1//135tRf+Wj550yfzK5/+ldz+yO1dlwUAALBsQuk6M1IjefMPvzl/8JN/kJsfujk/d8XP5f1/+/7MzM50XRoAAMBJE0rXqUvPuzSfuvxT+dFn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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_K()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### Uncertainty Matrix $P$" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_P():\n", " fig = plt.figure(figsize=(16,9))\n", " plt.plot(range(len(measurements[0])),Px, label='$x$')\n", " plt.plot(range(len(measurements[0])),Py, label='$y$')\n", " plt.plot(range(len(measurements[0])),Pdx, label='$\\dot x$')\n", " plt.plot(range(len(measurements[0])),Pdy, label='$\\dot y$')\n", "\n", " plt.xlabel('Filter Step')\n", " plt.ylabel('')\n", " plt.title('Uncertainty (Elements from Matrix $P$)')\n", " plt.legend(loc='best',prop={'size':22})" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_P()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "### State Estimate $x$" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_x():\n", " fig = plt.figure(figsize=(16,9))\n", " plt.step(range(len(measurements[0])),dxt, label='$\\dot x$')\n", " plt.step(range(len(measurements[0])),dyt, label='$\\dot y$')\n", "\n", " plt.axhline(vx, color='#999999', label='$\\dot x_{real}$')\n", " plt.axhline(vy, color='#999999', label='$\\dot y_{real}$')\n", "\n", " plt.xlabel('Filter Step')\n", " plt.title('Estimate (Elements from State Vector $x$)')\n", " plt.legend(loc='best',prop={'size':22})\n", " plt.ylim([0, 30])\n", " plt.ylabel('Velocity')" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "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rIncpN9ND41jdQwySJ2XJJPrRKAT7e7xY+swFY+Emiz72uR1e4/uaNMkfihod8/fTLiHvIkmcv/0SFNxj3m3x+BUhIh2ZvrxPFN0e99uuz4b2t3nO5H7gNvtixP5DpsJ+n4PbCnl8CT/I8mPM/QYnSQ5LcltSf4myX5J/jHJO2utj403r5keYHttEB/N0A8ubpku9rWp5zOdGmPWmjX0+22mGISwN5EfBx2j9EK3+9og7LuOjyF9D7BTSYAFgN5zEQX0Uq01TzzxRNatW5enn346zz//fL+LxBSbPXt2tt1222y//fZZuHBhOu3/KOk8wPa8E6eZwA3VAGwN+vGsZ2BmqLXm4YcfzlNPPZVFixZljz32yOzZs7sKOAy2Wmuef/75PPnkk1m7dm1++9vfZrfddpvybSzAToFBf6YSAAD00xNPPJGnnnoqL37xizN79ux+F4ceKKVkzpw52XHHHbNw4cLce++9eeKJJ7L99lNb2TdrSucGAADQYt26dVm0aJHwOkPMnj07ixYtyrp13T0OtBMCLAAA0FNPP/10tttuu34Xg2m03Xbb5emnn57y+QqwAABATz3//PNqX2eY2bNn96SjLgEWAADoOR02zSy92t4CLAAAAI0gwAIAANAIAiwAAMCAWrt2bX7yk59k7dq1/S7KQBBgAQAABtTKlSuzePHirFy5st9FGQgCLAAAAI0wp98FAAAAYHRnnXVWzjrrrH4XY2CogQUAAKARBFgAAAAaQYAFAACgEQRYAACAAXDaaaellJI3v/nNWwyrteb4449PKSXLly/Ps88+24cS9p8ACwAAMABOPfXU7Lbbbrnpppty0003bTbsAx/4QC6//PIsW7YsV111VebOndunUvaXAAsAADAAFi5cmDPPPDPJUJjd6IwzzshnPvOZvOY1r8nXvva1zJ8/v19F7DuP0QEAAPrq7K/enXseXNfvYnRlyV7b58yjD5jy+a5YsSLnn39+Vq1alS996Ut54IEHcs4552Tx4sW5/vrrs/3220/5MptEgAUAABgQc+bMybnnnptjjz02f/qnf5pHH300L3nJS3LjjTdml1126Xfx+k6ABQAA+qoXNZlNdswxx+SAAw7I3Xffveme2L333rvfxRoI7oEFAAAYIJ/+9Kdz9913J0nWr18/45sNjyTAAgAADIjLLrssH/zgB7P33nvn6KOPzrp163L22Wf3u1gDQ4AFAAAYAFdffXXe//73Z9GiRbnxxhvzmc98JvPmzcvnPve5/PSnP+138QaCAAsAANBnN910U9797ndn2223zfXXX5/Fixdn3333zYknnpjnnnsuH/7wh/tdxIEgwAIAAPTR9773vbzjHe9IklxzzTVZunTppmGnnnpqdthhh1x99dW5+eab+1XEgSHAAgAA9MmPf/zjLF++PM8880yuvPLKvOlNb9ps+KJFi3LKKackSU4++eR+FHGgeIwOAABAnxx00EF57LHHxh3n1FNPzamnnjpNJRpsamABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAAbU2rVr85Of/CRr167td1EGggALAAAwoFauXJnFixdn5cqV/S7KQBBgAQAAaIQ5/S4AAAAAozvrrLNy1lln9bsYA0MNLAAAAI0gwAIAANAIAiwAAACNIMACAAD02bXXXptSSl7/+tePOc5Pf/rTzJs3L3vttVfWrVs3jaUbHAIsAABAny1btiyllNx+++1Zv379qOOccMIJeeaZZ/LJT34y22+//TSXcDAIsAAAAH2200475YADDsiGDRuyatWqLYZ//vOfz7e+9a285S1vybve9a4+lHAweIwOAADQX9d9OPn1j/tdiu7scVDyto9N6SyXLVuWu+66K7feemsOP/zwTe8/9thjOfnkkzNv3rxccMEFU7rMplEDCwAAMADe8IY3JEluueWWzd7/0Ic+lEceeSSnnXZaXv7yl/ejaANDDSwAANBfU1yT2VTLli1Lktx6662b3rv55ptzySWX5JWvfGVOOeWUfhVtYKiBBQAAGAB77713XvrSl+ahhx7Kz3/+8zz77LM54YQTUmvNBRdckG222abfRew7NbAAAAAD4g1veEN+8Ytf5JZbbsl9992Xu+++O8cff3yOPPLIfhdtILStgS2lfLyUcsB0FAYAAGAm29iM+PLLL88555yTHXfcMZ/4xCf6XKrB0UkN7E+SXFhKmZPk0iRX1Fr/qbfFAgAAmHk2BtjrrrsuSXLeeedl991372eRBkrbGtha63+ttf5ukvcmeUmSO0spl5dS3tTrwgEAAMwkr3jFKzYF1te97nVZsWJFn0s0WDrqxKmUMjvJq4Zfa5OsTnJSKeWLPSwbAADAjPLkk08mSWbPnp3PfvazmTVLv7sjtW1CXEo5L8nRSb6Z5D/VWr8/POjcUsrf97JwAAAAM8k555yThx56KH/+53+eQw45pN/FGTid3AN7V5LTa61PjzLstVNcHgAAgBnpm9/8Zs4777y87GUvyznnnNPv4gykTuqjj28Nr6WUv0sSnTkBAABM3N13350//uM/ztvf/va89a1vzdy5c3PllVdmwYIF/S7aQBqzBraUMi/Jtkl2KaXslKQMD9o+yV7TUDYAAICt2g033JCLL744CxcuzLJly3LOOedk6dKl/S7WwBqvCfGfJPlghsLqj0a8vy7JZ3pZKAAAgJngpJNOykknndTvYjTGmAG21vqXSf6ylPKBWuv501gmAAAA2MJ4TYiPrLV+M8kDpZR/1Tq81vrlnpYMAAAARhivCfEbM/TonKNHGVaTCLAAAABMm/GaEJ85/O8fTV9xAAAAYHRtH6NTSvlPpZQdR/y9UynlP/a2WAAAALC5Tp4D+7Za6282/lFrfTzJ8nYTlVIuKaU8XEq5a8R7Z5VSHiil3DH8ajsfAAAASDoLsLNLKS/a+EcpZX6SF40z/kb/Lcm/HOX9T9ZaDxl+/W1nxQQAAGCmG68Tp42+kOTvSimXZqjzpn+X5LJ2E9Vav1NKecmkSgcAAADD2gbYWut/LqXcmeSo4bfOqbXeMIllnlhKeW+SVUn+YrhJ8hZKKSuSrEiS/fbbbxKLAwAAYGvQSRPiJLk9yX9P8u3h/0/UXyV5eZJDkvwqySfGGrHWemGtdWmtdemuu+46iUUCAACwNeikF+I/SPL9JMcl+YMkt5VSjpvIwmqtD9Van6+1vpDkoiSvnch8AAAAmHk6uQf2/05yWK314SQppeya5KYkX+p2YaWUPWutvxr+8/eT3DXe+AAAALBRJwF21sbwOuzRdFZze0WSI5LsUkq5P8mZSY4opRySoc6gfpnkT7otMAAAADNTJwH2+lLKDUmuGP77XUnaPv6m1vruUd6+uIuyAQAAzGhr167N2rVrs8suu2SXXXbpd3H6rm1Naq31PyS5MMnBSf5Fkgtrraf0umAAAAAz3cqVK7N48eKsXLmy30UZCJ3UwKbWelWSq3pcFgAAABjTmAG2lPJEhu5V3WJQklpr3b5npQIAACBnnXVWzjrrrH4XY2CMGWBrrQunsyAAAAAwnrb3wCZJKeXwUsofDf9/l1LKS3tbLAAAANhcJ4/DOTPJKUlOHX5rmyRf6GWhAAAAoFUnNbC/n+SYJE8lSa31wSSaFwMAAEyh0047LaWUvPnNb95iWK01xx9/fEopWb58eZ599tk+lLD/OgmwG2qtNcMdOpVSFvS2SAAAADPPqaeemt122y033XRTbrrpps2GfeADH8jll1+eZcuW5aqrrsrcuXP7VMr+6iTA/k0p5XNJdiyl/PskNyW5qLfFAgAAmFkWLlyIcsEQAAAgAElEQVSYM888M8lQmN3ojDPOyGc+85m85jWvyde+9rXMnz+/X0Xsu/Eeo7MyyeW11o+XUt6cZF2SVyY5o9Z643QVEAAAYKZYsWJFzj///KxatSpf+tKX8sADD+Scc87J4sWLc/3112f77Wf200zHDLBJ/meST5RS9kxyZZK/rrXeMT3FAgAAZopbbrkljz76aL+L0ZWdd945v/M7vzPl850zZ07OPffcHHvssfnTP/3TPProo3nJS16SG2+8MbvsssuUL69T1113XZYvX577778/e++9d9/KMWYT4lrrX9Za/9ckb0zyWJJLSylrSilnlFJeMW0lBAAAmEGOOeaYHHDAAVm7dm123XXX3HTTTX0NjUlyxx13ZNddd+17OcargU2S1FrvTXJuknNLKYcmuSTJmUlm97hsAADADNCLmswm+/SnP5277747SbJ+/fqumw0/99xzmTVrVmbN6qTLo87ccccdOfTQQ6dsfhPVyXNg55ZSji6l/HWS65L8NMn/3vOSAQAAzDCXXXZZPvjBD2bvvffO0UcfnXXr1uXss88ed5o99tgjZ5xxRs4444zss88+mT9/fjZs2JBaay688MIccMABmTdvXl71qlflC1/4whbTX3XVVTnqqKOy++67Z/78+TnwwAPzxS9+cbNxbr/99hxyyCFTuq4TMV4nTm9O8u4kv5fk+0m+mGRFrfWpaSobAADAjHH11Vfn/e9/fxYtWpQbb7wx2223XW688cZ87nOfy5/92Z/lFa/Y8k7Ohx9+OA899FAuuuiivPGNb8yFF16YJNlmm21y3HHH5Vvf+lZOP/30HHzwwbn++uvznve8J/vss0+OOOKITfO48847c9xxx+WUU05JKSVf+cpX8od/+Ic5+OCDs2TJkjz11FP52c9+NhA1sOM1IT4tyeVJTq61PjZN5QEAAJhxbrrpprz73e/Otttum+uvvz6LFy9Okpx44on5+Mc/ng9/+MP58pe/vMV0q1evTpIsX748F1988ab3V65cma9+9av57ne/m8MOOyxJctRRR+VHP/pRLrnkks0C7Mga3ueffz5HHHFELr744tx2221ZsmRJVq9enRdeeGEgAux4nTi9qdZ6kfAKAADQO9/73vfyjne8I0lyzTXXZOnSpZuGnXrqqdlhhx1y9dVX5+abb95i2tWrV2fWrFn56Ec/uum9WmvOPffcHHfccTn00EPz3HPPbXotWbIk995776Zxn3nmmZx//vk59NBDs8MOO2TOnDmZO3du1q9fn+222y7JUPPhBQsWZP/99+/VR9CxqburFwAAgK78+Mc/zvLly/PMM8/kyiuvzJve9KbNhi9atCinnHJKkuTkk0/eYvo777wzS5cuzW677bbpvTVr1uT+++/PFVdckblz5272+sxnPrNZp1DHHntszjnnnLzzne/MlVdeme9///v5+Mc/niRZsmRJkqEOnA4++OAp7RRqotr2QgwAAEBvHHTQQXnssfEbvZ566qk59dRTRx22evXqHH744Zu99+CDDyZJrr322uy5555bTLPxebK33HJLbrjhhnzjG9/Im9/85k3DL7300k2dPiVDAfa1r31t5yvVQwIsAABAAz377LNZs2ZNTjzxxM3e3xhaFy5cuFlz5Fb33XdfkmwKqklyzz335NJLL82BBx6Y2bNn5/nnn89dd92VFStW9GANuifAAgAANNCaNWvy7LPPbtG50uLFi3PYYYflfe97X04//fTsv//+efzxx3PXXXdlw4YN+chHPpIkefWrX53Zs2fnpJNOygknnJA1a9bkU5/6VObPn7/pkTlr1qzJ+vXrB6IDp8Q9sAAAAI20evXqzJkzJwceeOBm78+aNSvXXHNNjjzyyJx99tl561vfmg984AP5wQ9+sNk9tvvvv38uuuii3HrrrTn22GPz9a9/PVdddVV++9vfbgqwd9xxx6jL6JdSa+13GdpaunRpXbVqVb+LAQAATMCaNWs2PRaGmaOb7V5K+WGtdez2zsPUwAIAANAIAiwAAACNIMACAADQCAIsAAAAjSDAAgAA0AgCLAAAAI0gwAIAANAIAiwAAACNIMACAADQCAIsAAAAjSDAAgAA0AgCLAAAAI0gwAIAANAIAiwAAACNIMACAAAMqLVr1+YnP/lJ1q5d2++iDAQBFgAAYECtXLkyixcvzsqVK/tdlIEgwAIAANAIc/pdAAAAAEZ31lln5ayzzup3MQaGGlgAAAAaQYAFAACgEQRYAAAAGkGABQAA6LNrr702pZS8/vWvH3Ocn/70p5k3b1722muvrFu3bhpLNzgEWAAAgD5btmxZSim5/fbbs379+lHHOeGEE/LMM8/kk5/8ZLbffvtpLuFgEGABAAD6bKeddsoBBxyQDRs2ZNWqVVsM//znP59vfetbectb3pJ3vetdfSjhYBBgAQAABsCyZcuSJLfeeutm7z/22GM5+eSTM2/evFxwwQX9KNrA8BxYAACgr2655ZY8+uij/S5GV3beeef8zu/8zpTO8w1veEP+6q/+Krfccstm73/oQx/KI488ko985CN5+ctfPqXL7NR1112X5cuX5/7778/ee+/dlzIkamABAAAGwmg1sDfffHMuueSSvPKVr8wpp5zSr6LljjvuyK677trX8JqogQUAAPpsqmsym2rvvffOS1/60vziF7/Iz3/+8+y777454YQTUmvNBRdckG222aaj+Tz33HOZNWtWZs2auvrKO+64I4ceeuiUzW+i1MACAAAMiDe84Q1JhppVf/zjH8/dd9+d448/PkceeeSY0+yxxx4544wzcsYZZ2SfffbJ/Pnzs2HDhiRJrTUXXnhhDjjggMybNy+vetWr8oUvfGGz6a+66qocddRR2X333TN//vwceOCB+eIXv7jZOLfffnsOOeSQKV7b7qmBBQAAGBDLli3LZZddlssvvzzf/va3s+OOO+YTn/jEmOM//PDDeeihh3LRRRfljW98Yy688MIkybx58/LCCy/kne98Z771rW/l9NNPz8EHH5zrr78+73nPe7LPPvvkiCOOSJLceeedOe6443LKKaeklJKvfOUr+cM//MMcfPDBWbJkSZ566qn87Gc/G4gaWAEWAABgQGy8D/a6665Lkpx33nnZfffdxxx/9erVSZLly5fn4osv3mzYBRdckK9+9av57ne/m8MOOyxJctRRR+VHP/pRLrnkkk0B9uyzz940zfPPP58jjjgiF198cW677bYsWbIkq1evzgsvvDAQAVYTYgAAgAHxile8YlNgfd3rXpcVK1aMO/7q1asza9asfPSjH93s/Vprzj333Bx33HE59NBD89xzz216LVmyJPfee2+S5Jlnnsn555+fQw89NDvssEPmzJmTuXPnZv369dluu+2SDDUfXrBgQfbff/8erHF31MACAAAMiCeffDJJMnv27Hz2s59t2xHTnXfemaVLl2a33Xbb7P01a9bk/vvvzxVXXJErrrhii+ne/va3J0mOPfbY/OhHP8oHP/jBvPrVr87OO++c73znOzn55JOzZMmSJEMdOB188MFT2inURAmwAAAAA+Kcc87JQw89lD//8z/vqNOk1atX5/DDD9/i/QcffDBJcu2112bPPffcYvguu+ySW265JTfccEO+8Y1v5M1vfvOmYZdeeummDp+SoQD72te+dqKrNKUEWAAAgAHwzW9+M+edd15e9rKX5Zxzzmk7/rPPPps1a9bkxBNP3GLYxtC6cOHCLF26dNTpb7vttiTZFFST5J577smll16aAw88MLNnz87zzz+fu+66q21T5ukiwAIAAPTJ3XffnU9+8pP59a9/nRtuuCFz587NlVdemQULFrSdds2aNXn22WdH7Vxp8eLFOeyww/K+970vp59+evbff/88/vjjueuuu7Jhw4Z85CMfyatf/erMnj07J510Uk444YSsWbMmn/rUpzJ//vxNtb9r1qzJ+vXrB6IDp0QnTgAAAH1zww035OKLL853vvOdLFu2LDfeeOOYNaatVq9enTlz5uTAAw/cYtisWbNyzTXX5Mgjj8zZZ5+dt771rfnABz6QH/zgB3nTm96UJNl///1z0UUX5dZbb82xxx6br3/967nqqqvy29/+dlOAveOOO8ZcRj+UWmu/y9DW0qVL66pVq/pdDAAAYALWrFmTxYsX97sYTLNutnsp5Ye11rbJXQ0sAAAAjSDAAgAA0AgCLAAAAI2gF2KYKqsuTX78pc3fO+i4ZOkf9ac8AACwlRFgYSztAmnr8HtvHvr3xYf/89/33rz5OONN3zocAADYjADLxIwWvlo1LYx1G0hbh7/48PYBd7zpf/3joX+b9JkBAMA0EmCZmB9/aShw7XHQ6MNHq31sp5vAO5Hay3ahu9tA2jq81dI/2nxYu+kv/b2hz/TS3+t8nQAAGqLWmlJKv4vBNOnV41oFWDrTGr42htc/+npn47fTrvZxIs11W7VO06rbQNqtdtMfdNzm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7Zq6+QUcgF631hltGjUZMLN125ql3W1vSfsa2slMz4ymBhYABkkntTXjdRwyVkcm43U6oyYDZraJtGYZeR6ayI9gk50e2hBge2W0gxcAxtJ6UdnaFHC0GtnWUOtiERip22bOk719ox+3fzDjaEI8Faai2RcAdMv3DQBbCU2I+6nfN/UDMDP4vgFghpnV7wIAAABAJwRYAAAAGkGABQAAoBEEWAAAABpBJ05TwSNyAAAAek6AnQpv+1i/SwAAALDV04QYAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARpjTj4WWUn6Z5Ikkzyd5rta6tB/lAAAAoDn6EmCHvanWuraPywcAAKBBNCEGAACgEfoVYGuSb5RSflhKWTHaCKWUFaWUVaWUVY888sg0Fw8AAIBB068A+7u11lcneVuS/7OU8obWEWqtF9Zal9Zal+66667TX0IAAAAGSl8CbK31weF/H05ydZLX9qMcAAAANMe0B9hSyoJSysKN/0/yliR3TXc5AAAAaJZ+9EK8e5KrSykbl395rfX6PpQDAACABpn2AFtr/XmSfzHdywUAAKDZPEYHAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEAAGgEARYAAIBGEGABAABoBAEWAACARhBgAQAAaAQBFgAAgEYQYAEA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_x()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "subslide" } }, "source": [ "## Position x/y" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "slideshow": { "slide_type": "skip" } }, "outputs": [], "source": [ "def plot_xy():\n", " fig = plt.figure(figsize=(16,16))\n", " plt.scatter(xt,yt, s=20, label='State', c='k')\n", " plt.scatter(xt[0],yt[0], s=100, label='Start', c='g')\n", " plt.scatter(xt[-1],yt[-1], s=100, label='Goal', c='r')\n", "\n", " plt.xlabel('X')\n", " plt.ylabel('Y')\n", " plt.title('Position')\n", " plt.legend(loc='best')\n", " plt.axis('equal')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "slideshow": { "slide_type": "fragment" } }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA74AAAOjCAYAAACcNthEAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3X2Q3WdhH/rvI+9Z7UEvxGDBNbbRgoHGNfh6pYXCQFKT2G7M9E5Sj7mOWyjk6tYFE6d1O562aie0ubFbOhAF4gy5rsW1MVTUdpzAEHwblDj00gDVSnaUGgUbgwSKXbOAMVJladfa5/6xK2VXWu1qX8/ubz+fGc+ufuc55zybPzL55vu8lFprAAAAoKlWdXoCAAAAsJAEXwAAABpN8AUAAKDRBF8AAAAaTfAFAACg0QRfAAAAGk3wBYBlrJTyylLK4VLKOVOMOVxKefVizgsAlhLBFwAWWSllfynl+bFA+kwp5f8ppaydzWfVWr9Ta11baz0+9tl/Ukr5P08Zs7bW+q35mDsALEeCLwB0xv9Wa12bZFOSNyb5Vx2eDwA0luALAB1Ua/3LJA8leX0p5RWllM+VUn5YSvlmKeUfnBhXSnlTKWWglPLjsZb4N8ae95ZSaimlq5RyW5KfSnLHWJt8x9iYWkp5zdjvLy6lfLKUMlhKOVBK+VellFVjr723lPLlUsqHSynPllK+XUq5ZrH/ZwIA862r0xMAgJWslHJRknckeTDJjiSPJXlFkp9M8sVSyrdqrX+U5KNJPlprvXdsWfTrT/2sWuu/LKW8Ncmnaq13neErfyvJi5O8OslLk/xhkqeTbB97/W8kuSfJeUluTLK9lHJBrbXOyx8MAB2g8QWAzvj9UsqPknw5yZeS3JnkbUn+Wa31aK310SR3JXn32PjhJK8ppZxXaz1ca/3qTL9w7ACs65P8i1rroVrr/iQfGfcdSXKg1vofxvYM35Pk/CQvn92fCABLg+ALAJ3xC7XWn6i1bqy13pTRlveHtdZD48YcSHLB2O9bkrwuyV+UUnaVUv72LL7zvCTdY5872Xckyf848Uut9cjYr7M6eAsAlgrBFwCWhqeSvKSUsm7cs1cm+cskqbU+UWu9IcnLknwoyQOllDWTfM5US5K/n9HmeONk3wEATSX4AsASUGv9bpI/TfJvSyk9pZTLMtryfjpJSinvKqVsqLWOJPnR2NuOT/JRz2R0/+5k33E8yX1JbiulrCulbEzyT5J8an7/GgBYWgRfAFg6bkjSm9H29/eSfLDW+sWx134uyWOllMMZPejqF2utRyf5jI8muW7sVOaPTfL6zUn+Z5JvZXR/8X9M8ol5/SsAYIkpDmkEAACgyTS+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0WlenJ7CQzjvvvNrb29vpaQAAALAAdu/e/f1a64bpxjU6+Pb29mZgYKDT0wAAAGABlFIOnM04S50BAABoNMEXAACARhN8AQAAaLRG7/EFAABomuHh4Rw8eDBHjx7t9FQWTU9PTy688MK0Wq1ZvV/wBQAAWEYOHjyYdevWpbe3N6WUTk9nwdVa84Mf/CAHDx7Mq171qll9hqXOAAAAy8jRo0fz0pe+dEWE3iQppeSlL33pnBpuwRcAAGCZWSmh94S5/r2CLwAAADN222235dJLL81ll12Wyy+/PF/72tfym7/5mzly5Mi07z3bcfNF8AUAAGBGvvKVr+Tzn/989uzZk71792bnzp256KKLBF8AAAA6Y3BwMLt27crg4OC8fN7TTz+d8847L6tXr06SnHfeeXnggQfy1FNP5e1vf3ve/va3J0ne//73p7+/P5deemk++MEPJkk+9rGPnTbuD//wD/OWt7wlmzZtyjvf+c4cPnx4XuZ5Qqm1zusHLiX9/f11YGCg09MAAACYN/v27csll1xy1uN37NiRLVu2pLu7O0NDQ9m+fXtuuOGGOc3h8OHDedvb3pYjR47kyiuvzPXXX5+/+Tf/Znp7ezMwMJDzzjsvSfLDH/4wL3nJS3L8+PH87M/+bD72sY/lsssumzDu+9//fq699to89NBDWbNmTT70oQ/l2LFj+dVf/dVp/+5Syu5aa/9089X4AgAANNTg4GC2bNmS559/Ps8991yef/75bNmyZc7N79q1a7N79+7ceeed2bBhQ66//vrcfffdp4277777smnTpvT19eWxxx7L17/+9dPGfPWrX83Xv/71vPWtb83ll1+ee+65JwcOHJjT/E7lHl8AAICG2r9/f7q7u/P888+ffNZqtbJ///5s2LBhTp99zjnn5IorrsgVV1yRN7zhDbnnnnsmvP7tb387H/7wh7Nr166ce+65ee973zvplUS11lx11VXZsWPHnOYz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7zv5bOPGjbn55ptz9OjR/NIv/VLe8IY3pK+vLw8//HCS0Wb3p37qp7Jp06Zs2rQpf/qnfzrrP2+mlsR1RgAAAMyjj3zk9MB7quHhZNu25I6ZX3X02GOPZdOmTZO+9tu//dtJkj//8z/PX/zFX+Tqq6/O448/npe97GX54he/mJ6enjzxxBO54YYbMjAwMOPvng3BFwAAoGk+9amzC7733jur4HuqD3zgA/nyl7+c7u7uXHjhhbn55puTJD/5kz+ZjRs35vHHH8/GjRvzy7/8y3n00Udzzjnn5PHHH5/z954twRcAAKBpDh+e33GnuPTSS/O7v/u7J//927/92/n+97+f/v7+XHDBBZO+Z9u2bXn5y1+eP/uzP8vIyEh6enpm9d2zYY8vAABA06xdO7/jTvEzP/MzOXr0aD7+8Y+ffHbkyJEkyU//9E/n05/+dJLk8ccfz3e+8538tb/21/Lcc8/l/PPPz6pVq3Lvvffm+PHjs/ru2RB8AQAAmuZd70paranHtFrJu989q48vpeT3f//386UvfSmvetWr8qY3vSnvec978qEPfSg33XRTjh8/nje84Q25/vrrc/fdd2f16tW56aabcs899+TNb35zHn/88axZs2ZW3z2r+dZaF+3LFlt/f39drM3SAAAAi2Hfvn255JJLph705JOjVxaNtbCTetGLkr17k4svnt8JLpDJ/u5Syu5aa/9079X4AgAANM3FFycPPDAabk9tflut0ecPPLBsQu9cCb4AAABNdM01o43ujTcm69cnq1aN/rzxxtHn11zT6RkuGqc6AwAANNXFF49eVzQPVxYtZxpfAACAZabJZzVNZq5/r+ALAACwjPT09OQHP/jBigm/tdb84Ac/mNO9v5Y6AwAALCMXXnhhDh48mMHBwU5PZdH09PTkwgsvnPX7BV8AAIBlpNVq5VWvelWnp7GsWOoMAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADRax4JvKeWiUsrDpZR9pZTHSin/aOz5vy6l/GUp5dGx/94x7j3/opTyzVLKN0opf6tTcwcAAGD56Orgd7+Q5J/WWveUUtYl2V1K+eLYa9tqrR8eP7iU8teT/GKSS5O8IsnOUsrraq3HF3XWAAAALCsda3xrrU/XWveM/X4oyb4kF0zxlp9P8pla67Fa67eTfDPJmxZ+pgAAACxnS2KPbymlN0lfkq+NPfrlUsreUsonSinnjj27IMl3x73tYKYOygAAAND54FtKWZvkd5P841rrj5N8PMnFSS5P8nSSj5wYOsnb6ySfd2MpZaCUMjA4OLhAswYAAGC56GjwLaW0Mhp6P11rfTBJaq3P1FqP11pHkvyH/NVy5oNJLhr39guTPHXqZ9Za76y19tda+zds2LCwfwAAAABLXidPdS5JtifZV2v9jXHPzx837O8k+e9jv38uyS+WUlaXUl6V5LVJ/ttizRcAAIDlqZOnOr81ybuT/Hkp5dGxZ1uT3FBKuTyjy5j3J/mHSVJrfayUcl+Sr2f0ROgPONEZAACA6XQs+NZav5zJ9+1+YYr33JbktgWbFAAAAI3T8cOtAAAAYCEJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAQKMJvgAAADSa4AsAAECjCb4AAAA0muALAABAowm+AAAANJrgCwAAsFI9+WRy003J+vXJqlWjP2+6afR5g3Qs+JZSLiqlPFxK2VdKeayU8o/Gnr+klPLFUsoTYz/PHXteSikfK6V8s5Syt5SyqVNzBwAAWPYeeii57LLkrruSQ4eSWkd/3nXX6POHHur0DOdNJxvfF5L801rrJUnenOQDpZS/nuSfJ/mjWutrk/zR2L+T5Jokrx3778YkH1/8KQMAADTAk08m112XHDmSDA9PfG14ePT5ddc1pvntWPCttT5da90z9vuhJPuSXJDk55PcMzbsniS/MPb7zyf5ZB311SQ/UUo5f5GnDQAAsPx95COnB95TDQ8n27YtznwW2JLY41tK6U3Sl+RrSV5ea306GQ3HSV42NuyCJN8d97aDY88AAACYgZF77z274HvvvYszoQXW8eBbSlmb5HeT/ONa64+nGjrJszrJ591YShkopQwMDg7O1zQBAAAaYceOHcnhw2c3+GzHLXEdDb6llFZGQ++na60Pjj1+5sQS5rGf3xt7fjDJRePefmGSp079zFrrnbXW/lpr/4YNGxZu8gAAAMvE4OBgdu3alX379mXLli05dLZvXLt2Iae1aDp5qnNJsj3Jvlrrb4x76XNJ3jP2+3uSfHbc878/drrz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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plot_xy()" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Conclusion" ] }, { "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "fragment" } }, "source": [ "It works pretty well. That was basically just dead reckoning, because no position measurement came in." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "skip" } }, "source": [ "To use this notebook as a presentation type:\n", "\n", "`jupyter-nbconvert --to slides Kalman-Filter-CV.ipynb --reveal-prefix=reveal.js --post serve` \n", "\n", "Questions? [@Balzer82](https://twitter.com/balzer82)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "slideshow": { "slide_type": "notes" } }, "source": [ "CC-BY2.0 Paul Balzer" ] } ], "metadata": { "celltoolbar": "Slideshow", "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.6.7" } }, "nbformat": 4, "nbformat_minor": 1 }