Commit 31b34c77 authored by Luz Andrea Silva Torres's avatar Luz Andrea Silva Torres
Browse files

Mini project

parent ba0278b4
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# MULTIDIMENSIONAL KALMAN FILTER"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Introduction"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 1.1 Vehicle location estimation"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The aim of this notebook is to estimate the location of a vehicle in the XY plane using multidimensional Kalman filter. This is an implementation of a simple exampl proposed in an educational webpage.\n",
"\n",
"It is suppose that the vehicle has an onboard location sensor that reports X and Y coordinates of the system, this represents the observations with wich are corrected the projections.\n",
"\n",
"It is assumed a constant acceleration dynamics. \n",
"\n",
"<img alt=\"carro\" src=\"carro.jpg\">"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The state of the system is given by the position, velocity and acceleration of the car in the X and Y coordinates. The state extrapolated vehicle for time n+1 can be describe by the following system of equations:\n",
"\n",
"\\begin{equation}\n",
"\\begin{split}\n",
"\\hat{x}_{n+1,n}=\\hat{x}_{n,n}+\\hat{\\dot{x}}_{n,n}\\Delta t+\\frac{1}{2}\\hat{\\ddot{x}}_{n,n}\\Delta t^2 \\\\\n",
"\\hat{\\dot{x}}_{n+1,n} = \\hat{\\dot{x}}_{n,n}+ \\hat{\\ddot{x}}_{n,n}\\Delta t \\\\\n",
"\\hat{\\ddot{x}}_{n+1,n} = \\hat{\\ddot{x}}_{n,n} \\\\\n",
"\\hat{y}_{n+1,n}=\\hat{y}_{n,n}+\\hat{\\dot{y}}_{n,n}\\Delta t+\\frac{1}{2}\\hat{\\ddot{y}}_{n,n}\\Delta t^2 \\\\\n",
"\\hat{\\dot{y}}_{n+1,n} = \\hat{\\dot{y}}_{n,n}+ \\hat{\\ddot{y}}_{n,n}\\Delta t \\\\\n",
"\\hat{\\ddot{y}}_{n+1,n} = \\hat{\\ddot{y}}_{n,n} \\\\\n",
"\\end{split}\n",
"\\end{equation}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. Extended Kalman filter equations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Kalman filter equations are given by:\n",
"\n",
"\\begin{equation}\n",
" \\left.\\begin{aligned}\n",
" \\hat{x}_{n+1,n}= F\\hat{x}_{n,n}\\\\\n",
" P_{n+1,n}= FP_{n,n}F^T+Q\n",
" \\end{aligned}\n",
" \\right\\}\n",
" \\qquad \\text{Prediction equations}\n",
"\\end{equation}\n",
"\n",
"where $F$ is the state transition matrix (comes from the dynamic model), $x$ is the state vector (what we want to predict), $Q$ is the process noise uncertainty and $P$ is the estimate uncertainty (covariance matrix).\n",
"\n",
"\\begin{equation}\n",
" \\left.\\begin{aligned}\n",
" \\hat{x}_{n,n}= \\hat{x}_{n,n-1} + K_n(z_n- H\\hat{x}_{n,n-1}\\\\\n",
" P_{n,n}= (I-K_nH)P_{n,n-1}(I-K_nH)^T+ K_n R_n K_n^T\\\\\n",
" K_{n}= P_{n,n-1}H^T(HP_{n,n-1}H^T+R_n)^{-1}\n",
" \\end{aligned}\n",
" \\right\\}\n",
" \\qquad \\text{Update (correction with observations)}\n",
"\\end{equation}\n",
"\n",
"where $I$ is the indentity matrix, $K_n$ is the Kalman Gain, $P_{n,n}$ is the covariance update, $\\hat{x}_{n,n}$ is the state update, $z_n$ is the measurement equation that comes from the observations, $H$ is the observation matrix, that is a linear operator that allows to consider only the variables that are observed, and $R_n$ is the measurement uncertainty."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from numpy.linalg import inv"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first step is to create the Kalman Filter arrays:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Creation of Kalman's filter arrays\n",
"Xn = np.zeros([6,1])\n",
"F = np.identity(6)\n",
"Pn = np.zeros([6,6])\n",
"Q = np.zeros([6,6])\n",
"Kn = np.zeros([6,2])\n",
"H = np.zeros([2,6])\n",
"Rn = np.zeros([2,2])\n",
"dt = 1\n",
"# Variance of the process, \"random acceleration\":\n",
"var_a = 0.15**2\n",
"# Observation or measurement variance:\n",
"var_mxy = 3**2\n",
"\n",
"#Observation matrix zn\n",
"Zn = np.zeros([2,1])\n",
"'observations'\n",
"x_o = np.array([-393.66,-375.93,-351.04,-328.96,-299.35,-273.36,-245.89,-222.58,-198.03,-174.17,-146.32,-123.72,-103.47,-78.23,-52.63,-23.34,25.96,49.72,76.94,95.38,119.83,144.01,161.84,180.56,201.42,222.62,\t239.4,252.51,266.26,271.75,277.4,294.12,301.23,291.8,299.89,0])\n",
"y_o = np.array([300.4,301.78,295.1,305.19,301.06,302.05,300,303.57,296.33,297.65,297.41,299.61,299.6,302.39,295.04,300.09,294.72,298.61,294.64,284.88,272.82,264.93,251.46,241.27,222.98,203.73,184.1,166.12,138.71,119.71,100.41,79.76,50.62,32.99,2.14,0])\n",
"Z_o = np.zeros([2,36])\n",
"Z_o[0,:] = x_o\n",
"Z_o[1,:] = y_o"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"For the numerical application is assume that a vehicle is moving in a straight line in the X direction with a constant velocity. After traveling 400 meters the vehicle turns right, with a turning radius of 300 meters. During the turning maneuver, the vehicle experiences acceleration due to the circular motion (an angular acceleration). "
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Y')"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#Model \n",
"x_m = np.array([-400,-300,-200,-100,0,20,40,60,80,100,120,140,160,180,200,220,240,260,280,300])\n",
"y_m = np.array([300,300,300,300,300,299.3325909,297.3213749,293.9387691,289.1366459,282.8427125,274.9545417,265.3299832,253.7715508,240,223.6067977,203.9607805,180,149.6662955,107.7032961,0])\n",
"fig = plt.figure()\n",
"ax = fig.add_subplot(111)\n",
"plt.plot(x_m,y_m)\n",
"plt.xlabel('X')\n",
"plt.ylabel('Y')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now are set the arrays according with the conditions of the problem"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1. 0. 0. 0. 0. 0.]\n",
" [0. 0. 0. 1. 0. 0.]]\n"
]
}
],
"source": [
"# Observation matrix, it is ajusted according with the premise that we only have observations of the position of the vehicle with the sensors\n",
"H[0,0] = 1\n",
"H[1,3] = 1\n",
"print(H)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1. 1. 0.5 0. 0. 0. ]\n",
" [0. 1. 1. 0. 0. 0. ]\n",
" [0. 0. 1. 0. 0. 0. ]\n",
" [0. 0. 0. 1. 1. 0.5]\n",
" [0. 0. 0. 0. 1. 1. ]\n",
" [0. 0. 0. 0. 0. 1. ]]\n"
]
}
],
"source": [
"#State transition matrix, this comes from the system of equations that describe the extraoplate state describe in section 1.\n",
"F[0,1] = dt\n",
"F[0,2] = 0.5*dt**2\n",
"F[1,2] = dt\n",
"F[3,4] = dt\n",
"F[3,5] = 0.5*dt**2\n",
"F[4,5] = dt\n",
"print(F)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[0.005625 0.01125 0.01125 0. 0. 0. ]\n",
" [0.01125 0.0225 0.0225 0. 0. 0. ]\n",
" [0.01125 0.0225 0.0225 0. 0. 0. ]\n",
" [0. 0. 0. 0.005625 0.01125 0.01125 ]\n",
" [0. 0. 0. 0.01125 0.0225 0.0225 ]\n",
" [0. 0. 0. 0.01125 0.0225 0.0225 ]]\n"
]
}
],
"source": [
"#Process noise matrix, it is assume that the process noise X and Y are not correlated so the covariance values are zero.\n",
"Q[0,0] = var_a*(dt**4)/4\n",
"Q[0,1] = var_a*(dt**3)/2\n",
"Q[0,2] = var_a*(dt**2)/2\n",
"Q[1,0] = var_a*(dt**3)/2\n",
"Q[1,1] = var_a*(dt**2)\n",
"Q[1,2] = var_a*dt\n",
"Q[2,0] = var_a*(dt**2)/2\n",
"Q[2,1] = var_a*dt\n",
"Q[2,2] = var_a*1\n",
"Q[3,3] = var_a*(dt**4)/4\n",
"Q[3,4] = var_a*(dt**3)/2\n",
"Q[3,5] = var_a*(dt**2)/2\n",
"Q[4,3] = var_a*(dt**3)/2\n",
"Q[4,4] = var_a*(dt**2)\n",
"Q[4,5] = var_a*dt\n",
"Q[5,3] = var_a*(dt**2)/2\n",
"Q[5,4] = var_a*dt\n",
"Q[5,5] = var_a*1\n",
"\n",
"print(Q)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[9. 0.]\n",
" [0. 9.]]\n"
]
}
],
"source": [
"# Uncertainty of predictions, it is assume that x and y measurements are uncorrelated\n",
"Rn[0,0] = var_mxy\n",
"Rn[1,1] = var_mxy\n",
"print(Rn)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Initial state (assumption): \n",
" [[0.]\n",
" [0.]\n",
" [0.]\n",
" [0.]\n",
" [0.]\n",
" [0.]]\n",
"\n",
" Initial uncertainty (assumption): \n",
" [[500. 0. 0. 0. 0. 0.]\n",
" [ 0. 500. 0. 0. 0. 0.]\n",
" [ 0. 0. 500. 0. 0. 0.]\n",
" [ 0. 0. 0. 500. 0. 0.]\n",
" [ 0. 0. 0. 0. 500. 0.]\n",
" [ 0. 0. 0. 0. 0. 500.]]\n"
]
}
],
"source": [
"# Initial conditions \n",
"Xo = np.zeros([6,1])\n",
"Po = np.zeros([6,6]) + np.identity(6)*500\n",
"print('Initial state (assumption): \\n',Xo)\n",
"print('\\n Initial uncertainty (assumption): \\n',Po)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. Implementation of Kalman filter"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"# Kalman filter\n",
"\n",
"def Kalman (Xo,Po): \n",
" Xnn = Xo\n",
" Pnn = Po\n",
" X = np.zeros(len(x_o))\n",
" Y = np.zeros(len(x_o))\n",
" K = np.zeros(len(x_o))\n",
" c = 0\n",
" \n",
" while c <= (len(x_o)-1):\n",
" # Forecast\n",
" Xnc = Xnn.copy()\n",
" Xn1_n = F @ Xnc \n",
" Pnc = Pnn.copy()\n",
" Pn1_n = F @ Pnc @ F.T + Q\n",
" \n",
" #Analysis\n",
" I = np.identity(6) \n",
" Kn = (Pn1_n @ H.T) @ inv(H @ Pn1_n @ H.T + Rn)\n",
" Xnn = Xn1_n + Kn @ ((Z_o[:,c][:,None]) - (H @ Xn1_n))\n",
" Pnn = (I - Kn @ H) @ Pn1_n @ (I - Kn @ H).T + Kn @ Rn @ Kn.T\n",
" \n",
" X[c] = Xnn[0,0]\n",
" Y[c] = Xnn[3,0]\n",
" K[c] = Kn[0,0]\n",
" #print(c)\n",
" c += 1\n",
" \n",
" return Xn1_n, Pn1_n, Xnn, Pnn, X, Y, K"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" Final prediction: \n",
" [[298.68788773]\n",
" [ -1.564776 ]\n",
" [ -1.87689296]\n",
" [-23.98936541]\n",
" [-26.77505994]\n",
" [ -0.73576821]]\n",
"\n",
" Final prediction uncertainty: \n",
" [[9.80298545 3.57106569 0.65043717 0. 0. 0. ]\n",
" [3.57106569 1.7508883 0.40087381 0. 0. 0. ]\n",
" [0.65043717 0.40087381 0.12353137 0. 0. 0. ]\n",
" [0. 0. 0. 9.80298545 3.57106569 0.65043717]\n",
" [0. 0. 0. 3.57106569 1.7508883 0.40087381]\n",
" [0. 0. 0. 0.65043717 0.40087381 0.12353137]]\n"
]
}
],
"source": [
"Xp, Pp, Xe,Pe, X, Y, K = Kalman(Xo,Po)\n",
"print('\\n Final prediction: \\n', Xp)\n",
"print('\\n Final prediction uncertainty: \\n',Pp)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
" Final corrected estimation: \n",
" [[ 1.42966179e+02]\n",
" [-5.82916224e+01]\n",
" [-1.22091727e+01]\n",
" [-1.14824473e+01]\n",
" [-2.22189962e+01]\n",
" [ 9.40774075e-02]]\n",
"\n",
" Final corrected uncertainty: \n",
" [[4.69217345 1.70928129 0.31133006 0. 0. 0. ]\n",
" [1.70928129 1.07267099 0.27734269 0. 0. 0. ]\n",
" [0.31133006 0.27734269 0.1010313 0. 0. 0. ]\n",
" [0. 0. 0. 4.69217345 1.70928129 0.31133006]\n",
" [0. 0. 0. 1.70928129 1.07267099 0.27734269]\n",
" [0. 0. 0. 0.31133006 0.27734269 0.1010313 ]]\n"
]
}
],
"source": [
"print('\\n Final corrected estimation: \\n', Xe)\n",
"print('\\n Final corrected uncertainty: \\n',Pe)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"According to this the final position of the vehicle in coordinates is X= 142.96 and Y = -11.48 with velocity in X and Y of -58.29 and -22.21 m/s respectively and a acceleration of -12.21 and 9.41 m/s^2 in X and Y respectively.\n",
"\n",
"Finally is getting the plot comparing the theoretical values, the observations and the predictions corrected done by the Kalman filter"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.legend.Legend at 0x1e8e72baca0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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/JL+/fvTpk0bZs2aBcDOnTsZPHgwXbp0oW/fvixcuBCAHTt2cN5559G9e3duuummA+5t/r///Y8+ffrQrVs3brrpJnw+X7U1QOAOQ/fcc8++93tvZwmB20/27NmTjh078vLLL1f7M3Tq1Gnf+2eeeYZHHnkEgNWrV3P++efTs2dPTj/9dJYvXw7Au+++S6dOnejatSsDBgw4zt47UFSN7EVEROQkkxydzM1db+bn7X7OG0ve4M1lb/LFui+4sMWF/G7oazT9bCR8eAvsWgNnjawyef3wQXlVLuaMdTlonZXInz5expTlW/nrsK66e9FR+susv7B85/Ia3We79Hbc2+few66zatUq3n33XV5++WV69+7NW2+9xfTp05kwYQJ//vOfGT9+PA8//DDdu3dn/PjxTJkyhauvvpoFCxbw6KOPctppp/HQQw/x8ccf7wuEy5YtY8yYMcyYMQOXy8Utt9zCm2++ydVXX11tDVdeeSX9+vXj6aefBmDMmDGMHDkSgNdff5309HTcbje9e/fmiiuuICPjMDc6qOTGG2/kn//8J23atOH777/nlltuYcqUKTz22GNMmjSJxo0bU1hYeJS9eXgKnCIiIoeREpPCHT3u4Ncdfs2/F/+bt5e/zadrPuXSlhdzU2IWjb8eFTi8vmcjFG3YN+XT4O6BKZ8Ovpjzsm6NGDM7n0cnLuX8v3/Dny/vzEVdGob5p5RDadGiBZ07dwagY8eODBw4EGMMnTt3Zu3atQBMnz6d999/H4Czzz6bHTt2UFRUxNdff824ceMAuOiii0hLSwNg8uTJzJ07l969ewPgdrtp0KD6C9EAsrKyaNmyJd999x1t2rRhxYoV9O/fH4Dnn3+eDz74AAjc833lypVHFTiLi4v59ttvGTp06L628vJyAPr378+1117LsGHDGDJkyFH31eEocIqIiByFtNg0/tDrD1zd8WpeW/QaY1eMZSJ+rmjdkxvWzCV77yHRovzABPLA4O7Dqr0i/Wd9mnJKywzuHLOAW9+ax+TljXn00o4kxbpq80eqU440EhkqMTEx+147HI597x0OB16vF4DqLsA2wRFvU81tW621XHPNNTz55JNHXcdVV13F2LFjadeuHZdffjnGGKZNm8aXX37JzJkziY+P58wzz6SsrOyA7aKiovD7/fve713u9/tJTU1lwYIFVT7rn//8J99/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\n",
"text/plain": [
"<Figure size 792x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(11,8))\n",
"plt.plot(X[0:35],Y[0:35],'o-',label='Kalman filter')\n",
"plt.plot(x_o[0:35],y_o[0:35], 'o-', label='Observations')\n",
"plt.plot(x_m,y_m, label='model values')\n",
"plt.xlabel('X')\n",
"plt.ylabel('Y')\n",
"plt.legend()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Kalman gain')"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 792x576 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"t = np.arange(0,35,1)\n",
"plt.figure(figsize=(11,8))\n",
"plt.plot(t[0:35],K[0:35],'o-')\n",
"plt.xlabel('time')\n",
"plt.ylabel('Kalman gain')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Kalman filter estimate the position of the vehicle quite well, but when the vehicle is in the curvature zone the approximation is not too precise. This is due to one of the assumptions of the problem is that the acceleration is constant but is not because of the circular motion (angular acceleration). It was observe that the results are improving varying (increasing) the value of the variance of the process, but as academical purpose is keeping the value proposed by the website in order to compare the correct implementation of the filter."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. Bibliography"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"• Alex Becker (www.kalmanfilter.net). (2021). Online Kalman Filter Tutorial. KALMAN FILTER. Retrieved January 17, 2022, from https://www.kalmanfilter.net/multiExamples.html"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.5"
}
},
"nbformat": 4,