{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.integrate import odeint\n", "from matplotlib.pyplot import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code used in the lecture. Feel free to play" ] }, { "cell_type": "code", "execution_count": 201, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 201, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Thermostat with proportional control\n", "def Thermostat(x, t):\n", " T_ambient = 10\n", " a = 0.3\n", " return a*(T_ambient - x)\n", "\n", "def Thermostat_Pcontrol(x,t,T_ref,K_p):\n", " return Thermostat(x, t) + K_p*(T_ref-x) \n", "\n", "T0 = 0 # initial state\n", "T_ref = 20\n", " \n", "t0 = 0 # Initial time \n", "tf = 15 # Final time\n", "t = np.linspace(t0, tf, 1000) \n", "\n", "K_p = 0.5\n", "solution = odeint(Thermostat_Pcontrol, T0, t, args=(T_ref,K_p))\n", "plot(t, solution, linewidth=2.0, color = 'blue')\n", "\n", "K_p = 1\n", "solution = odeint(Thermostat_Pcontrol, T0, t, args=(T_ref,K_p))\n", "plot(t, solution, linewidth=2.0, color = 'red')\n", "\n", "K_p = 3\n", "solution = odeint(Thermostat_Pcontrol, T0, t, args=(T_ref,K_p))\n", "plot(t, solution, linewidth=2.0, color = 'green')\n", "\n", "grid(color='black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlim([t0, tf])\n", "ylim([t0, T_ref + 0.2*T_ref])\n", "xlabel(r'Time')\n", "ylabel(r'Temperature')\n", "legend(['$K_p$ = 0.5', '$K_p$ = 1', '$K_p$ = 3'])" ] }, { "cell_type": "code", "execution_count": 208, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 208, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "#Thermostat with proportional integral control\n", "def Thermostat_PIcontrol(x,t,T_ref,K_p,K_i):\n", " x1,x2 = x\n", " dx1 = Thermostat(x1, t) + K_p*(T_ref-x1) + K_i*(x2)\n", " dx2 = T_ref - x1\n", " return [dx1,dx2]\n", "\n", "T0 = [0,0] # initial state\n", "T_ref = 20\n", "\n", "K_p = 3\n", "\n", "K_i = 0.5\n", "solution = odeint(Thermostat_PIcontrol, T0, t, args=(T_ref,K_p,K_i))\n", "plot(t, solution[:,0], linewidth=2.0, color = 'blue')\n", "\n", "K_i = 1\n", "solution = odeint(Thermostat_PIcontrol, T0, t, args=(T_ref,K_p,K_i))\n", "plot(t, solution[:,0], linewidth=2.0, color = 'red')\n", "\n", "K_i = 6\n", "solution = odeint(Thermostat_PIcontrol, T0, t, args=(T_ref,K_p,K_i))\n", "plot(t, solution[:,0], linewidth=2.0, color = 'green')\n", "\n", "grid(color='black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlim([t0, tf])\n", "xlabel(r'Time')\n", "ylabel(r'Temperature')\n", "\n", "legend(['$K_p$ = 3, $K_i$ = 0.5', '$K_p$ = 3, $K_i$ = 1', '$K_p$ = 3, $K_i$ = 6'])" ] }, { "attachments": { "motor.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "## DC Motor Speed: System Modeling\n", "\n", "A common actuator in control systems is the DC motor. It directly provides rotary motion and, coupled with wheels or drums and cables, can provide translational motion. The electric equivalent circuit of the armature and the free-body diagram of the rotor are shown in the following figure.\n", "\n", "![motor.png](attachment:motor.png)\n", "\n", "For this example, we will assume that the input of the system is the voltage source ($V$) applied to the motor's armature, while the output is the rotational speed of the shaft $\\dot{\\theta}$. The rotor and shaft are assumed to be rigid. We further assume a viscous friction model, that is, the friction torque is proportional to shaft angular velocity. We will assume that the magnetic field is constant and, therefore, that the motor torque is proportional (with constant $K_t$) to only the armature current. Let us remark that in SI units the motor torque and back emf constants are equal, that is, $K_t = K_e$;\n", "\n", "The physical parameters for our example are:\n", "\n", " (J) moment of inertia of the rotor 0.01 kg.m^2\n", "\n", " (b) motor viscous friction constant 0.1 N.m.s\n", "\n", " (Ke) electromotive force constant 0.01 V/rad/sec\n", "\n", " (Kt) motor torque constant 0.01 N.m/Amp\n", "\n", " (R) electric resistance 1 Ohm\n", "\n", " (L) electric inductance 0.5 H\n", " \n", "\n", "Let us suppose that measured output of the system is the angular velocity of the rotor $\\dot{\\theta}$ and the current intensity $\\dot{i}$. Then the state space model of the system is the following:\n", "\n", "$$\\dot x = Ax + Bu$$\n", "\n", "$$ y = Cx$$\n", "\n", "where state vector $x=(\\dot{\\theta}, i)$, control vector $u=V$, and state and control matrices are the following\n", "\n", "$$ A = \\begin{pmatrix} -\\frac{b}{J}&\\frac{K}{J}\\\\ -\\frac{K}{L}&-\\frac{R}{L}\\end{pmatrix},\\ B = \\begin{pmatrix} 0\\\\ \\frac{1}{L} \n", "\\end{pmatrix}$$\n", "\n", "Let us suppose that we only interested in rotation speed (angular velocity of the rotor), i.e. $C=(1,0)$.\n", "\n", "For a 1-rad/sec step reference, the design criteria are the following.\n", "\n", " Settling time less than 2 seconds\n", "\n", " Overshoot less than 5%\n", "\n", " Steady-state error less than 1%" ] }, { "cell_type": "code", "execution_count": 253, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overshut 0.07353291680196916\n", "ss_error -0.11120986562334323\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAu20lEQVR4nO3de3xU5bXw8d/iFhS5GBALAgea4KVar8RbbY+9aII19a3FS2gxre1LaYPHcI6ntT0NHwE91l4OVKDVemlTldgeWl+l1dDWtmq1lmBFEBENQiWCTQ0CChIIrPePPZlncp29JzPsPTPr+/nMZ2b27Nmz9powi72fZz+PqCrGGGMMQL+wAzDGGBMdVhSMMcbEWVEwxhgTZ0XBGGNMnBUFY4wxcQPCDiCooUOH6gknnBB2GJGwY8cOCgsLww4jEiwXjuXCsVw4zz333Fuqekyy9bKuKEycOJHVq1eHHUYkNDY2UlxcHHYYkWC5cCwXjuXCEZG/+1nPTh8ZY4yJy7qisHXr1rBDiIw5c+aEHUJkWC4cy4VjuQgu64qCMcaYzMm6NgVjTP45cOAATU1N7Nu3L9D7brjhBjZs2JChqKJp8ODBjBs3joEDB6b0/owVBRG5F7gUaFbVU7p5/bPA12NP3wW+oqovJNuu9SRwKioqwg4hMiwXTi7moqmpiaFDhzJx4kRExPf7Ro8ezciRIzMYWbSoKi0tLTQ1NTFp0qSUtiGZGhBPRD6C92P/sx6KwvnABlV9W0SmAjep6jnJtjtlyhS13kfG5JcNGzZw4oknBioI+UpVefnllznppJM6LBeR51R1SrL3Z6xNQVWfBHb08vozqvp27OmzwDg/292yZUvfg8sRlZWVYYcQGZYLJ1dzkUpB2Lx5cwYiiba+Fs6otCl8EXispxdFZCYwE2DgwIGUl5fHX1u4cCHQsZdBRUUF06dPp7Kykh07vLpUVFTEokWLWLJkCStXroyvW1tbS2NjIwsWLIgvq6qqoqysrMPnlJSUMHfuXObPn09DQ0N8+YoVK6ivr2fp0qXxZTU1NRQXF3f4x1laWsrs2bOprq5m06ZNgHcqrLa2lmXLllFXVxd4n9avXw+QU/uU6ve0atUqysvLc2qfUv2e3nzzzQ7vz4V9GjJkCK+++mp82fDhwxk9ejSvv/46ra2tAAwYMIBJkybR0tISj3PPnj3xdojEnouFhYWMHDmSzZs309bWBkBBQQETJkygubmZXbt2xdedNGkSra2tbNu2Lb5s9OjRDB8+vENMQ4YMYezYsWzbto09e/bEl0+ePJldu3bR3NwcXzZ27FgKCgo6FC2/+wQwfvz4XvepubmZr33tax2+J78ydvoIQEQmAr/u7vRRwjofBX4IXKCqLcm2OWLECN25c2faYsxm5eXlrFixIuwwIsFy4eRiLjZs2NDldIgfr776KpMnT85ARNHWXb78nj4K9UhBRE4F7gam+ikI4FVz4ykqKgo7hMiwXDiWC8d+L4IL7ToFEZkA/AqYoaqv+H1f+2GTgUWLFoUdQmRYLhzLhTNhwoS0bu/OO+9k1qxZgNdNdsaMGVRWVnLgwIG0fs7ChQs5+eSTOeWUU6ioqIifAquvr+eEE06guLiYb3/722n9zHYZKwoiUgf8BThBRJpE5IsiMktEZsVWmQuMBH4oImtExFeXosTzcvkuyHnCXGe5cCwXTrp/L9auXcupp57K7t27mTp1KhMmTKC2tjblawK688Ybb3D77bezevVqXnzxRQ4ePMiDDz7IwYMHqaqq4rHHHuOll16irq6Ol156KW2f2y6TvY8qVHWMqg5U1XGqeo+q3qGqd8Re/5KqHq2qp8duSc91AezevTtTIWedxAa+fGe5cHI+FyK+b6OPPdb/+j6sW7eOwsJCLrzwQq644gpuueWWjOxiW1sb7733Hm1tbezdu5exY8eyatUqiouLef/738+gQYO4+uqrefjhh9P+2VHpfWSMMZG3bt06rrvuOu69994OvamS+fCHP8w777zTZfn3vvc9PvGJT3RYdtxxx3HDDTcwYcIEjjjiCC6++GIuvvhili9f3uH0+bhx4/jrX/+a+s70wIqCMSa7BOgxmc7eR1u3buWoo45i8uTJbN++PdB7n3rqKd/rvv322zz88MNs3ryZESNGcMUVV3D//fd322ieiYv5sq4oTJw4MewQIqO2tjbsECLDcuFYLpxUh3roztq1aznttNO46667OPfccykpKeGMM86gubmZsrIySktL2bhxI8uXL6dfv45n5oMcKfz+979n0qRJHHOMNx/O5ZdfzjPPPMOMGTM6XJfQ1NTE2LFj07Z/7bJulNT2izqMN4GI8VguHMuFk87fi3Xr1vHBD36QMWPGcPfdd3PVVVexa9cuGhoaqKio4NZbb2X06NG0tHTtXf/UU0+xZs2aLrfOBQG8HlPPPvsse/fuRVV5/PHHOemkkygpKeHVV19l8+bN7N+/nwcffJBPfepTadu/dllXFIIetuWyxKtG853lwrFcOIlXIfdVe1EAuOiii7jyyiu59tpraWho4LTTTgNg165d8f/hp+qcc85h2rRpnHnmmXzwgx/k0KFDzJw5kwEDBrBkyRJKS0s56aSTuPLKKzn55JP7vF+dZd3pI2OMCcMDDzzQ4fnNN98MeMOAtLS08NBDD/GlL30pLZ81b9485s2b12X5JZdcwiWXXJKWz+iJFQVjjOmDAQMGsHjx4rDDSJusO300evTosEOIjKqqqrBDiAzLhWO5cA7H78V9992X8c84nLKuKAwbNizsECKjrKws7BAiw3LhWC6c4cOHhx1C1sm6omA9K5wgF8/kOsuFY7lwEoe2Nv5kXVEwxhiTOVYUjDFZIZNzv+SSvuYp64rCkCFDwg4hMkpKSsIOITIsF04u5mLw4MG0tLQE/sHLt98LVaWlpYXBgwenvI2MzryWCVOmTNHVq32Nsm2MyREHDhygqakpPq+A6dngwYMZN25cl+G8/c68hqpm1W3s2LFqPPPmzQs7hMiwXDiWC8dy4QCr1cdvbNadPkqcEDslixbB2LHwsY9BGi+BD0PihOf5znLhWC4cy0Vw+XVF8+9/D3PmeI+3b4dLLoGGBkjjrEnGGJPNsu5IoU++9S3vfvZsmDQJXngB7rwz3JiMMSZC8qeh+aWX4OSTYdgw7yihvh4+8xmvODQ2Qr/8qo/GmPzit6E5634JU56j+aGHvPtp0+DII+Gyy2DiRNi8GbJ0Ttv6+vqwQ4gMy4VjuXAsF8FlXVFobm5O7Y1/+IN33z4uTP/+8OUve4/vuafvgYVg6dKlYYcQGZYLx3LhWC6Cy7qikJLWVnj6aRCBj37ULf/sZ737xx6DvXvDic0YYyIkP4rC2rVeYTjxRBg1yi0fPx7OPtsrCL/9bXjxGWNMRGRdURgzZkzwNz33nHd/1lldX7v8cu/+l79MPaiQ1NTUhB1CZFguHMuFY7kILuuuU9i69UguvLDjsiuvhK9+1fsPf3cz1X1eC/g88NYJH2Jap/fy3nV8hb9x1YoVbH3tADOu7XrNwn/8B5SXw8aNrhki0be+BZ/4BKxZA9XVXV//7/+G88+HZ56Bb36z6+uLFsHpp3uXUcRm+OvgzjvhhBNgxQr4/vfd8ra2MxgwAO67zzvo+fnP4Uc/6vr+5cu9A6Sf/tS7dfboo17b+w9/CL/4RdfX//Qn7/5734Nf/7rja0cc4Z19A1iwAB5/vOPrI0e6evuNb8Bf/tLx9XHj4P77vcfV1V4OEx1/PPz4x97jmTPhlVc6vn766V7+iouL+dznoKmp4+vnnQe33uo9/sxnoPOc6h//OLT/bkydCu+91/H1Sy+FG27wHnf+uwMff3uf925vveX1cejsK1+Bq66CrVthxoyur6fyt9f+dwGZ+9trF/W/vbvuKgYy+7cHZOXfXk+y7kghpbFP2r+t2KTbHRxxJIwZC7t2wfPP9y24w2zDhpfDDiEyKisrww4hMuzvwrG/ixT4GQsjlRtwL9AMvNjD6wLcDjQCa4Ez/Wx3+PDhwQb8OHRIdcQIVVDdvr37df7t37zXa2qCbTtkl156adghRIblwrFcOJYLhwiMffRToLd5AacCk2O3mUA3B59p0NICO3fC0KFw7LHdr1Na6t1n6fUKxhiTLhkrCqr6JLCjl1UuA34WK2LPAiNEJGkrcuA5mjdu9O6PP97rktqdf/1XGDTIGwep84m/CCttL2bGcpHAcuFYLoILs6H5OGBrwvOm2LLtnVcUkZl4RxOMGjWqwxy0CxcuBGBO+0B3QEVFBdOnT6eyspIzXniBamD1u+8yBViyZAkrE44IamtraWxspGDoUE5raeG2iy/mtFtuoaysrMPnlJSUMHfuXObPn99h5MUVK1ZQX1/f4SKZmpoaiouLO5zPLC0tZfbs2VRXV7Np0yYACgsLqa2tZdmyZdTV1fnepx07vFpbVFQEvezTggUL4suqqqqyZp8WLVqU0j6tXLky5/Yple9p+vTpHd6fC/vUl++pLHbBai7tUyrfk29+zjGlegMm0nObwm+ACxKePw6clWybo0ePDnYi7cYbvfaCm27qfb3bbvPW+8IXgm0/RNdff33YIUSG5cKxXDiWCwefbQphHik0AeMTno8Dkk5w0NIyKliX1PWf5fNs5/PHH997t8DSUrZ+fTEzHvgSvKZ47eCeqHZJXbfui6xZE/1ugYejS+qmTZuysltgJrqktv9dgHVJ3b/f+x+3dUnt+npPwuyS+ghwjXjOBXapapdTR33W3oX1/e/vfb1TT4VjRsP+/bDHhrwwxuQpP4cTqdyAOrz2gQN4RwVfBGYBs9R1SV0KbALWAVP8bHfkyJHBjplGjfJOC23blnzdykpv3e9+N9hnhOSaa64JO4TIsFw4lgvHcuHg8/RRbs+nsHcvDBnizay2b1/yORMefBAqKrzjut//vu/BGmNMROTsfArtreq+tJ/kGzfO3yQ6F13kdVt96ino61zQh8GyZcvCDiEyLBeO5cKxXASX20Vha6zH6/jxva/XbuRIKCnx2hXaW7giLLGLWr6zXDiWC8dyEVzWFYVAXn/du58wwf972ifhsRmbjDF5KLeLQtAjBbCiYIzJa1lXFMYH+YFPpSiUlMDRR0NjI8SuKoyq9qsajeUikeXCsVwEl3VFIZBUisKAAV6DM3hX7BhjTB7JuqKwtf2H3o/tsWvhjjsu2Id8+tPefcRnY0sc9yTfWS4cy4VjuQgu64pCIG++6d33NGR2Tz75SSgogKefhm1JR94wxpickbtF4eBBb9APETjmmGDvHTrUa3BWhYceykx8xhgTQVlXFAoLC/2t+M9/wqFD3mhcA7vOu5zUZz7j3S9fHvy9h0lFRUXYIUSG5cKxXDiWi+Byd5iLNWvgjDPglFNg3brgH7Rzp3fa6cAB2LIl2LUOfrS2eldc79vnFa/CQu+IZtCg9H6OMcaQw8NcbNmyxd+K7e0J73tfah80YoTX4KwK99yT2jYSqXpj+371q96YvEccAcXFXtE69VRvKI6CAhgzxhsn98tfhv/5H2+84PXrvXGcOrFJyR3LhWO5cCwXwYU5n0JK2tra/K34j39496kWBfB+mH/+c68o1NR43VWDUvUGip83DzZscMv79/cKwZFHeu0eO3Z4p7zefNO7PfFE120de6x3xFJYCIWFXPXMM95A8P36edvr188boqO11d327XOP9++HtrbubwcPerfOEqcw7TydaZDnGX7vTVu2wPPPB39vDpr72mveUbKxXKQg64qCb6n2PEp04YXe/+pfeQUefti1M/i1YQPMmgVPPuk9HzsWrr3Wmz3jjDO6nio6eNC7tmLjRndrbITNm71TWP/4hyt2wCUAP/hB6vuXQyZBaqcJc1ARdJ0xJk9ZLoLLuqJQUFDgb8W+nj4C73+V113n3W6+GS6/3N//NFXhJz/x3rd3r9fYffPNXkHordG7f3+YONG7dZ5w/OBBr3tsUxO8/Tbs2MHye+5h2mWXuf/lHzrkFZqCAncbPNg9HjTI+/wBA9ytf3/3uF+/jvuX2N7Uue0pyPPD8N7bbruNr3/968Hfm4NHDt/97nf5z//8z7DDiATLRYIzz/S1Wu42NFdUePMj3HefN1deqvbtg6Ii7we5rg6uvrr39Xfv9uZYbB+y93Ofg9tv94bOMMaYkORsQ3Nzc7O/FdtPs/Tl9BF4/9OeN897XF3tnfvvSUMDnHWWVxCOPNKblPa++zJWEJYsWZKR7WYjy4VjuXAsF8FlXVHYvXu3vxXfesu7HzWq7x967bXw4Q97hWbaNK/RNtGBA94M3eef77UBnHoqPPccZLjnw8qVKzO6/WxiuXAsF47lIrisKwq+pbMo9OsH99/vtU/88Y9wwQXw6KNew+Zdd3ndSr/5Ta8Xz/XXw1//Ciee2PfPNcaYwyzrGpp9UYWWFu/xyJHp2eaECbByJVx2Gaxe7Y2PlGjyZFi8uGsDsTHGZJGsa2g+/fTTdU2yLmbvvAPDhnkXiHVz0Vef7NwJS5Z4F5Xt3Ol1WZ02zWuAPsxXI+/YscP/sB85znLhWC4cy4WTsw3NrZ3P53en/SghHaeOOhsxAr71LXj2WXj5ZXjkEbjmmlCGp2hsbDzsnxlVlgvHcuFYLoJLWhREZLWIVIlIJPpUbm+fI6E37e0J6Tp1FFELFiwIO4TIsFw4lgvHchGcnyOFq4GxQIOIPCgipSIRv+Ink0cKxhiTw5IWBVVtVNX/Ao4HlgH3Aq+LyDwRiebJunT2PDLGmDziq01BRE4Fvg98F/glMA3YDfwhyfvKRGSjiDSKyI3dvD5cRFaIyAsisl5EvpAsltGjRycPOE9OH1VVVYUdQmRYLhzLhWO5CC5pl1QReQ7YCdwD3Kiq7S29fxWRD/Xyvv7AUuAioAnv9NMjqvpSwmpVwEuqWi4ixwAbReQBVd3f03aHDRuWLOS8OX1UVlYWdgiRYblwLBeO5SI4P0cKV6jqx1V1WXtBEJFJAKp6eS/vOxtoVNXXYj/yDwKXdVpHgaGxNoqjgB1Ar2Nj++pNkCdHCuXl5WGHEBmWC8dy4VgugvNTFLqbj9LPHJXHAVsTnjfFliVaApwEbAPWAder6iEf2+5dnhwpGGNMuvV4+khETgROBoaLSOIRwTBgsI9td9dDqfOVcqXAGuBjeEOf/05EnlLVDgMcichMYCbAwIEDO1T/hQsXAjBnzpz4srs2b+Z9wHfuvZenYqOVFhUVsWjRIpYsWdJhPJTa2loaGxs7dF2rqqqirKysw+eUlJQwd+5c5s+fT0NDQ3z5ihUrqK+vZ+nSpfFlNTU1FBcXd5j1qbS0lNmzZ1NdXc2mTZsAb77p2tpali1bRl1dXa/7VFFRwfTp06msrGRHbFC+9evXA+TUPqX6Pa1atYry8vKc2qdUv6f9+/d3eH8u7FOq39OqVaviZxdyZZ9S/Z58U9Vub3inen4CtMTu22+3A+f39L6E958HrEx4/g3gG53W+Q3w4YTnfwDO7m27Y8eO1aROO00VVJ97Lvm6WWzevHlhhxAZlgvHcuFYLhxgtSb53VbV5MNciMh5qvoX/2Um/r4BwCvAx4E3gAZguqquT1jnR8A/VPUmETkW+Btwmqq+1dN2fc2nMG4cvPEG/P3v3phFxhiT5/o8zIWIfC32cLqI3N75lmzDqtoGzAZWAhuAX6jqehGZJSKzYqstAM4XkXXA48DXeysI4OOKZtW8aWieP39+2CFEhuXCsVw4lovgeuuS2j7LvI9pzrqnqo8Cj3ZadkfC423AxUG2uWfPnt5X2LvXm+9g8GBvopsclnjeMt9ZLhzLhWO5CK7HoqCqK2L3tYcvnDRonxnt6KNzcv5dY4zJJD8D4v1OREYkPD9aRKI7ndGuXd79iBGhhmGMMdnIT0PzGlU9vdOy51X1jEwG1pOkDc1PP+3NjHbuufCXwO3jxhiTk9I5n8JBEYl34RGRf6Hr9QaHTdI5mtuPFIYPz3wwIauvrw87hMiwXDiWC8dyEZyfovBfwJ9F5D4RuQ94Eu+ag1A0Nzf3vkIenT5KvBgm31kuHMuFY7kILumAeKpaLyJnAufGFs1J1m00VDt3evd5cKRgjDHplrQoxJwPfCTh+a8zEEt65NHpI2OMSTc/vY++DVwPvBS7XS8it2Y6sJ6MGTOm9xXyqCjU1NSEHUJkWC4cy4VjuQjOz5HCJcDpGhu9VERqgecJqV2hoKCg9xXyqCgUFxeHHUJkWC4cy4VjuQjO18xrwIiEx6H+2m7ZsqX3FfKooTlxhMV8Z7lwLBeO5SI4P0cKtwLPi8gf8YbD/ggh9j5KyhqajTEmZX56H9WJyJ+AEryi8HVVfTPTgaUsj04fGWNMuvU2yc6ZnRY1xe7HishYVf1b5sLqWdI5mvOoKJSWloYdQmRYLhzLhWO5CK7HYS5ip4t6oqr6scyE1Lukw1xMmABbt8LmzTBx4mGLyxhjoqzPw1yo6kd7uYVSEAC2bt3a+wp51NBcXV0ddgiRYblwLBeO5SI4P9cpHCki3xKRH8eeTxaRSzMfWvdaW1t7fvHgQWgfG2no0MMTUIja53E1lotElgvHchGcny6pPwH2413VDF7bws0Zi6gv3nnHux86FPr3DzcWY4zJQn6KQpGqfgc4AKCq7+H1QgrFgAG9dJjKo0ZmgMLCwrBDiAzLhWO5cCwXwfmZT+EZ4OPA06p6pogUAXWqevbhCLCzXhua166F006Dk0+GF188vIEZY0yEpXM+hZuAemC8iDwAPA58rW/hpW5H+3Sb3cmjRmaAZcuWhR1CZFguHMuFY7kILmlRUNXfApcDnwfqgCmq+qfMhtWzXotCnl3NXFdXF3YIkWG5cCwXjuUiuKRXNIvII3jF4BFV3ZP5kPogz9oUjDEm3fycPvo+8GHgJRH5XxGZJiKDMxxXaqwoGGNMn/gZ++gJ4AkR6Q98DPi/wL1AkvEmMmP8+PE9v5hnRWHhwoVhhxAZlgvHcuFYLoLzNfOaiBwBlANXAWcCtZkMKmV51tBsjDHp5ueK5p8DG/COEpbiXbdwXaYD60mvw1zkWUPznDlzwg4hMiwXjuXCsVwE5/eK5iJVnaWqf2ifgc0PESkTkY0i0igiN/awzoUiskZE1ovIE3633a08O31kjDHp5qdNoT6VDcfaIJYCF+ENjdEgIo+o6ksJ64wAfgiUqerrIjI6lc+Ks6JgjDF94nc6zlScDTSq6muquh94ELis0zrTgV+p6usAqtqcbKO9XraeZ0WhoqIi7BAiw3LhWC4cy0VwvR4piIgA41Q1yXjV3ToOSHxfE3BOp3WOBwbGZnYbCvxAVX/WTRwzgZkAo0aNory8PP5ae++COXPmsHTdOiYAv3n6aT55wQVUVlbGL3YrKipi0aJFLFmyhJUrV8bfX1tbS2NjIwsWLIgvq6qqoqysrMPnlJSUMHfuXObPn09DQ0N8+YoVK6ivr2fp0qXxZTU1NRQXF3eYH7a0tJTZs2dTXV0dH7mxsLCQ2tpali1b1uEim8R9aldRUcH06dO77NP06dNzbp9S/Z7q6upybp9S+Z46vz8X9qkv39PZZ5+dc/uUyvfkm6r2egOeS7ZOD++7Arg74fkMYHGndZYAzwJDgFHAq8DxvW135MiR2qOxY1VB9fXXe14nh1xzzTVhhxAZlgvHcuFYLhxgtfr47fZz+uhZESnxX2bimoDEiwrGAdu6WadeVfeo6lvAk8BpvW20ra2t5xfz7PRRr0N+5BnLhWO5cCwXwfkpCh8F/iIim0RkrYisE5G1Pt7XAEwWkUkiMgi4Gnik0zoPAx8WkQEiciTe6aUNQXYgrq0N9uwBETjqqJQ2YYwx+c7PxWtTU9mwqraJyGxgJdAfuFdV14vIrNjrd6jqBhGpB9YCh/BON/U65nVBQUH3L7TPuDZsGPTLZPt5dBQVFYUdQmRYLhzLhWO5CC7pfArxFb3uovExjzTWY+hw63E+hc2b4f3vh3/5F9iy5bDHZYwxUZa2+RRE5FMi8iqwGXgC2AI81ucIU9Tc3EOv1Ty7mhkI1qMgx1kuHMuFY7kIzs95lgXAucArqjqJ2CxsGY2qF7vbTxN1lmeNzECHbnP5znLhWC4cy0VwforCAVVtAfqJSD9V/SNwembDSkEeFgVjjEk3Pw3NO0XkKLzuog+ISDPQS7/QkFhRMMaYPvNzpHAZ8B4wB2+u5k14w2iHYuLEid2/kIfDZtfWRnME8zBYLhzLhWO5CM7PHM17VPWgqrapaq2q3h47nRSK1tbW7l/Iw4bmxsbGsEOIDMuFY7lwLBfB9VgUROQdEdndze0dEemhtTfztm/f3v0LeXj6KHEslnxnuXAsF47lIrge2xRUdejhDKTP8rAoGGNMuiVtaBaRCd0tD+vitR5ZUTDGmD7z0/voNwmPBwOTgI3AyRmJKInRo3uYhycPG5qrqqrCDiEyLBeO5cKxXATne5iL+BtEzgS+rKpfzkxIvetxmItzzoFVq+CZZ+C88w5/YMYYE2FpG+aiM1X9G5DKUNpp0WNvgjw8fZQ4wUe+s1w4lgvHchGcnzaFf0942g84E/hnxiJKVR4WBWOMSTc/bQqJvZDa8NoYfpmZcPrAioIxxvRZ0qKgqvMORyB+DRkypOvC/fvhvfegf3/o7vUcVVIS2lm8yLFcOJYLx3IRXNKGZhHpPFsawC5gNXCnqu7LRGA96bah+Z//hNGjobAQWkK72NoYYyIrnQ3Nm4F3gbtit93AP4DjY88Pq26vaM7TU0fz588PO4TIsFw4lgvHchGcnzaFM1T1IwnPV4jIk6r6ERFZn6nAerJnz56uC/O0KDQ0NIQdQmRYLhzLhWO5CM7PkcIxiVc1xx6Pij3dn5GogsrTomCMMenm50jhP4A/i8gmQPCuaP6qiAwBojEubR5ezWyMMZng64pmESkATsQrCi8f7sblRN02NP/kJ3DttXDNNWDjpxtjTBfpvqL5LLyxjk4FrhSRa/oSXF90O0dznp4+qq+vDzuEyLBcOJYLx3IRXNKiICL3Ad8DLsAb3qIESFptMqW5ubnrwjwtCkuXLg07hMiwXDiWC8dyEZyfNoUpwAc06Mh5h1OeFgVjjEk3P6ePXgTel+lA+sQamo0xJi38HCmMAl4SkVVAfIJkVf1UxqLqxZgxY7ouzMP5mQFqamrCDiEyLBeO5cKxXATnpyjclOrGRaQM+AHQH7hbVb/dw3olwLPAVaq6vLdtFhQUdF2Yp6ePiouLww4hMiwXjuXCsVwEl/T0kao+kXjDGyn1ymTvE5H+wFJgKvABoEJEPtDDercBK/0EvGXLlq4L87QoVFZWhh1CZFguHMuFY7kIzleXVBE5XUS+IyJbgJuBDT7edjbQqKqvqep+4EHgsm7Wuw5vKO5uuhX5lKdFwRhj0q3H00cicjxwNVABtAA/x7vY7aM+t30csDXheRNwTqfPOA74NPAxepnNTURmAjMBBg4c2GE2pYULFzJxxw4GADOuu46dgwdTUVHB9OnTqaysZMeOHQAUFRWxaNEilixZwsqV7qCktraWxsZGFixYEF9WVVVFWVlZh88pKSlh7ty5zJ8/v8N4KitWrKC+vr5D17eamhqKi4s7/C+ltLSU2bNnU11dzaZNmwAoLCyktraWZcuWUVdX12GfAObMmRNf1t0+rV/vDT2VS/uU6ve0atUqysvLc2qfUv2e9u/f3+H9ubBPqX5Pq1atis/WmCv7lOr35JuqdnsDDgFPAMUJy17raf1u3n8FXjtC+/MZwOJO6/wvcG7s8U+Bacm2O378eO1i0CBVUN27t+trOWzx4sVhhxAZlgvHcuFYLhxgtfr47e5xmAsR+TTekcL5QD3e6Z+7VXWSn2IjIucBN6lqaez5N2JF6NaEdTbjDZ0BXi+nvcBMVf1/PW23yzAX+/bBEUfAwIHQ2goiPb3VGGPyVp+HuVDVh1T1Krwxj/4EzAGOFZEficjFPmJoACaLyCQRGYRXYDpM2KOqk1R1oqpOBJYDX+2tIABs3bq144LE9oQ8KwjV1dVhhxAZlgvHcuFYLoLz0/toj6o+oKqXAuOANcCNPt7XBszG61W0AfiFqq4XkVkiMivVgFtbWzsuyONG5vbzjsZykchy4VgugvNznUKcqu4A7ozd/Kz/KPBop2V39LDu54PEEmdXMxtjTNr4HSU1MgYM6FTH8vRqZvB6JhiP5cKxXDiWi+B8zacQJV0ampcvhyuugE9/Gn71q/ACM8aYCEv3fAqR0d7/Ni6P2xSWLVsWdgiRYblwLBeO5SI4KwpZLPFilnxnuXAsF47lIrisKwpdWEOzMcakTfYXhTxuaDbGmHTLuqIwfvz4jgvy+PRR+/gnxnKRyHLhWC6Cy7qi0EUeFwVjjEm3rCsKvQ5zkWcSR0jMd5YLx3LhWC6Cy7qi0IU1NBtjTNrkTlHIwyMFY4xJt6wrCl0uW8/j3kcVFRVhhxAZlgvHcuFYLoLL7mEuVGHQIGhr8+ZVKCgINzhjjImonB3mYsuWLe7Je+95BaGgIC8Lgk1K7lguHMuFY7kILuuKQltbm3uS5+0JXYb8yGOWC8dy4Vgugsu6otBBe3vC0UeHGoYxxuSKrCsKBYmnidqLQp52Ry0qKgo7hMiwXDiWC8dyEVx2NzQ/9hhccgmUlkJ9fbiBGWNMhOVsQ3Nzc7N7kudHCkuWLAk7hMiwXDiWC8dyEVzWFYXdu3e7J3leFFauXBl2CJFhuXAsF47lIrisKwodvP22d5+nRcEYY9Itu4tCnh8pGGNMumVdUZg4caJ7kuddUmtra8MOITIsF47lwrFcBJd1RaG1tdU9yfMjhcbGxrBDiAzLhWO5cCwXwWVdUdi+fbt7kudFYcGCBWGHEBmWC8dy4Vgugsu6otBBnhcFY4xJt4wWBREpE5GNItIoIjd28/pnRWRt7PaMiJwW6AOsKBhjTFplrCiISH9gKTAV+ABQISIf6LTaZuBfVfVUYAHw42TbHT16tHuS50Whqqoq7BAiw3LhWC4cy0VwGRvmQkTOA25S1dLY828AqOqtPax/NPCiqh7X23bjw1wkzqXw3nsweHC6d8EYY3KG32EuBmQwhuOArQnPm4Bzeln/i8Bj3b0gIjOBmQADBw6kvLycgrY2lre1caiggNeamjpM0F1RUcH06dOprKyMD51bVFTEokWLWLJkSYerHGtra2lsbOzQIFVVVUVZWRnl5eXxZSUlJcydO5f58+fT0NAQX75ixQrq6+tZunRpfFlNTQ3FxcUdxnIvLS1l9uzZVFdXs2nTJsCbRa62tpZly5ZRV1cXX3fhwoUASfdp/fr1vPbaazm1T6l+T6tWreLss8/OqX1K9Xuqqalh0KBBObVPqX5Pq1at4umnn86pfUr1e/Irk0cKVwClqvql2PMZwNmqel03634U+CFwgaq29LbdESNG6M6dO+GNN2DcOBgzBrZty8AeRF95eTkrVqwIO4xIsFw4lgvHcuFE4UihCRif8Hwc0OXXW0ROBe4GpiYrCB3keXuCMcZkQiZ7HzUAk0VkkogMAq4GHklcQUQmAL8CZqjqK342OmTIEO+BFQVKSkrCDiEyLBeO5cKxXASX0fkUROQSYBHQH7hXVW8RkVkAqnqHiNwNfAb4e+wtbckOb+INzb/5DVx6KUydCo8+mrF9MMaYXBCJ+RRU9VFVPV5Vi1T1ltiyO1T1jtjjL6nq0ap6euyWNOD4Fc12pMD8+fPDDiEyLBeO5cKxXASXdVc079mzx3tgw2Z36OGQ7ywXjuXCsVwEl3VFIS7W5SpfR0g1xphMyN6i0BLrqDRqVLhxGGNMDsm6olBcXOw9eOst7z6Pi4L1v3YsF47lwrFcBJd1RSE+R3P7kcLIkeEFE7L6+vqwQ4gMy4VjuXAsF8FlXVFobm72HtiRQofL5vOd5cKxXDiWi+CyrijEWVEwxpi0y96iYKePjDEm7bKuKIwZMwZaW+Hdd2HAABg2LOyQQlNTUxN2CJFhuXAsF47lIrisKwoFBQUdu6OKhBtQiOI9sYzlIoHlwrFcBJd1RWHLli2uPSHPTx0ljsWe7ywXjuXCsVwEl3VFAbBGZmOMyZDsLArWyGyMMRmRdUVh2LBhdqQQU1paGnYIkWG5cCwXjuUiuIzOp5AJU6ZM0dXl5XDTTfBf/wU33xx2SMYYE3mRmE8hE7Zu3QrtcyqMGRNuMCGrrq4OO4TIsFw4lgvHchFc1hWF1tZWKwoxmzZtCjuEyLBcOJYLx3IRXNYVBQC2bfPux44NNw5jjMkxWVcUBgwYYEcKMYWFhWGHEBmWC8dy4VgugsvOhuYXXoC2Nti3DwoKwg7JGGMiL2cbmt/+5z+9glBYmPcFYdmyZWGHEBmWC8dy4Vgugsu6ovBu+4Vr48eHG0gE1NXVhR1CZFguHMuFY7kILuuKwsBDh7wHNtCVMcakXfYWhaKicAMxxpgclHVFYcQRR3gPrCiwcOHCsEOIDMuFY7lwLBfBZV1RkP37vQdWFIwxJu0yWhREpExENopIo4jc2M3rIiK3x15fKyJnJt3o3r3e/cknpz3ebDNnzpywQ4gMy4VjuXAsF8FlrCiISH9gKTAV+ABQISIf6LTaVGBy7DYT+FGy7fYDmDAB3ve+tMZrjDEms0cKZwONqvqaqu4HHgQu67TOZcDP1PMsMEJEkl+mfFnnzRhjjEmHARnc9nHA1oTnTcA5PtY5DtieuJKIzMQ7kgBolcWLX2Tx4vRGm51GichbYQcREZYLx3LhWC6cE/yslMmiIN0s6zymhp91UNUfAz8GEJHVfi7VzgeWC8dy4VguHMuFIyKr/ayXydNHTUDiZcfjgG0prGOMMeYwyWRRaAAmi8gkERkEXA080mmdR4BrYr2QzgV2qer2zhsyxhhzeGTs9JGqtonIbGAl0B+4V1XXi8is2Ot3AI8ClwCNwF7gCz42/eMMhZyNLBeO5cKxXDiWC8dXLrJu6GxjjDGZk3VXNBtjjMkcKwrGGGPisqooJBs2I1+IyL0i0iwiL4YdS9hEZLyI/FFENojIehG5PuyYwiIig0VklYi8EMvFvLBjCpOI9BeR50Xk12HHEjYR2SIi60RkTbKuqVnTphAbNuMV4CK8rqwNQIWqvhRqYCEQkY8A7+JdDX5K2PGEKXYF/BhV/ZuIDAWeA/5Pnv5dCDBEVd8VkYHAn4HrY6MF5B0R+XdgCjBMVS8NO54wicgWYIqqJr2QL5uOFPwMm5EXVPVJYEfYcUSBqm5X1b/FHr8DbMC7Kj7vxIaLeTf2dGDslh3/60szERkHfBK4O+xYsk02FYWehsQwBgARmQicAfw15FBCEztlsgZoBn6nqvmai0XA14BDIccRFQr8VkSeiw0b1KNsKgq+hsQw+UlEjgJ+CVSr6u6w4wmLqh5U1dPxRgc4W0Ty7vSiiFwKNKvqc2HHEiEfUtUz8Uamroqdgu5WNhUFGxLDdCt2/vyXwAOq+quw44kCVd0J/AkoCzeSUHwI+FTsPPqDwMdE5P5wQwqXqm6L3TcDD+Gdju9WNhUFP8NmmDwTa1y9B9igqv8TdjxhEpFjRGRE7PERwCeAl0MNKgSq+g1VHaeqE/F+J/6gqp8LOazQiMiQWCcMRGQIcDHQY8/FrCkKqtoGtA+bsQH4haquDzeqcIhIHfAX4AQRaRKRL4YdU4g+BMzA+9/gmtjtkrCDCskY4I8ishbvP1G/U9W8745pOBb4s4i8AKwCfqOq9T2tnDVdUo0xxmRe1hwpGGOMyTwrCsYYY+KsKBhjjImzomCMMSbOioIxxpg4KwrGdENERiZ0cX1TRN6IPX5XRH4YdnzGZIp1STUmCRG5CXhXVb8XdizGZJodKRgTgIhc2D4+v4jcJCK1IvLb2Hj1l4vId2Lj1tfHht9ARM4SkSdig5GtjA33bUwkWVEwpm+K8IZovgy4H/ijqn4QeA/4ZKwwLAamqepZwL3ALWEFa0wyA8IOwJgs95iqHhCRdUB/oH34gHXAROAE4BTgd94wTfQHtocQpzG+WFEwpm9aAVT1kIgcUNdIdwjv35cA61X1vLACNCYIO31kTGZtBI4RkfPAG+ZbRE4OOSZjemRFwZgMik0dOw24LTZK5Rrg/FCDMqYX1iXVGGNMnB0pGGOMibOiYIwxJs6KgjHGmDgrCsYYY+KsKBhjjImzomCMMSbOioIxxpi4/w+r6cm0ZVu4twAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def StateSpace_PController(x, t, A, B, C, y_ref, K_p):\n", " u = K_p*(y_ref - np.dot(C,x))\n", " return np.dot(A,x) + np.dot(B,u)\n", "\n", "J = 0.01\n", "b = 0.1\n", "K = 0.01\n", "R = 1\n", "L = 0.5\n", "\n", "y_ref = 1.0\n", "\n", "A = np.array([[-b/J, K/J],\n", " [-K/L, -R/L]])\n", "\n", "B = np.array([0,\n", " 1/L])\n", "\n", "C = np.array([1,0])\n", "\n", "x0 = np.array([0,\n", " 0]) # initial state\n", "\n", "t0 = 0 # Initial time \n", "tf = 5 # Final time\n", "t = np.linspace(t0, tf, 1000)\n", "\n", "K_p = 80;\n", "\n", "solution = odeint(StateSpace_PController, x0, t, args=(A,B,C,y_ref,K_p))\n", "\n", "y = (C * solution)[:,0]\n", "\n", "plot(t, y, linewidth=2.0, color = 'red')\n", "grid(color='black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlim([t0, tf])\n", "ylim([0, 1.25])\n", "ylabel(r'Angular velocity ')\n", "xlabel(r'Time ')\n", "legend(['$K_p$ = 80'])\n", "\n", "plot(t, 0.98*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "plot(t, 1.02*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "\n", "overshut = max(abs(y))/y_ref - 1\n", "ss_error = y[len(t)-1]-y_ref\n", "print('overshut', overshut)\n", "print('ss_error', ss_error)" ] }, { "cell_type": "code", "execution_count": 256, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overshut 0.22573855732687065\n", "ss_error -0.005540550727208049\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "J = 0.01\n", "b = 0.1\n", "K = 0.01\n", "R = 1\n", "L = 0.5\n", "\n", "y_ref = 1.0\n", "\n", "K_p = 120;\n", "\n", "K_i = 60;\n", "\n", "def StateSpace_PIController(x, t, A, B, C, R, y_ref, K_p):\n", " u = K_p*(y_ref - np.dot(C,x))\n", " return np.dot(A,x) + np.dot(B,u) + np.dot(R,y_ref)\n", "\n", "A = np.array([[-b/J, K/J, 0],\n", " [-K/L, -R/L, K_i/L],\n", " [-1, 0 ,0]])\n", "\n", "B = np.array([0,\n", " 1/L, 0])\n", "\n", "R = np.array([0,0,1])\n", "\n", "C = np.array([1, 0, 0])\n", "\n", "x0 = np.array([0,\n", " 0,0]) # initial state\n", "\n", "t0 = 0 # Initial time \n", "tf = 5 # Final time\n", "t = np.linspace(t0, tf, 1000)\n", "\n", "\n", "solution = odeint(StateSpace_PIController, x0, t, args=(A,B,C,R,y_ref,K_p))\n", "\n", "y = (C * solution)[:,0]\n", "\n", "plot(t, y, linewidth=2.0, color = 'red')\n", "grid(color='black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlim([t0, tf])\n", "ylabel(r'Angular velocity ')\n", "xlabel(r'Time ')\n", "legend(['$K_p$ = 120, $K_i$ = 60'])\n", "\n", "plot(t, 0.98*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "plot(t, 1.02*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "\n", "overshut = max(abs(y))/y_ref - 1\n", "ss_error = y[len(t)-1]-y_ref\n", "\n", "print('overshut', overshut)\n", "print('ss_error', ss_error)" ] }, { "cell_type": "code", "execution_count": 259, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "overshut -0.0017096343162696925\n", "ss_error -0.0017096343162696925\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAwaklEQVR4nO3de3wU9bn48c9Dwk0EaVAUDR4wQUoRpErAS7XeEy2ptaISLI21LdoGD6HH06q/hlZolXq0xAJeausxxzZ4q1ViMVjbWqtVASuKgMhyUSLYWCgEUENCnt8fs9nZzXUnyWZms8/79drX7lx28syzyT6Z+c58v6KqGGOMMQC9/A7AGGNMcFhRMMYYE2FFwRhjTIQVBWOMMRFWFIwxxkSk+x2AVwMHDtTRo0f7HUYg7N69m4yMDL/DCATLhcty4bJcuF5//fV/qepR7a2XdEVhxIgRrF692u8wAiEUCpGdne13GIFguXBZLlyWC5eIvBfPenb6yBhjTETSFYXt27f7HUJgzJkzx+8QAsNy4bJcuCwX3iVdUTDGGJM4VhSMMcZEJF1RsCsJXAUFBX6HEBiWC5flwmW58E6SrUO8iRMnql19ZIwx3ojI66o6sb31ku5IYdu2bX6HEBiFhYV+hxAYlguX5cJlufAu6e5T2LPnaM45J3belVfCd78LH38Ml1zS/D3XXOM8/vUvmDq1+fLvfAeuugq2b4cZM5ov/6//gvx82LgRrruu+fIf/hAuuADWrIHi4ubLb7sNzjgD/v53uOWW5stLS2HCBHj+efjJT5ovv/9+GD0aKirgrrvc+WvX3sg558DDD8Pw4fDoo3Dvvc3f/8QTcOSR8NBDzqOp5cvhsMPgnnvgsceaL3/hBef5zjvhmWdil/XvD88+67yePx/+9KfY5UOGwO9+57y++WZ45ZXY5ZmZ8JvfOK+Li50cRjvxRPjlL53XM2fCu+/GLp8wwcnf7t27+drXoKoqdvnpp8PttzuvL78cdu2KXX7++VBS4ry++GL45JPY5VOmwI03Oq+b/t5BMH/3Gn8vIHG/e42C/rt38OBuILG/e0BS/u61JumOFIwxxiSQqibkATwIVANvt7JcgF8AIeAt4JR4tjt06FA1jtmzZ/sdQmBYLlyWC5flwgWs1ji+YxPW0CwiZwP7gf9T1ZNaWH4JcANwCTAZuFtVJ7e3XWtoNsYY7+JtaE5Ym4KqvigiI9pY5VKcgqHAqyIyWESGqerOtrZbXV3dlWEmtcWLFzNr1iy/wwgEy4UrJheq7qOhIfa5pXmdXZbIbbc2r/HRdH9VqXz2WfLy8pqv28r6PXa+Bwm9JDVcFJ5p5UjhGWCBqr4Unv4T8ANVbXYYICIzgZkAvXv3PjU3NzeybOHChUDs7ewFBQVMnz6dwsJCdu92GpqysrIoLS1l8eLFrFixIrJuWVkZoVCI+fPnR+YVFRWRl5dHfn5+ZF5OTg5z585l3rx5rFq1KjK/oqKCyspKlixZEplXUlJCdnZ2zJUPubm5zJo1i+LiYjZv3gw491yUlZVRXl7O0qVLPe/TunXr2LJli3/7dNFFzPrud/mv4mLe27yZXqoMGTyYexct4snHH+fpJ5+klyppqpTccgscOsQdt91GL1V6qXLxRReRd8EF/OTWW9m/dy9pqhx3zDF897rreOapp1jz+uuRdWddfz3/3LGDZb//PWnheeeefTZjx4zh/nvvpeq99/iP44/nPzIzufD88/nTc8+xo6oKUUWAq6+6is2bNvH66tWRbZ5+2ml8ZtAgnqusdOYBx2dmctLnPserL7/M/poaBOjXpw9nTp7Me1u3sv2995Dw+8eddBLS0MD6desi2xx29NEcc9RRvLNhA4fq6hBVDuvblxHDh1P94Yfs27uXXuGYMo89lrraWnZ/9JGzTeCIww+nf58+7ProIwQQVfqkpzOgf38++fhjDtXXR/bpsL59qa+vd34OzvnYNBG0oSGyPWMaCcR1pOBnUfgDcHuTovB9VX29rW0OHjxY9+zZk4BoE6ShAWprncenn7qvmz4OHoT6eqiri/v5kd/8hmmXX+75fTHPjY9Dh5xHa69bWtbQ4Hd2Tbx69QIR9zn6dTIva/qAmOmXXn6ZL5x1VrP5ra3fk+fLjTf6e/ooDlXA8KjpTGCHT7F4s28frFsHGzbABx/Azp3O49//hpoa2LvXea6pcb7wE2QawIIFCdt+XEQgPR3S0pxH9Oum04lYlpYGvXqx7Jln+PJllzlfGI2P8LJATse7buOXoIcvzUsvu4ynly1r/iWRgn6Wn88XHn3U7zCCofH61nb4WRSWAbNE5BGchua97bUnANTXZ3X/fQrf2kv+p4+z8cl1XPfnq6D20/CSkcBIfshPuIA/sYaTKaa02ftv6/1jzuj/Bn9P+wK3fPxDkKg//l5C6Yn3MmHIdp7fM5GfhKZBr9gKf//Z5Yw+ajcV75/MXW+cF/4CEBoalF7paTxc8CzDj/qUR9/8LPe+PD7qy8J5fuL7qzgyo4GHXhjBQ89nxi5HWL5kK4cd3ot7HjuSx1YMCn+JuD//haf3Qno6dy7pzzMrekfFBv37S9ffp1APhGtpvNeKf+HWW/naf2Yk3bXiibhPob7+Kc45Pw2w+xTKysoAu0/By30KCSsKIrIUOAc4UkSqgB8BvQFU9T5gOc6VRyHgY+Ab8WxXtRtPWdTshfffh8ISaHgaOBG41PlCPGwADDgM+vaDKd+Fc2bCnhFw/xhIT4O0dOe5Vy+47QU4A/g70MIfJqUPwATgeaCFP0zmzYPRQAUQ9Yd5YF8NAwcOguuvd465HgW2tvD+L30JjgR2AS2dnBs/Hg4DXgT6t7D8qPBgTf2AtBaWB0AoFAIm+R1GIHzyyScMHNjb7zACIRQKMWmS/V54kXR9H3VLm0JVlfNF+4c/ONNpaXDRRU7p/uIXnX+d0v2/GTw/P5+Kigq/wwgEy4XLcuGyXLh8vyQ1aT31FBQWOu0BgwbBf/4n3HADDB3qd2TGGJNwVhSi/fKXzknehgbnRO7998OwYX5HZYwx3SbpLmUemqj/2H/7W6clr6EBbr0Vnn468AWhqKjI7xACw3Lhsly4LBfeJV2bQkK6uVi9Gs46y7mP4Oc/BxvX1RjTw/TY8RScq0y60McfwxVXOAXh299uue/rgIq+OznVWS5clguX5cK7pCsKXe7222HbNjj5ZFi0KKVv9DHGmNQuCps2wR13OK/vuQf69vU3HmOM8VnSFYUBAwZ03cbmznX6HLrmGue2zySTk5PjdwiBYblwWS5clgvvUreh+f334YQTnNNFW7c697wbY0wP1WMbmnfubLd7pPgsWuT09nnllUlbEObNm+d3CIFhuXBZLlyWC++SrigcOHCg8xvZtw8eeMB5ncSXn0aPgZDqLBcuy4XLcuFd0hWFLvHEE0731meeCRPbPZoyxpiUkZpF4fHHneevf93fOIwxJmBSr6H53/+Go4922hM+/NDtFtoYY3qwHtvQXFNT07kNLFvmDEV5zjlJXxAqKyv9DiEwLBcuy4XLcuFd0hWF6urqzm2g8dTRFVd0PhifLVmyxO8QAsNy4bJcuCwX3iVdUeiUjz+GP/7RuTfhssv8jsYYYwIntYrCq686dzBPmOC0KxhjjImRdEVhWGfGOGgcBbylUbCTUEnjqN/GchHFcuGyXHiXdEWhb2c6rfvrX53nL36xa4LxWXZ2tt8hBIblwmW5cFkuvEu6orBt27aOvfGTT5zTRyLOgDo9QGFhod8hBIblwmW5cFkuvEu6otBhr73mtCeMHw8ZGX5HY4wxgZQ6RaGHtScYY0wiJF1RGDRoUMfe+MorznMPOXUEkJub63cIgWG5cFkuXJYL71KjmwtV5xLUjz6CLVtg5MjEBGeMMQHVY7u52L59u/c3ffihUxCOOAJGjOjymPxSXFzsdwiBYblwWS5clgvvkq4o1NbWen/TmjXO84QJztVHPcTmzZv9DiEwLBcuy4XLcuFd0hWFDnnjDed5wgRfwzDGmKBLuqKQnp7u/U3RRwo9SIZdWhthuXBZLlyWC+9So6H5xBNh0yanOJx8ckLiMsaYIAtEQ7OI5InIRhEJichNLSw/QkQqRORNEVknIt9ob5u7d+/2FsS+fRAKQe/eMGaMt/cGXHl5ud8hBIblwmW5cFkuvEtYURCRNGAJcDHwOaBARD7XZLUiYL2qngycA9wlIn3a2q7novDWW84lqWPHQp82N510li5d6ncIgWG5cFkuXJYL7xJ5pDAJCKnqFlU9CDwCXNpkHQUGiogAhwO7gfoujWLdOud5/Pgu3awxxvREHWi1jdtxQPRNBVXA5CbrLAaWATuAgcBVqtrQdEMiMhOYCdC7d2/y8/MjyxYuXAjAnDlzIvMKCgqYPn06hYWFXPrSS3wV+MOmTXwJWLx4MStWrIisW1ZWRigUYv78+ZF5RUVF5OXlxfycnJwc5s6dy7x581i1alVkfkVFBZWVlTEjPJWUlJCdnR3TGVdubi6zZs2iuLg4cplcRkYGZWVllJeXx/xH094+NR4trQsXvJ60T1lZWZSWlnrep5UrV5Kfn9+j9qmjn9PBgwdj3t8T9qmjn9PKlSsJhUI9ap86+jnFK2ENzSJyBZCrqt8KT88AJqnqDVHrTAXOBL4HZAF/BE5W1VYHYh43bpyuXbs2/kC+8hV4+ml49FG48sqO7EpghUIh6xo4zHLhsly4LBeuIDQ0VwHDo6YzcY4Ion0DeFIdIWAr8NkujWLTJud51Kgu3awxxvREiSwKq4BRIjIy3Hg8DedUUbT3gfMBRORoYDSwpa2NeurmoqEBGu9o7IH/LUQfOqY6y4XLcuGyXHiXsDYFVa0XkVnACiANeFBV14nI9eHl9wHzgYdEZC0gwA9U9V9dFsT27VBbC8ccAwMHdtlmjTGmp0pkQzOquhxY3mTefVGvdwAXJSyAd991nu3UkTHGxCXpurnwdNt6D29PKCgo8DuEwLBcuCwXLsuFd1YUktj06dP9DiEwLBcuy4XLcuFd0hWFbdu2xb9yDy8KNii5y3Lhsly4LBfeJV1RqK/3cMNzDy8Knrv86MEsFy7Lhcty4V3SFYW41dfD1q3O6x54OaoxxiRC0hWFvn37xrfizp1QV+eMzXzYYYkNyidZWVl+hxAYlguX5cJlufCu546n8MorcMYZMHEiRPVDYowxqSgI3VwkRHV1dXwrNt75PHx42+slMS+dXPV0lguX5cJlufAu6YpCTU2rfeXFSoGiEN2TY6qzXLgsFy7LhXdJVxTilgJFwRhjupoVBWOMMRFJ19A8YcIEXbNmTfsrTprkNDC//LLT4NwD7d6929sd3j2Y5cJluXBZLlw9tqG5trY2vhVT4EihcUQpY7mIZrlwWS68a7coiMhqESkSkc90R0Dt2blzZ/srHTwI//wn9OoFw4YlPiifRA8PmOosFy7Lhcty4V08RwrTgGOBVSLyiIjkiogkOK7O+eADUIVjj4X0hPYObowxPUq7RUFVQ6r6/4ATgXLgQeB9EblVRIJ5si4FTh0ZY0wixNWmICLjgbuA/wF+B0wFaoA/Jy60lg0dOrT9lVKkKBQVFfkdQmBYLlyWC5flwrt2z62IyOvAHuDXwE2q2tjS+5qInJnA2Fo0aNCg9ldKkaKQl5fndwiBYblwWS5clgvv4jlSuEJVz1fV8saCICIjAVT1qwmNrgVxXU2QIkUhPz/f7xACw3Lhsly4LBfexVMUnohzXnBUVTnPPbwoGGNMV2v19JGIfBYYCxwhItFHBIOAfokOrFMaL1vtwZejGmNMIrTVpjAamAIMBqKPwfYB305gTG0aMGBA+yv985/O89FHJzYYn+Xk5PgdQmBYLlyWC5flwrt2u7kQkdNV9ZVuiqdd7Y6noAr9+0NtLezfD/EUEWOM6eE63c2FiHw//HK6iPyi6aPLIvWo3Tuaa2qcgnD44T2+IMybN8/vEALDcuGyXLgsF961dfpoQ/g5jmHOus+BAwfaXiFFTh0BrLIR5SIsFy7Lhcty4V2rRUFVK8LPZd0XThf48EPnOQWKgjHGdLV4OsT7o4gMjpr+jIgEdzijFDpSMMaYrhbPfQpHqeqexglV/TcQR18TiZGdnd32CilUFCoqKvwOITAsFy7Lhcty4V08ReGQiBzfOCEi/wH4NjJPu2M0NxaFY45JfDA+q6ys9DuEwLBcuCwXLsuFd/EUhf8HvCQiD4vIw8CLwM3xbFxE8kRko4iEROSmVtY5R0TWiMg6Eflre9usrq5ue4UUOlJYsmSJ3yEEhuXCZblwWS68a7dDPFWtFJFTgNPCs+ao6r/ae5+IpAFLgAuBKpzxGJap6vqodQYD9wB5qvq+iHT+tJQ1NBtjTIfFOwLNGcDZUdPPxPGeSUBIVbcAiMgjwKXA+qh1pgNPqur7AKrazmFAHFLoSMEYY7paPFcfLQBm43yZrwdmi8jtcWz7OGB71HRVeF60E4HPiMgLIvK6iHy9vY0Oa68/oxQqCiUlJX6HEBiWC5flwmW58C6eI4VLgAmq2gAgImXAG7TfrtDSkJ1NG6jTgVOB84H+wCsi8qqqvhuzIZGZwEyAjIyMmO5wFy5cCMCcOXNAlSe2b6cvwNFHU1hYyO7duwHIysqitLSUxYsXs2KFe0VtWVkZoVAoZizXoqIi8vLyYn5OTk4Oc+fOZd68eTE3xFRUVFBZWRlz7rKkpITs7GwKCwsj83Jzc5k1axbFxcVs3ryZxn0pKyujvLycpUuXtrxPYQUFBUyfPj1mn4477jgmTZrUo/apo59TXV0dvXv37lH71NHPaciQITHv7wn71NHPqa6ujsWLF/eofero5xQ3VW3zAbwFZERNZwBvxfG+04EVUdM3Azc3Wecm4MdR07/GGb+h1e0eccQR2qq9e1VBdcCA1tfpQaZMmeJ3CIFhuXBZLlyWCxewWtv53lbVuK4+uh14Q0QeCh8lvA7cFsf7VgGjRGSkiPQBpgHLmqzzNHCWiKSLyGHAZNzuNbyzRmZjjOmUeK4+WioiLwA5OKeEfqCqH8bxvnoRmQWsANKAB1V1nYhcH15+n6puEJFKnKORBuBXqvp2h/cmhdoTjDEmEdoaZOeUJrPCw5lxrIgcq6r/aG/jqrocWN5k3n1Npv8H+J/4wm1njOYUKwq5ubl+hxAYlguX5cJlufCu1fEUROQvbbxPVfW8xITUtjbHU7jnHigqgpkz4f77uzcwY4wJsE6Pp6Cq57bx8KUgAGzfvr31hbt2Oc9HHtk9wfisuLjY7xACw3Lhsly4LBfexXOfwmEi8kMR+WV4epSITEl8aC2rra1tfWFjURgypHuC8VnjZWvGchHNcuGyXHgXz9VH/wscxLmrGZy2hZ8kLKLOSLGiYIwxXS2eopClqncAdQCq+gkt35jWLdLT27hg6l/hLplS5PRRRkaG3yEEhuXCZblwWS68a7WhObKCyN9x7jh+WVVPEZEsYKmqTuqOAJtqs6F50iRYtQpeeQVOO63ldYwxJgV1uqE5yo+BSmC4iPwW+BPw/c6F13GNt2+3KMVOH5WXl/sdQmBYLlyWC5flwrt2i4KqPgd8FbgGWApMVNUXEhtW66wouKL7Qkl1lguX5cJlufCu3TuaRWQZTjFYpqoHEh9SB9XVwd690KsXDB7sdzTGGJOU4jl9dBdwFrBeRB4Xkaki0i/BcXnXeASRkeEUBmOMMZ6129AcWdEZSe084Ns4I6W10d9E4owbN07Xrl3bfMH69TB2LIweDe+80/2B+SAUCpGdne13GIFguXBZLlyWC1e8Dc1xjbwmIv2BfOAq4BSgrHPhJUCKtScYY0wixHNH86M43VmfhzPmcpaq3pDowFrTajcXKdbFBcQOsJHqLBcuy4XLcuFdPEcK/wtMV9VDiQ6mU+xIwRhjOi2e8RQquyOQTmu8m9mKgjHGdFjSXabT6m3rKXikUFBQ4HcIgWG5cFkuXJYL79osCuIY3l3BxMOKgmv69Ol+hxAYlguX5cJlufCuzaIQHuz5qe4JJT7btm1reUEKNjQXFhb6HUJgWC5clguX5cK7eE4fvSoiOQmPJE719fUtL0jBI4U2u/xIMZYLl+XCZbnwLp6rj84FrhOR94ADON1mq6qOT2hkXllDszHGdFo8ReHihEfhQd++fVtekIJHCllZWX6HEBiWC5flwmW58M5LNxdDgUifR6r6fqKCakuL4ymoQu/ecOgQHDzovDbGGBPRZeMpiMiXRWQTsBX4K7ANeLbTEXZQdXV185l79zoFYeDAlCoIixcv9juEwLBcuCwXLsuFd/E0NM8HTgPeVdWRhEdhS2hUbaipqWk+c88e5znFht5bsWKF3yEEhuXCZblwWS68i6co1KnqLqCXiPRS1b8AExIblkf//rfzbOMoGGNMp8TT0LxHRA4HXgR+KyLVQCvXhfqk8UjBioIxxnRKPEcKlwKfAHNwxmrejNONti9GjBjRfGZjUfjMZ7ozFN+VlQWvB3O/WC5clguX5cK7eMZoPqCqh1S1XlXLVPUX4dNJvqitrW0+M0VPH4VCIb9DCAzLhcty4bJceNdqURCRfSJS08Jjn4i00NrbPXbu3Nl8ZoqePpo/f77fIQSG5cJluXBZLrxrtU1BVQd2ZyCdkqJFwRhjulo89ykc39Ijno2LSJ6IbBSRkIjc1MZ6OSJySESmegk+IkXbFIwxpqvFc/XRH6Je9wNGAhuBsW29SUTScIbvvBCoAlaJyDJVXd/Cej8D4rqgeOjQoc1npmibQlFRkd8hBIblwmW5cFkuvItn5LVx0dMicgpwXRzbngSEVHVL+H2P4FzJtL7JejcAvwPi6ol10KBBzWem6OmjvLw8v0MIDMuFy3Lhslx4F8+RQgxV/UecXWkfB2yPmq4CJkevICLHAZcB59FGURCRmcBMgN69e5Of714Ru3DhQo778EP6Az9YsID1DzxAQUEB06dPp7CwMNJ1blZWFqWlpSxevDjmLseysjJCoVBMg1RRURF5eXkxPycnJ4e5c+cyb948Vq1aFZlfUVFBZWUlS5YsicwrKSkhOzs7pi/33NxcZs2aRXFxMZs3bwacAYPKysooLy9n6dKlMfsEsYOOt7RP69atY8uWLT1qnzr6Oa1cuZJJkyb1qH3q6OdUUlJCnz59etQ+dfRzWrlyJS+//HKP2qeOfk7xardDPBH5XtRkL+AUYIiq5rbzviuAXFX9Vnh6BjBJVW+IWudx4C5VfVVEHgKeUdUn2tru4MGDdU/jkUGjk06Cdevgrbdg3LgW39cT5efnU1FR4XcYgWC5cFkuXJYLV7wd4sVzpBB9FVI9ThvD7+J4XxUQPZRnJrCjyToTgUdEBOBI4BIRqVfVp+LYvitFTx8ZY0xXi6dN4dYObnsVMEpERgIfANOAmAFTwx3sARB1pPBUWxsdMGBA85kpWhRycgIzIJ7vLBcuy4XLcuFdPKePlrUwey+wGrhfVT9t472XAKVAGvCgqv5URK4HUNX7mqz7EHGcPmo2nkJdHfTpA2lpzmvnqMMYY0yULhtPAWcchf3AA+FHDfBP4MTwdKtUdbmqnqiqWar60/C8+5oWhPD8a9orCNDCHc3RRwkpVhDmzZvndwiBYblwWS5clgvv4mlT+Lyqnh01XSEiL6rq2SKyLlGBtebAgQOxM1L01BEQc4VDqrNcuCwXLsuFd/EcKRwVfQdz+PWR4cmDCYnKixQuCsYY09XiOVL4L+AlEdkMCM4dzd8VkQGA//3SWhcXxhjTZdptaAYQkb7AZ3GKwjttNS4nWrOG5sceg6uugqlT4fHH/QrLGGMCrSsbmgFOxenraDxwpYh8vTPBdUazMZpT+PRRZWWl3yEEhuXCZblwWS68i6eX1IeBO4Ev4HRFkYNz05kvqqurY2ekcFGIvm0+1VkuXJYLl+XCu3jaFCYCn9N4zjP5obGHVGtTMMaYTovn9NHbwDGJDqTDUvhIwRhjulo8RwpHAutFZCUQGSBZVb+csKjaMGzYsNgZKVwUSkpK/A4hMCwXLsuFy3LhXTxF4ceJDsKLvn37xs5I4aKQnZ3tdwiBYblwWS5clgvv2j19pKp/jX7g9JR6ZeJDa9m2bdtiZ6Rwm0J0X+ypznLhsly4LBfexTXIjohMwOnh9EqcvpDi6Tq7e6TwkYIxxnS1VouCiJyI0911AbALeBTnZrdzuym2+FhRMMaYLtPWkcI7wN+AfFUNAYjInDbW7xbNxmhO4aKQm9vm4HcpxXLhsly4LBfetdrNhYhchnOkcAZQCTwC/Cp6YBw/xHRz8ckncNhh0LcvfOpbzxvGGBN4ne7mQlV/r6pX4fR59AIwBzhaRO4VkYu6LFKPtm/f7k6k8FECQHFxsd8hBIblwmW5cFkuvIvn6qMDqvpbVZ2CM87yGuCmRAfWmtraWncixYvC5s2b/Q4hMCwXLsuFy3LhXbwd4gGgqrtV9X5VPS9RAXnSeDlqihYFY4zpap6KQhCkp0e1jaf4WAoZGRl+hxAYlguX5cJlufAurvEUgiSmobm8HK6+GqZNg6VL/Q3MGGMCrKvHUwiM3bt3uxMp3qZQXl7udwiBYblwWS5clgvvkrsopHAXFwBL7egownLhsly4LBfeJV1RiJHiRwrGGNPVrCgYY4yJSLqiMHz4cHcixS9JXbhwod8hBIblwmW5cFkuvEu6ohAjxS9JNcaYrpZ0RcG6uXDNmeN7/4SBYblwWS5clgvvkq4oxEjxomCMMV0tuYtCircpGGNMV0u6ohC5bV015Y8UCgoK/A4hMCwXLsuFy3LhXUK7uRCRPOBuIA1nLIYFTZZfDfwgPLkf+I6qvtnWNiPdXOzbB4MGwYABsH9/IsI3xpgew/duLkQkDVgCXAx8DigQkc81WW0r8EVVHQ/MB37Z3na3bdvmvEjxowSwQcmjWS5clguX5cK7RJ4+mgSEVHWLqh7EGbnt0ugVVPXvqhpuGOBVnPEa2lRfX++8sPaE2C4/UpzlwmW5cFkuvGtrjObOOg6Iun6UKmByG+t/E3i2pQUiMhOYCdC7d2/y8/MZu2sXC4BP+vfng1Ao5tKzgoICpk+fTmFhYeSXIisri9LSUhYvXsyKFSsi65aVlREKhZg/f35kXlFREXl5eeTn50fm5eTkMHfuXObNm8eqVasi8ysqKqisrGTJkiWReSUlJWRnZ8f8l5Kbm8usWbMoLi6ODPyRkZFBWVkZ5eXlMX20NN5w094+rVu3DqBH7VNHP6eVK1eSn5/fo/apo5/TwYMHY97fE/apo5/TypUrCYVCPWqfOvo5xU1VE/IArsBpR2icngEsamXdc4ENwJD2tjt06FBVVdWnn1YF1SlTNFXNnj3b7xACw3Lhsly4LBcuYLXG8d2dyCOFKiCqTwoygR1NVxKR8cCvgItVdVd7G410c2GnjygtLfU7hMCwXLgsFy7LhXeJbFNYBYwSkZEi0geYBiyLXkFEjgeeBGao6rvxbLS6utp5YQ3N3g4JezjLhcty4bJceJewoqCq9cAsYAXOqaHHVHWdiFwvIteHV5sLDAHuEZE1IrK6ve3W1NQ4LxobkFJ4uL3o856pznLhsly4LBfeJfL0Eaq6HFjeZN59Ua+/BXyrQxu3omCMMV0u6e5ojrCiYIwxXS7pisKIESOcF1YUKCsr8zuEwLBcuCwXLsuFd0lXFGpra50XVhQi118by0U0y4XLcuFd0hWFnTt3Oi8aL0lN4aIQfTNNqrNcuCwXLsuFd0lXFCLsSMEYY7pcchaFhgb3SMGG4jTGmC6TdEVh6NChUFPjFIZBgyA9oVfVBlpRUZHfIQSG5cJluXBZLrxL6HgKiTBx4kRd/dhjkJUFI0bA1q1+h2SMMYHn+3gKiRIKhaw9ISy6h8ZUZ7lwWS5clgvvkq4oAFYUjDEmQawoGGOMiUi6ojBgwAC3KKT4lUc5OTl+hxAYlguX5cJlufAuORuav/IVKCmBm2+G227zOyRjjAm8HtvQvHPnTjt9FDZv3jy/QwgMy4XLcuGyXHiXdEXhwIEDVhTCoseBTXWWC5flwmW58C457/xqUhTq6uqoqqri008/9TGo7nfjjTeyYcMGv8MIhKDmol+/fmRmZtK7d2+/QzEmLj2iKFRVVTFw4EBGjBiBiPgYWPdKT09n1KhRfocRCEHMhaqya9cuqqqqGDlypN/hGBOXpDt9lJ2d3awofPrppwwZMiSlCgIQuC9BPwUxFyLCkCFDuv0ItqKiolt/XpBZLrxLuqJQU1PTYptCqhUEgL179/odQmAENRd+/F5WVlZ2+88MKsuFd0lXFKqrq+0+hbDq6mq/QwgMy4VryZIlfocQGJYL75KuKPRShbo66N/feRhjjOkySVcU0hpvtkvxy1GNMSYRkq4oHD14sPPihBN8jaMl999/P9dffz3gXCY7Y8YMCgsLqaur69Kfc+211zJ06FAuvfTSyLzt27dz7rnnMmbMGMaOHcvdd98dWVZZWcno0aPJzs5mwYIFgdiXPXv2MHXqVD772c8yZswYXnnllU7F2rhuV8famOuTTjqp2bKOxNodSkpK/A4hMCwX3iVdUejT0OC8OPFEfwNpwVtvvcX48eOpqanh4osv5vjjj6esrKzLr1G/5pprqKyspFcv9+NLT0/nrrvuYsOGDbz66qssWbKE9evXc+jQIYqKinj22WdZv349S5cuZf369b7vy+zZs8nLy+Odd97hzTffZMyYMZ2KdcKECQmJtTHXTXU01u6QnZ3tdwiBYbnwLumKQs1HHzkvAlgU1q5dS0ZGBueccw5XXHEFP/3pTxPyc84++2wyMjI4ePBgZN6wYcM45ZRTABg4cCBjxozhgw8+YOXKlWRnZ3PCCSfQp08fpk2bxtNPP+3rvtTU1PDiiy/yzW9+E4A+ffowePDgTsVaX1+fkFgbc91UR2PtDoWFhX6HEBiWC++S7ua1do8UEnUJYBwdB65du5YbbriBBx980NPgHmeddRb79u1rNv/OO+/kggsu8BQmwLZt23jjjTeYPHkyzz33HMOHD48sy8zM5LXXXmt3G173xcs+bNmyhaOOOopvfOMbvPnmm5x66qncfffdfPDBBx2O9e2336asrCzuvHc25x2N1ZigS7qi0Dugp4+2b9/O4YcfzqhRo5xO+zz429/+1mVx7N+/n8svv5zS0lIGDRpES73gtnftfHv7UlJSwvz582PmedmH+vp6/vGPf7Bo0SImT57M7NmzWbBgAePHj+9wrJmZma3mfcWKFVRXVzNjxowOxduSjuTVmGSQnEVBxBmjuSU+dQX+1ltvcfLJJ/PAAw9w2mmnkZOTw+c//3mqq6vJy8sjNzeXjRs38sQTT8S0BUDH/2ttup26ujouv/xyrr76ar761a8Czn+w27dvj6xTVVXFscce26F9Afjwww+pr69v9h4v+5CZmUlmZiaTJ08GYOrUqSxYsIBLLrmkw7HefvvtTJkyJRLrwYMH+d73vsegQYN47bXXml2v3tkjhY7ktbvk5ub6HUJgWC46QFWT6nEqqI4cqdHWr1+vfrv99tv1pptuUlXV5557TkeNGqV79uzRZ555Ru+44w5VVb3uuuu0urq6S37e1q1bdezYsZHphoYGnTFjhs6ePTtmvbq6Oh05cqRu2bJFa2trdfz48fr2229Hlp933nlaVVUV176oqi5fvlwfeeSRTsf/hS98Qd955x1VVf3Rj36kN954Y5uxthRnW7GWlpbqypUrVVX1zDPP1IaGhg7H2jTXqu3nNVoQfj+NAVZrHN+xSdfQDATu1BE457XHjRsHwIUXXsiVV17Jtddey6pVqzj55JMBpyuGo446qtM/q6CggNNPP52NGzeSmZnJr3/9a15++WUefvhh/vznPzNhwgQmTJjA8uXLSU9PZ/HixeTm5jJmzBiuvPJKxo4dC0BDQwOhUKhZQ2pr+wKwZs0aJkyY0Ol9WLRoEVdffTXjx49nzZo13HLLLa3G2lqc0bG+//77MbG+8cYbjBs3jn379nHkkUd2+NROS7kG2syr34qLi/0OITAsFx0QT+Xo6APIAzYCIeCmFpYL8Ivw8reAU9rb5qmgesMNMRUwyP+JTZs2TWfNmqXXX3+9Pv/881267XfffbdT71+7dq3OmTPH03uuvfZaPXToUKd+rlfxxNk0F+Xl5VpYWKjf+c539L//+78TGV67uvv3c8qUKd3684LMcuEiziOFhLUpiEgasAS4EKgCVonIMlWNvpj7YmBU+DEZuDf83LYAHim0Jj09nUWLFvkdRotOOukkfv7zn3t6T+N/yt2pI3EWFBRQUFCQoIiM6bkSefpoEhBS1S2qehB4BLi0yTqXAv8XLmSvAoNFZFi7W06iovDwww8nbNvp6Ul3nUDCWC5cLZ1mS1WWC+8S+Zd0HLA9arqK5kcBLa1zHBBzbaGIzARmApwCXPuzn/FR+L/vhQsXUldXx6ZNmyLrZ2RkMGTIELZu3Rq5UqZv374cf/zxVFdXx3SzPHLkSGpra9mxY0dk3tChQzniiCNitjlgwACOPfZYduzY4QwJGjZq1Cj27t0b00vnscceS9++fdm6dWtk3hFHHMHQoUN5//33qa2tBZwvspEjR7Jr1y52N/b8CpHr36Ovbmltn4Aet08d/Zw2bdoUyH1qfM/ixYtZsWJFZN2ysjJCoVDM5b1FRUXk5eXF3G+Rk5PD3LlzmTdvXszwkhUVFVRWVsZcWVVSUsLChQtj3p+bm8usWbMoLi5m8+bNkTjLysooLy9n6dKlkXUXLlwIwJw5cyLzCgoKmD59OoWFhZF9ycrKorS0tNv2KTs7O+ZGNC/7FAqFetw+deRzipdogi7hFJErgFxV/VZ4egYwSVVviFrnD8DtqvpSePpPwPdV9fXWtnvCCSfols2bY25S27BhA2PGjEnIfgTZrl27GDJkiN9hBEKQc9Hdv5/l5eVMnz69235ekFkuXCLyuqpObG+9RJ4+qgKGR01nAjs6sE6M3bt3J+6u5SQT/V9rqrNcuKL/o0x1lgvvElkUVgGjRGSkiPQBpgHLmqyzDPi6OE4D9qqqt9uBwxJ1xGNMZ9jvpUk2CWtTUNV6EZkFrADSgAdVdZ2IXB9efh+wHLgE55LUj4FvdORn9evXL3L6wLoaMEGhquzatYt+/fr5HYoxcUtYm0KijBs3TteuXRszr66ujqqqqm4fIN1vdXV1Xd4td7IKai769etHZmZmt8YWCoWsy+gwy4Ur3jaFHnEdX+/evRk5cqTfYXQ7+4V3WS6M6RpJ181F9OV/qS76crRUZ7lwWS5clgvvkq4oGGOMSRwrCsYYYyKSrqFZRPbhdLJn4EjgX34HERCWC5flwmW5cI1W1YHtrZSMDc0b42lBTwUistpy4bBcuCwXLsuFS0RWx7OenT4yxhgTYUXBGGNMRDIWhV/6HUCAWC5clguX5cJluXDFlYuka2g2xhiTOMl4pGCMMSZBrCgYY4yJSKqiICJ5IrJRREIicpPf8fhFRB4UkWoRedvvWPwmIsNF5C8iskFE1onIbL9j8ouI9BORlSLyZjgXt/odk59EJE1E3hCRZ/yOxW8isk1E1orImvYuTU2aNgURSQPeBS7EGZxnFVCgqut9DcwHInI2sB9nfOuT/I7HT+ExvYep6j9EZCDwOvCVFP29EGCAqu4Xkd7AS8Ds8PjnKUdEvgdMBAap6hS/4/GTiGwDJqpquzfyJdORwiQgpKpbVPUg8Ahwqc8x+UJVXwRsqDFAVXeq6j/Cr/cBG3DG+U456tgfnuwdfiTHf31dTEQygS8Bv/I7lmSTTEXhOCC6i9QqUvSP37RMREYAnwde8zkU34RPmawBqoE/qmqq5qIU+D7Q4HMcQaHAcyLyuojMbGvFZCoKLQ2plpL/BZnmRORw4HdAsarW+B2PX1T1kKpOwBnvfJKIpNzpRRGZAlSr6ut+xxIgZ6rqKcDFQFH4FHSLkqkoVAHDo6YzgR0+xWICJHz+/HfAb1X1Sb/jCQJV3QO8AOT5G4kvzgS+HD6P/ghwnoj8xt+Q/KWqO8LP1cDvcU7HtyiZisIqYJSIjBSRPsA0YJnPMRmfhRtXfw1sUNWf+x2Pn0TkKBEZHH7dH7gAeMfXoHygqjeraqaqjsD5nvizqn7N57B8IyIDwhdhICIDgIuAVq9cTJqioKr1wCxgBU5j4mOqus7fqPwhIkuBV4DRIlIlIt/0OyYfnQnMwPlvcE34cYnfQflkGPAXEXkL55+oP6pqyl+OaTgaeElE3gRWAn9Q1crWVk6aS1KNMcYkXtIcKRhjjEk8KwrGGGMirCgYY4yJsKJgjDEmwoqCMcaYCCsKxrRARIZEXeL6oYh8EH69X0Tu8Ts+YxLFLkk1ph0i8mNgv6re6XcsxiSaHSkY44GInNPYP7+I/FhEykTkuXB/9V8VkTvC/dZXhrvfQEROFZG/hjsjWxHu7tuYQLKiYEznZOF00Xwp8BvgL6o6DvgE+FK4MCwCpqrqqcCDwE/9CtaY9qT7HYAxSe5ZVa0TkbVAGtDYfcBaYAQwGjgJ+KPTTRNpwE4f4jQmLlYUjOmcWgBVbRCROnUb6Rpw/r4EWKeqp/sVoDFe2OkjYxJrI3CUiJwOTjffIjLW55iMaZUVBWMSKDx07FTgZ+FeKtcAZ/galDFtsEtSjTHGRNiRgjHGmAgrCsYYYyKsKBhjjImwomCMMSbCioIxxpgIKwrGGGMirCgYY4yJ+P9aXKMXXomFDgAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "J = 0.01\n", "b = 0.1\n", "K = 0.01\n", "R = 1\n", "L = 0.5\n", "\n", "y_ref = 1.0\n", "\n", "K_p = 120;\n", "\n", "K_i = 60;\n", "\n", "K_d = 10;\n", "\n", "def StateSpace_PIDController(x, t, A, B, C, R, y_ref):\n", " return np.dot(A,x) + np.dot(R,y_ref)\n", "\n", "A = np.array([[-b/J, K/J, 0],\n", " [-K/L - K_p/L + (b*K_d)/(J*L), -R/L - (K*K_d)/(J*L), K_i/L],\n", " [-1, 0 ,0]])\n", "\n", "B = np.array([0,\n", " 1/L, 0])\n", "\n", "R = np.array([0,K_p/L,1])\n", "\n", "C = np.array([1, 0, 0])\n", "\n", "x0 = np.array([0,\n", " 0,0]) # initial state\n", "\n", "t0 = 0 # Initial time \n", "tf = 5 # Final time\n", "t = np.linspace(t0, tf, 200)\n", "\n", "\n", "solution = odeint(StateSpace_PIDController, x0, t, args=(A,B,C,R,y_ref))\n", "\n", "y = (C * solution)[:,0]\n", "\n", "plot(t, y, linewidth=2.0, color = 'red')\n", "grid(color = 'black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlim([t0, tf])\n", "ylabel(r'Angular velocity ')\n", "xlabel(r'Time ')\n", "legend(['$K_p$ = 120, $K_i$ = 60, $K_d = 10$'])\n", "\n", "plot(t, 0.98*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "plot(t, 1.02*y_ref*np.ones(len(t)), linestyle='--', color = 'blue')\n", "\n", "\n", "overshut = max(abs(y))/y_ref - 1\n", "ss_error = y[len(t)-1]-y_ref\n", "\n", "print('overshut', overshut)\n", "print('ss_error', ss_error)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## EX 1: Mass-spring damper system\n", "\n", "Let us consider mass-spring damper system\n", "\n", "![mass-spring%20damper%20system.png](attachment:mass-spring%20damper%20system.png)\n", "\n", "with the following system parameters:\n", "\n", " mass m = 1.0 kg\n", "\n", " spring constant k = 5.0 N/m\n", "\n", " damping constant $\\rho$ = 2 Ns/m\n", "\n", "Let us suppose that measured output of the system is a position of the mass.\n", "\n", "Let us also assume that position of the system is disturbed with external signal $d(t)= 1, t>0.$\n", "\n", "## TODO\n", "\n", "1. Implement PID controller corresponding to the refernce signal x_ref = 0 m. \n", "\n", "2. Tune it to satisfay performance specifications\n", "\n", " Rise time < 5 s\n", " \n", " Overshoot < 10%\n", " \n", " Steady-state error < 2%\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## EX. 2 Inverted Pendulum\n", "\n", "The system in this example consists of an inverted pendulum mounted to a motorized cart. The inverted pendulum system is an example commonly found in control system textbooks and research literature. Its popularity derives in part from the fact that it is unstable without control, that is, the pendulum will simply fall over if the cart isn't moved to balance it. Additionally, the dynamics of the system are nonlinear. The objective of the control system is to balance the inverted pendulum by applying a force to the cart that the pendulum is attached to. A real-world example that relates directly to this inverted pendulum system is the attitude control of a booster rocket at takeoff.\n", "\n", "![2024-01-23_13-32-20.png](attachment:2024-01-23_13-32-20.png)\n", "\n", "Let us consider the system with the following system parameters\n", " \n", " (M) mass of the cart 0.5 kg\n", " \n", " (m) mass of the pendulum 0.2 kg\n", " \n", " (l) length to pendulum center of mass 0.3 m\n", " \n", " (b) coefficient of friction for cart 0.1 N/m/sec\n", " \n", " (I) mass moment of inertia of the pendulum 0.006 kg.m^2\n", " \n", " (F) force applied to the cart\n", " \n", " (y) cart position coordinate\n", " \n", " (theta) angle between the pendulum and the vertical axis\n", "\n", "## TODO\n", " \n", "1) Show that inverted pendulum on the cart can be modeled as follows\n", "\n", "$$(M+m)\\ddot{y} + b\\dot{y} + ml\\ddot{\\theta}\\cos\\theta -ml\\dot\\theta^2\\sin(\\theta) = F$$\n", "\n", "$$ml\\cos(\\theta)\\ddot{y} + (I+ml^2)\\ddot{\\theta} - mgl\\sin\\theta = 0$$ \n", "\n", "2) Show that linearalised model have the following form\n", "\n", "$$\\dot x = Ax + Bu$$\n", "\n", "$$ y = Cx$$\n", "\n", "where state vector $x = (y,\\theta,\\dot{y},\\dot{\\theta})$, control vector $u=F$.\n", "\n", "$$\\left[\\begin{array}{c}\\dot{y} \\\\ \\dot{\\theta} \\\\ \\ddot{y} \\\\ \\ddot{\\theta}\\end{array}\\right]=\n", "\\left[\\begin{array}{cccc}0 & 0 & 1 & 0 \\\\ \n", "0 & 0 & 0 & 1 \\\\ \n", "0 & \\frac{-g m^2 l^2}{I(M+m)+M m l^2} & \\frac{-\\left(I+m l^2\\right) b}{I(M+m)+M m l^2} & 0 \\\\ \n", "0 & \\frac{m g l(M+m)}{I(M+m)+M m l^2} & \\frac{m l b}{I(M+m)+M m l^2} & 0\\end{array}\\right]\n", "\\left[\\begin{array}{c}y \\\\ \\theta \\\\ \\dot{y} \\\\ \\dot{\\theta}\\end{array}\\right]+\n", "\\left[\\begin{array}{c}0 \\\\ 0 \\\\ \\frac{I+m l^2}{I(M+m)+M m l^2} \\\\ \\frac{-m l}{I(M+m)+M m l^2}\\end{array}\\right] u$$\n", "\n", "$$\n", "\\mathbf{y}=\n", "\\left[\\begin{array}{llll}1 & 0 & 0 & 0 \\\\ 0 & 1 & 0 & 0\\end{array}\\right]\n", "\\left[\\begin{array}{c}y \\\\ \\theta \\\\ \\dot{y} \\\\ \\dot{\\theta}\\end{array}\\right]$$\n", "\n", "You can use symbolic calcus https://scipy-lectures.org/packages/sympy.html#calculus to make calcultaions easier\n", "\n", "3) Design a PID controler corresponding to the refernce signal $\\theta_ref$ = 0 rad, while supposing that the angle is subject to a constant disturbance $d(t) = 0.1$\n", "\n", "4) What is going on with position of the cart for closed-loop system?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }