{ "cells": [ { "cell_type": "markdown", "id": "56468f06-42f2-45c3-8ac8-2e014de47509", "metadata": {}, "source": [ "# Introduction to control theory. \n", "\n", "## TP4. Full State Linear Feedback Controller.\n", "## Study load\n", "\n", "Course grade breakdown:\n", "\n", " Labs - 40%\n", " \n", " Final project presentation 30%\n", "\n", " Final test 30%\n", " \n", "File name for lab submission: yourname_labnumber.ipynb (example: elenavanneaux_TP4.ipynb) \n", "\n", "The completed notebooks should be sent to your tutor (elena.vanneaux@ensta.fr or adnan.saood@ensta.fr) before the beginning of the next session. Please add [APM_4AUT2_TA] to the topic of e-mail.\n", "\n", "## Prerequisites for practice\n", "### Math\n", "During the course, we will cover the following areas of mathematics:\n", " \n", " 1. Linear Algebra\n", "\n", " 2. Calculus\n", "\n", " 3. Differential equations\n", "\n", " 4. Dynamics (Mechanics and Physics)\n", "\n", "### Python programming\n", "In the labs we will use a Python programming language and the following libraries:\n", "\n", " 1. NumPy https://numpy.org/doc/stable/\n", "\n", " 2. SciPy https://docs.scipy.org/doc/scipy/\n", "\n", " 3. Matplotlib https://matplotlib.org/stable/tutorials/index\n", "\n", " 4. SymPy https://docs.sympy.org/latest/tutorials/intro-tutorial/intro.html\n", "\n", " 5. Control System Library https://python-control.readthedocs.io/en/0.10.1/intro.html\n", "\n", "### Jupyter Notebook Markdown Cells Documentation\n", "\n", "Please check on Markdown cells documentation, to provide a fancy look for your notebooks!\n", "\n", "https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html\n" ] }, { "cell_type": "markdown", "id": "14527287-41fb-4e6d-89bd-14d17f9dc347", "metadata": {}, "source": [ "## EX. 1: 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", "\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", "The 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", "Let $y_1 = \\dot{y}$ and $\\theta_1 = \\dot{\\theta}$\n", "\n", "The linearalised model have the following form\n", "\n", "$$\\dot x = Ax + B(u+w)$$\n", "\n", "where state vector $x = (y,y_1,\\theta,\\theta_1)$, control vector $u$, disturbance $w$, and $F = u+w$. \n", "\n", "$$\\left[\\begin{array}{c}\\dot{y} \\\\ \\dot{y1} \\\\ \\dot{\\theta} \\\\ \\dot{\\theta_1}\\end{array}\\right]=\n", "\\left[\\begin{array}{cccc}0 & 1 & 0 & 0 \\\\\n", "0 & \\frac{-\\left(I+m l^2\\right) b}{I(M+m)+M m l^2}& \\frac{-g m^2 l^2}{I(M+m)+M m l^2} & 0 \\\\\n", "0 & 0 & 0 & 1 \\\\\n", "0 & \\frac{m l b}{I(M+m)+M m l^2} & \\frac{m g l(M+m)}{I(M+m)+M m l^2} & 0\\end{array}\\right]\n", "\\left[\\begin{array}{c}y \\\\ y_1\\\\ \\theta \\\\ \\theta_1\\end{array}\\right]+\n", "\\left[\\begin{array}{c}0 \\\\ \\frac{I+m l^2}{I(M+m)+M m l^2} \\\\ 0\\\\ \\frac{-m l}{I(M+m)+M m l^2}\\end{array}\\right] (u+w)$$\n", "\n", "## TODO\n", "\n", "1) Check on the code below implementing a PID controller ensuring tracking to the reference signal $\\theta_{ref}$ = 0 rad, while supposing that the system is subject to a constant disturbance $w(t) = 0.1$. Is it a good controller for achieving the desirable behavior of the system?\n", "2) Design a full-state linear feedback regulator u = -Kx that stabilize non distubed ($w(t) = 0$) system in (0,0,0,0).\n", "\n", " 2.1 Is the system controllable? Why is it important? \n", "\n", " 2.2 Use control.place function from control library https://python-control.readthedocs.io/en/0.9.4/ to place eigenvalues lam_1 = -1, lam_2 = -2, lam_3 = -3, lam_4 = -4 in the closed-loop system. I.e. find a K, such that eig(A-BK) = [-1,-2,-3,-4]. Let $x_0 = (1,0,1,0)$ plot the corresponding trajectories of the closed-loop system. Is the system controlled by the regulator u =-Kx stable?\n", "\n", " 2.3 Use the LQR regulator to stabilize the system around zero. Plot the trajectory of controlled system starting from $x_0 = (1,0,1,0).$ Analyze how the different choice of weight matrices Q and R affects the closed-loop system behavior. control.lqr from the control library https://python-control.readthedocs.io/en/0.9.4/ might be useful for you.\n", "3)Analyse the response of the system controlled with an LQR regulator for different types of disturbances (like $w(t) = 0.1, w(t) = 10.0, w(t) = sin(t)$ etc...). What conclusion can you make? " ] }, { "cell_type": "code", "execution_count": 1, "id": "06e12e7b-3c3b-4493-9ce8-991c079b771b", "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.integrate import odeint\n", "import matplotlib.pyplot as plt\n", "import control as ctr\n", "\n", "# x is a state vecot, t is a current time, A is a dynamic matrix, B is a control matrix, D is a disturbance matrix, \n", "# u_func(t) is a control input, w_func(t) is a disturbance input \n", "def StateSpace(x, t, A, B, D, u_func, w_func):\n", " w = w_func(t)\n", " u = u_func(t)\n", " return np.dot(A, x) + np.dot(B, u).flatten() + np.dot(D, w).flatten()\n", "\n", "# OpenLoopInputOutputSystem with time-dependent w(t)\n", "def OpenLoopInputOutputSystem(A, B, D, C, u_func, w_func, T, x0):\n", " # Solve the ODE system with odeint, passing the time-dependent w function\n", " solution = odeint(StateSpace, x0, T, args=(A, B, D, u_func, w_func))\n", " # Output calculation using C and the solution\n", " # return (C @ solution.T) \n", " return (solution.T) \n", "\n", "def PID(A, B, D, C, Kp, Ki, Kd, r_func, w_func, T, x0):\n", " z0 = np.array([[0.0]])\n", " x_a = np.block([[x0.reshape(-1,1)],[z0]])\n", " M = np.eye(x0.shape[0]) + Kd*B @ C\n", " A_a = np.block([[np.linalg.inv(M) @ (A - Kp * B @ C), -Ki * np.linalg.inv(M) @ B ], [C, np.array([0.0])]])\n", " B_a = np.block([[Kp * np.linalg.inv(M) @ B ], [np.array([1.0])]])\n", " D_a = np.block([[np.linalg.inv(M) @ D],[np.array([[0.0]])]])\n", " C_a = np.block([C, np.array([[0.0]])])\n", " return OpenLoopInputOutputSystem(A_a, B_a, D_a, C_a, r_func, w_func, T, x_a.flatten()).T " ] }, { "cell_type": "code", "execution_count": 2, "id": "0fd0ddf2-1957-49cb-863b-5c46b8e4136d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0, 0.5, 'Position ')" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABAQAAAHPCAYAAADEcAg/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAtHRJREFUeJzt3QeYE9XaB/B32UKX3ntRFFRAFFTwCgoWuAoqqKACdvhsXBFBkY4URZpiQZAiCKKXoshFQQWlKNJUQFA60quUhV1g8z3/szthMptks8tuMufk/3uePJvNJJN5z0zmzDlzSozH4/EIEREREREREUWVXJHeACIiIiIiIiIKP1YIEBEREREREUUhVggQERERERERRSFWCBARERERERFFIVYIEBEREREREUUhVggQERERERERRSFWCBARERERERFFIVYIEBEREREREUUhVggQERERERERRSFWCBARERERERFFIVYIhOiHH36Qu+66S8qWLSsxMTEye/bsTH1+0aJF0rJlSylTpozkz59f6tSpI1OnTvV5z/r16+W+++6TypUrq+8YOXJkNkdBREREwTC/JyKiaMIKgRCdOnVKateuLWPGjMnS55ctWyZXX321/Pe//5XffvtNHn30UWnfvr3MnTvX+57ExESpWrWqDBkyREqXLp2NW09EREShYH5PRETRJMbj8XgivRG6QW3+rFmzpFWrVt7XkpKSpGfPnjJt2jQ5duyYXHnllTJ06FBp3LhxwPW0aNFCSpUqJR999FG6Zbhr0KVLF/UgIiKi8GN+T0REpmMLgWzy7LPPyvLly2X69OnqjkCbNm3kjjvukL/++ivgZ/755x8pWrRoWLeTiIiIso75PRERmYQVAtlg586dMmHCBPnss8/kpptukmrVqslLL70kjRo1Uq/7M2PGDPnll19UU0IiIiJyP+b3RERkmrhIb4AJfv/9dzl//rxcdtllPq+jWWGxYsXSvf/7779XFwYffvih1KpVK4xbSkRERFnF/J6IiEzDCoFscPLkSYmNjZVVq1apv3YFChTw+X/x4sVq9OIRI0aoQYaIiIhID8zviYjINKwQyAZ169ZVdwwOHDigmhAGm4ro3//+txp86KmnngrrNhIREdHFYX5PRESmYYVAJu4KbN682fv/tm3bZO3atWqQIDQdfOihh9QdgLfeektdMBw8eFC+/fZb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e0AhrHjx4umWI/kwiBFGNdYFthkFS4zirEMFRjTGFCwevIZptTCft24tGw4fPizFihXTbtsDYUx6MDGmQ4cOSYkSJThNXpjyeh2ZeNwzJj2YFpNp8QBj0sOhMOX1rBDIpvkfcTf37NmzYd02ik44ydmn5CKi6BOuuYmjBdOTiIiiNW9im+MQoVtAsB2B7gO69Onev3+/TJkyRR5++GHvvM+6My0m0+IBxqQHxqQHq6sahTev14mJxz1j0oNpMZkWDzAmPRwIU17P24whOnnypJgUC+Z5ZkzuZVo8wJj0wJj0YFIsbmJSupp63DMm9zMtJtPiAcakh5NhioUVAkRERERERERRiBUCRERERERERFGIYwhkwBpzEU02MLCDCU6cOKEGQMRfxuROpsUDjEkPjEmvZoQcFzh7MK/XA2PSg2kxmRYPMCY9nAxTXs9ZBjKwdetWqVatWqQ3g4iIKJ0tW7ZI1apVI70Z2mNeT0RE0ZrXs4VABooWLar+7ty5U037YALUmlWoUEF27dplzGjKpsVkWjzAmPTAmPSAKYgqVqzozaPo4jCv1wNj0oNpMZkWDzAmPfwTpryeFQIZsOZ7xwWCKQeXBfEwJnczLR5gTHpgTHrlUXRxmNfrhTHpwbSYTIsHGJMecjqv55UEERERERERURRihQARERERERFRFGKFQAZy584tffr0UX9NwZjcz7R4gDHpgTHpwcSYIsnE9GRMemBM7mdaPMCY9JA7TDFxlgEiIiIiIiKiKMQWAkRERERERERRiBUCRERERERERFGIFQJEREREREREUYgVAkRERERERERRKOoqBMaMGSOVK1eWPHnySIMGDWTFihVB3//ZZ5/J5Zdfrt5/1VVXybx583yWY0zG3r17S5kyZSRv3rzStGlT+euvv8StMX344Ydy0003SZEiRdQD2+t8f8eOHSUmJsbncccdd4hbY5o4cWK67cXndN5PjRs3ThcTHi1atHDFfvrhhx/krrvukrJly6rvnT17doafWbRokVxzzTVqpNTq1aur/Xaxv89IxjRz5kxp1qyZlChRQi655BK54YYb5Ouvv/Z5T9++fdPtI5xP3BoT9pG/427fvn3a7id/vxM8atWq5Yr9NHjwYLnuuuukYMGCUrJkSWnVqpVs2rQpw8/pkDdFGvN79+f3zOvdndcD83v35/fM692f17s9v4+qCoFPP/1UXnzxRTV9w+rVq6V27dpy++23y4EDB/y+f9myZdK2bVt5/PHHZc2aNWrH4bFu3Trve9544w0ZPXq0vP/++/Lzzz9L/vz51TrPnDnjyphwEkBM33//vSxfvlwqVKggt912m+zevdvnfchs9u7d631MmzZNwiWzMQFO0Pbt3bFjh89y3fYTMh97PDjmYmNjpU2bNq7YT6dOnVIxILMIxbZt29QFTpMmTWTt2rXSpUsXeeKJJ3wy1Kzs90jGhMwKFwg4Ma9atUrFhswL5wo7ZEb2fbRkyRIJl8zGZEEGZd9mZFy67qdRo0b5xLJr1y4pWrRout9SpPbT4sWL5ZlnnpGffvpJFixYIGfPnlXnZMQZiA55U6Qxv3d/fs+83v15PTC/d39+z7ze/Xm96/N7TxSpX7++55lnnvH+f/78eU/ZsmU9gwcP9vv++++/39OiRQuf1xo0aOB5+umn1fOUlBRP6dKlPW+++aZ3+bFjxzy5c+f2TJs2zePGmJzOnTvnKViwoGfSpEne1zp06OBp2bKlJ1IyG9OECRM8hQoVCrg+E/bTiBEj1H46efKka/aTBaeRWbNmBX3Pyy+/7KlVq5bPaw888IDn9ttvz7Y0CndM/tSsWdPTr18/7/99+vTx1K5d2+MGocT0/fffq/cdPXo04Ht03094f0xMjGf79u2u3E8HDhxQcS1evDjge3TImyKN+b3783vm9Xrl9cD83v35PfN6PfJ6t+X3UdNCIDk5WdXqoRmFJVeuXOp/1Jz7g9ft7wfUuFjvRy0omtfY31OoUCHVrCbQOiMdk1NiYqKqoUItmvPOAmoKa9SoIZ07d5bDhw9LOGQ1ppMnT0qlSpXUHZCWLVvK+vXrvctM2E/jx4+XBx98UNX6uWE/ZVZGv6XsSKNIS0lJkRMnTqT7LaHZFpq8Va1aVR566CHZuXOnuF2dOnVU0zPcEVm6dKn3dRP2E35L2F6cL9y4n/755x/113kc6ZQ3RRrze/fn98zrzczrgfl95PORUDGvj+w++sdF+X3UVAgcOnRIzp8/L6VKlfJ5Hf87+8xY8Hqw91t/M7POSMfk1L17d/XDsB9IaJo2efJk+fbbb2Xo0KGqicudd96pvsuNMSGD/Oijj2TOnDkyZcoUdaK+8cYb5e+//zZiP6HPFpoGocmdXST3U2YF+i0dP35cTp8+nS3HcqQNGzZMXazef//93tdwQkbfyfnz58t7772nTtzo04sLCTfChQGanP33v/9VD1x0o48rmguC7vtpz5498r///S/db8kt+wnnLjSvbdiwoVx55ZUB3+f2vCnSmN+7P79nXm9mXg/M792f3zOvj/w+SnFZfh+Xye0ngwwZMkSmT5+uap7tA/OgdtqCwSuuvvpqqVatmnrfrbfeKm6DwV3wsOAC4YorrpAPPvhABgwYILpDLSf2Q/369X1e120/meyTTz6Rfv36qQtVex88XLRZsH+QGaG2esaMGao/mNvgghsP+29py5YtMmLECPn4449Fd5MmTZLChQur/nd2btlP6FuIAkE4+zRSdDAhv2de7/59FA1MyO+Z10d+Hz3jsvw+aloIFC9eXA3Usn//fp/X8X/p0qX9fgavB3u/9Tcz64x0TPbaTVwgfPPNN+pHEQya1eC7Nm/eLG6OyRIfHy9169b1bq/O+wkDjeAiLpQTVTj3U2YF+i1hgCiMiJod+z1SsH9QC40MxdmsywkZ1GWXXebKfRQILk6t7dV5P6EbIu4uPvLII5KQkOC6/fTss8/K3Llz1QBw5cuXD/pet+dNkcb83v35PfN6M/N6YH6vZ37PvF6iOr+PmgoBHBT16tVTTa7szTXwv73G2Q6v298PGBXSen+VKlVUYtvfgyZRGOEx0DojHZM1GiVq09Fk5tprr83we9AcD/3V0MTIrTHZoZnT77//7t1eXfeTNdVIUlKSPPzww67aT5mV0W8pO/Z7JGCk50cffVT9tU8TFQiaGKIW3o37KBCMEm1tr677CdDMFpl+KBfc4dxPuHjBxcGsWbPku+++U+erjLg9b4o05vfuz++Z15uZ1wPzez3ze+b1Et35vSeKTJ8+XY26OHHiRM+GDRs8Tz31lKdw4cKeffv2qeWPPPKIp0ePHt73L1261BMXF+cZNmyY548//lCjU8bHx3t+//1373uGDBmi1jFnzhzPb7/9pkaCrVKliuf06dOujAnbm5CQ4Pn88889e/fu9T5OnDihluPvSy+95Fm+fLln27ZtnoULF3quueYaz6WXXuo5c+aMK2PCKK9ff/21Z8uWLZ5Vq1Z5HnzwQU+ePHk869ev13Y/WRo1aqRG53WK9H7C969Zs0Y9cBoZPny4er5jxw61HLEgJsvWrVs9+fLl83Tr1k39lsaMGeOJjY31zJ8/P+Q0cltMU6dOVecHxGL/LWF0V0vXrl09ixYtUvsI55OmTZt6ihcvrkaWdWNMGOF69uzZnr/++kud51544QVPrly51PGl636yPPzww2pkXn8iuZ86d+6sRk7H99uPo8TERO97dMybIo35vfvze+b17s/rrW1gfu/u/J55vfvzerfn91FVIQBvv/22p2LFiiqTxJQaP/30k3fZzTffrKZ3sZsxY4bnsssuU+/HNCpfffWVz3JM99CrVy9PqVKl1A/n1ltv9WzatMnj1pgqVaqkfljOBw4wwEF52223eUqUKKEOOLz/ySefDNsJICsxdenSxfte7IfmzZt7Vq9erfV+go0bN6p9880336RbV6T3kzVljfNhxYC/iMn5mTp16qj4q1atqqaQykwauS0mPA/2fsAFXpkyZVQ85cqVU/9v3rzZtTENHTrUU61aNXWRXbRoUU/jxo093333ndb7CXDRljdvXs/YsWP9rjOS+8lfLHjYfx+65k2Rxvze/fk983p35/XA/N79+T3zevfn9W7P72PSNpCIiIiIiIiIokjUjCFARERERERERBewQoCIiIiIiIgoCrFCgIiIiIiIiCgKsUKAiIiIiIiIKAqxQoCIiIiIiIgoCrFCgIiIiIiIiCgKsUKAiIiIiIiIKAqxQoCILtqiRYskJiZGjh07FulNISIiohzAvJ7ITDEej8cT6Y0gIr00btxY6tSpIyNHjlT/Jycny5EjR6RUqVLqYoGIiIj0xryeKDrERXoDiEh/CQkJUrp06UhvBhEREeUQ5vVEZmKXASLKlI4dO8rixYtl1KhR6g4BHhMnTvRpRoj/CxcuLHPnzpUaNWpIvnz5pHXr1pKYmCiTJk2SypUrS5EiReT555+X8+fPe9edlJQkL730kpQrV07y588vDRo0UE0UiYiIKHyY1xNFD7YQIKJMwcXBn3/+KVdeeaX0799fvbZ+/fp078MFwejRo2X69Oly4sQJuffee+Wee+5RFw/z5s2TrVu3yn333ScNGzaUBx54QH3m2WeflQ0bNqjPlC1bVmbNmiV33HGH/P7773LppZeGPVYiIqJoxLyeKHqwQoCIMqVQoUKq2SDuBFhNBzdu3JjufWfPnpX33ntPqlWrpv7HXYOPP/5Y9u/fLwUKFJCaNWtKkyZN5Pvvv1cXCTt37pQJEyaov7hAANxBmD9/vnp90KBBYY6UiIgoOjGvJ4oerBAgohyBiwjrAgEwCBGaD+ICwf7agQMH1HPcGUCTwssuu8xnPWhaWKxYsTBuOREREYWCeT2R/lghQEQ5Ij4+3ud/9Dv091pKSop6fvLkSYmNjZVVq1apv3b2CwsiIiJyB+b1RPpjhQARZRqaEdoHCMoOdevWVevEXYSbbropW9dNREREmcO8nig6cJYBIso0NAf8+eefZfv27XLo0CFvzf/FQPPBhx56SNq3by8zZ86Ubdu2yYoVK2Tw4MHy1VdfZct2ExERUWiY1xNFB1YIEFGmYQAgNPXDYEElSpRQgwNlBwwohIuErl27qimMWrVqJb/88otUrFgxW9ZPREREoWFeTxQdYjwejyfSG0FERERERERE4cUWAkRERERERERRiBUCRERERERERFGIFQJEREREREREUYgVAkRERERERERRiBUCRERERERERFGIFQJEREREREREUYgVAkRERERERERRiBUCRERERERERFGIFQJEREREREREUYgVAkRERERERERRiBUCRERERERERFGIFQJEREREREREEn3+H40Ub0r/z7GjAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import sympy as sp\n", "from matplotlib.pyplot import *\n", "# Answer to EX1 q1 using symbolic calculs\n", "# Define symbolic variables\n", "M, m, b, l, I, g, F = sp.symbols('M m b l I g F')\n", "y, y1, theta, theta1, doty1, dottheta1 = sp.symbols('y y1 theta theta1 doty1 dottheta1')\n", "\n", "# Define the differential equations of the system\n", "eq1 = (M+m)*doty1 + b*y1 + m*l*dottheta1*sp.cos(theta) - m*l*theta1**2*sp.sin(theta) - F\n", "eq2 = m*l*sp.cos(theta)*doty1 + (I+m*l**2)*dottheta1 - m*g*l*sp.sin(theta)\n", "\n", "# Solve for the first derivative of theta1 (angular velocity)\n", "dottheta1_sol = sp.solve(eq2, dottheta1)[0]\n", "\n", "# Solve for the first derivative of y1 (linear velocity)\n", "doty1_sol = sp.simplify(sp.solve(eq1.subs(dottheta1, dottheta1_sol), doty1)[0])\n", "dottheta1_sol = sp.simplify(dottheta1_sol.subs(doty1,doty1_sol))\n", "\n", "# Define the state-space representation of the system dynamics\n", "f1 = y1\n", "f2 = doty1_sol \n", "f3 = theta1\n", "f4 = dottheta1_sol\n", "f = sp.Matrix([f1, f2, f3, f4])\n", "\n", "# Define state and control variables\n", "variables_x = sp.Matrix([y,y1,theta,theta1])\n", "variables_u = sp.Matrix([F])\n", "\n", "# Compute the Jacobian matrices of the system\n", "jacobian_A = sp.simplify(f.jacobian(variables_x).subs([(theta,0), (theta1,0)]))\n", "jacobian_B = sp.simplify(f.jacobian(variables_u).subs([(theta,0), (theta1,0)]))\n", "\n", "A = np.array(jacobian_A.subs({M:2.5, m:0.2, b:0.1,l:0.7, I:0.006, g:9.81}).evalf()).astype(float)\n", "B = np.array(jacobian_B.subs({M:2.5, m:0.2, b:0.1,l:0.7, I:0.006, g:9.81}).evalf()).astype(float).reshape(4,1)\n", "C = np.array([[1,0,0,0],[0,0,1,0]]) \n", "D = B\n", "\n", "x0 = np.array([0,\n", " 0,\n", " 0,\n", " 0]) # initial state\n", "\n", "MatC = np.array([[0,0,1,0]]) # Let us assume that we measure only theta\n", "\n", "Kp= 120;\n", "Ki = 80;\n", "Kd = 50;\n", "\n", "t0 = 0 # Initial time \n", "tf = 2 # Final time\n", "T = np.linspace(t0, tf, 1000) \n", "\n", "def w_func(t):\n", " return 0.1# Disturbance input\n", "\n", "def r_func(t):\n", " return 0.0# Disturbance input\n", "\n", "\n", "solution = PID(A, B, D, MatC , Kp, Ki, Kd, r_func, w_func, T, x0)\n", "\n", "\n", "figure(figsize=(12, 5))\n", "y = solution[:,2]\n", "\n", "subplot(1, 2, 1)\n", "plot(T, y, linewidth=2.0, color = 'red')\n", "grid(color='black', linestyle='--', linewidth=1.0, alpha = 0.7)\n", "grid(True)\n", "xlabel('time')\n", "xlim([t0, tf])\n", "plt.legend(['PID(120,80, 50)' ])\n", "ylabel(r'Angle ')\n", "\n", "y = solution[:,0]\n", "subplot(1, 2, 2)\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", "xlabel('time')\n", "plt.legend(['PID(120,80, 50)' ])\n", "ylabel(r'Position ')" ] }, { "cell_type": "code", "execution_count": null, "id": "df2e4cf0-92e9-4511-b8dd-5339a9c5662e", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "id": "5103bd4a-cc87-4880-bc52-d92d09c1efde", "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", "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 the 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", "$$\\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", "\n", "1. Design a LQR regulator that stabilizes the system in the zero.\n", "2. Design a LQR regulator, that enables tracking a given constant reference for the angular velocity, while assuming that $i_{ref} = 0$. Use integral action to ensure robust tracking. Check the behavior of the closed loop system for $r = 1 rad/c$." ] }, { "cell_type": "code", "execution_count": null, "id": "ec05b530-845b-427d-8f01-2b1ce56ca7ce", "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.13.2" } }, "nbformat": 4, "nbformat_minor": 5 }