diff --git a/lectures/4-Casadi-Transport.ipynb b/lectures/4-Casadi-Transport.ipynb deleted file mode 100644 index dc985e58..00000000 --- a/lectures/4-Casadi-Transport.ipynb +++ /dev/null @@ -1,529 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import casadi as ca\n", - "import numpy as np\n", - "import control\n", - "import matplotlib.pyplot as plt\n", - "\n", - "from casadi.tools.graph import dotgraph\n", - "from IPython.display import Image\n", - "\n", - "def draw_graph(expr):\n", - " return Image(dotgraph(expr).create_png())\n", - "\n", - "# make matrix printing prettier\n", - "np.set_printoptions(precision=3, suppress=True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This notebook will walk through trimming and control design for a transport aircxraft using casadi." - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [], - "source": [ - "def rhs(x, u):\n", - " s = 2170\n", - " cbar = 17.5\n", - " mass = 5.0e3\n", - " iyy = 4.1e6\n", - " tstat = 6.0e4\n", - " dtdv = -38.0\n", - " ze = 2.0\n", - " cdcls = 0.042\n", - " cla = 0.085\n", - " cma = -0.022\n", - " cmde = -0.016\n", - " cmq = -16.0\n", - " cmadot = -6.0\n", - " cladot = 0.0\n", - " rtod = 57.29578\n", - " gd = 32.17\n", - " \n", - " thtl = u[0]\n", - " elev_deg = u[1]\n", - " xcg = u[2]\n", - " land = u[3]\n", - " \n", - " vt = x[0] # velocity, ft/s\n", - " alpha = x[1]\n", - " alpha_deg = rtod*alpha # angle of attack, deg\n", - " theta = x[2] # pitch angle, rad\n", - " q = x[3] # pitch rate, rad/s\n", - " h = x[4] # altitude, ft\n", - " pos = x[5] # horizontal position from origin, ft (not used in dynamics)\n", - " \n", - " r0 = 2.377e-3\n", - " tfac = 1.0 - 0.703e-5*h\n", - " temperature = ca.if_else(h > 35000, 390.0, 519.0*tfac)\n", - " rho = r0*(tfac**4.14)\n", - " mach = vt/ca.sqrt(1.4*1716.3*temperature)\n", - " qbar = 0.5*rho*vt**2\n", - " \n", - " qs = qbar*s\n", - " salp = ca.sin(alpha)\n", - " calp = ca.cos(alpha)\n", - " gam = theta - alpha\n", - " sgam = ca.sin(gam)\n", - " cgam = ca.cos(gam)\n", - " \n", - " aero_p = ca.if_else(\n", - " land,\n", - " (1.0, 0.08, -0.20, 0.02, -0.05),\n", - " (0.2, 0.016, 0.05, 0.0, 0.0))\n", - " cl0 = aero_p[0]\n", - " cd0 = aero_p[1]\n", - " cm0 = aero_p[2]\n", - " dcdg = aero_p[3]\n", - " dcmg = aero_p[4]\n", - " \n", - " thr = (tstat + vt*dtdv)*ca.fmax(thtl, 0)\n", - " cl = cl0 + cla*alpha_deg\n", - " cm = dcmg + cm0 + cma*alpha_deg + cmde*elev_deg + cl*(xcg - 0.25)\n", - " cd = dcdg + cd0 + cdcls*cl**2\n", - " \n", - " x_dot = ca.SX.zeros(6)\n", - " x_dot[0] = (thr*calp - qs*cd)/mass - gd*sgam\n", - " x_dot[1] = (-thr*salp - qs*cl + mass*(vt*q + gd*cgam))/(mass*vt + qs*cladot)\n", - " x_dot[2] = q\n", - " d = 0.5*cbar*(cmq*q + cmadot*x_dot[1])/vt\n", - " x_dot[3] = (qs*cbar*(cm + d) + thr*ze)/iyy\n", - " x_dot[4] = vt*sgam\n", - " x_dot[5] = vt*cgam\n", - " return x_dot" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "def constrain(s, vt, h, q, gamma):\n", - " \n", - " # s is our design vector:\n", - " # s = [thtl, elev_deg, alpha]\n", - " thtl = s[0]\n", - " elev_deg = s[1]\n", - " alpha = s[2]\n", - " \n", - " pos = 0 # we don't care what horiz. position we are at\n", - " xcg = 0.25 # we assume xcg at 1/4 chord\n", - " land = 0 # we assume we do not have flaps/gear deployed\n", - " theta = alpha + gamma\n", - " \n", - " # vt, alpha, theta, q, h, pos\n", - " x = ca.vertcat(vt, alpha, theta, q, h, pos)\n", - " \n", - " # thtl, elev_deg, xcg, land\n", - " u = ca.vertcat(thtl, elev_deg, xcg, land)\n", - " return x, u\n", - "\n", - "def trim_cost(x, u):\n", - " x_dot = rhs(x, u)\n", - " return x_dot[0]**2 + 100*x_dot[1]**2 + 10*x_dot[3]**2\n", - "\n", - "def objective(s, vt, h, q, gamma):\n", - " x, u = constrain(s, vt, h, q, gamma)\n", - " return trim_cost(x, u)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "def trim(vt, h, q, gamma):\n", - " s = ca.SX.sym('s', 3)\n", - " nlp = {'x': s, 'f': objective(s, vt=vt, h=h, q=q, gamma=gamma)}\n", - " S = ca.nlpsol('S', 'ipopt', nlp, {\n", - " 'print_time': 0,\n", - " 'ipopt': {\n", - " 'sb': 'yes',\n", - " 'print_level': 0,\n", - " }\n", - " })\n", - " # s = [thtl, elev_deg, alpha]\n", - " s0 = [0.293, 2.46, np.deg2rad(0.58)]\n", - " res = S(x0=s0, lbg=0, ubg=0, lbx=[0, -60, -np.deg2rad(5)], ubx=[1, 60, np.deg2rad(18)])\n", - " trim_cost = res['f']\n", - " trim_tol = 1e-10\n", - " if trim_cost > trim_tol:\n", - " raise ValueError('Trim failed to converge', trim_cost)\n", - " assert np.abs(float(res['f'])) < trim_tol\n", - " s_opt = res['x']\n", - " x0, u0 = constrain(s_opt, vt, h, q, gamma)\n", - " return {\n", - " 'x0': np.array(x0).reshape(-1),\n", - " 'u0': np.array(u0).reshape(-1),\n", - " 's': np.array(s_opt).reshape(-1)\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "def power_required_curve():\n", - " throttle = []\n", - " vt_list = np.arange(190, 500, 5)\n", - " for vt in vt_list:\n", - " res = trim(vt=vt, h=0, q=0, gamma=0)\n", - " throttle.append(res['s'][0])\n", - " plt.plot(vt_list, 100*np.array(throttle))\n", - " plt.grid()\n", - " plt.ylabel(r'throttle, %')\n", - " plt.xlabel('VT, ft/s')\n", - " plt.title('power required curve')\n", - " \n", - "power_required_curve()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "def linearize(trim):\n", - " x0 = trim['x0']\n", - " u0 = trim['u0']\n", - " x = ca.SX.sym('x', 6)\n", - " u = ca.SX.sym('u', 4)\n", - " y = x\n", - " A = ca.jacobian(rhs(x, u), x)\n", - " B = ca.jacobian(rhs(x, u), u)\n", - " C = ca.jacobian(y, x)\n", - " D = ca.jacobian(y, u)\n", - " f_ss = ca.Function('ss', [x, u], [A, B, C, D])\n", - " return control.ss(*f_ss(x0, u0))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "def pitch_rate_control_design(vt, H, xlim, ylim, tf=3):\n", - " trim_state = trim(vt=vt, h=0, q=0, gamma=0)\n", - " print(trim_state)\n", - " sys = linearize(trim_state)\n", - " G = control.minreal(control.tf(sys[3, 1]), 1e-2)\n", - " control.rlocus(G*H, kvect=np.linspace(0, 1, 1000), xlim=xlim, ylim=ylim);\n", - " Go = G*H\n", - " Gc = control.feedback(Go)\n", - " plt.plot([0, -3], [0, 3*np.arccos(0.707)], '--')\n", - " #plt.axis('equal')\n", - " plt.grid()\n", - " \n", - " plt.figure()\n", - " control.bode(Go, margins=True, dB=True, Hz=True, omega_limits=[1e-2, 1e2], omega_num=1000);\n", - " plt.grid()\n", - "\n", - " plt.figure()\n", - " t = np.linspace(0, tf, 1000)\n", - " r = np.array(t > 0.1, dtype=float)\n", - " t, y, x = control.forced_response(Gc, T=t, U=r)\n", - " _, u, _ = control.forced_response((1/G)*Gc, T=t, U=r)\n", - "\n", - " u_norm = np.abs(u)\n", - " max_u_norm = np.max(u_norm)\n", - " print('u_norm max', max_u_norm)\n", - "\n", - " plt.plot(t, y, label='x')\n", - " plt.plot(t, r, label='r')\n", - " plt.plot(t, u_norm/max_u_norm, label='u normalized')\n", - " plt.gca().set_ylim(0, 1.5)\n", - " plt.grid()\n", - " plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'x0': array([500. , 0.01, 0.01, 0. , 0. , 0. ]), 'u0': array([0.293, 2.461, 0.25 , 0. ]), 's': array([0.293, 2.461, 0.01 ])}\n", - "1 states have been removed from the model\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/alexander/anaconda3/envs/aae497-f19/lib/python3.7/site-packages/control/xferfcn.py:896: ComplexWarning: Casting complex values to real discards the imaginary part\n", - " num[i, j, np + 1 - len(numpoly):np + 1] = numpoly[::-1]\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "u_norm max 853.5644464374589\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3de3Cc9X3v8fd3L9LqspKwHGRjG2yIjQHbxPgCxyRUXHK4HAJlkmkISZlQGA9JaE/ndJJQWiCZNJ1CezptbmU8wSWcSQINEAKEhCYNiusmYBwwjrFjasDEwsaAfNGurJVWu7/zx168klfWSt717v78ec3saJ99fs+z358f+6Off/s8z5pzDhERqX+BahcgIiLloUAXEfGEAl1ExBMKdBERTyjQRUQ8EarWG0+fPt3NnTt3StsODAzQ0tJS3oKqRH2pTb70xZd+gPqS85vf/OY959z7iq2rWqDPnTuXjRs3Tmnbnp4euru7y1tQlagvtcmXvvjSD1BfcszszfHWacpFRMQTCnQREU8o0EVEPFG1OXQRqS3JZJLe3l4SiUS1Symqvb2dbdu2VbuMsiilL5FIhNmzZxMOh0verwJdRADo7e0lGo0yd+5czKza5RwhFosRjUarXUZZTNQX5xx9fX309vYyb968kverKRcRASCRSNDZ2VmTYX6iMTM6Ozsn/b8lBbqI5CnMa8dUjoUCXUTEEwp0ERFPKNBFRDwxYaCb2Voze8fMtkzQboWZpczsY+UrT0ROFC+88AJLliwhkUgwMDDAOeecw5YtR40dGaOU0xYfAL4BPDheAzMLAvcAz5SnLBGppi8/+Qpbd/eXdZ9nn9LG3R85Z9z1K1as4JprruGv//qvGRwc5FOf+hSLFi0qaw2+mzDQnXPrzGzuBM3+FHgUWFGGmkTkBHXXXXexYsUKIpEIX/va16pdTt055guLzGwWcB1wCRMEupmtBlYDdHV10dPTM6X3jMfjU9621qgvtcmXvkymH+3t7cRiMQD+T/epFaknt//x7N27l/7+foaGhnj33XdH3WI2lUpNuH29KLUviURicn8PnXMTPoC5wJZx1v0AuCD7/AHgY6Xsc9myZW6qnn322SlvW2vUl9rkS18m04+tW7dWrpASfeQjH3Hf/e533d/8zd+4z33uc6PW9ff3V6mq8iu1L8WOCbDRjZOr5bj0fznwUPYk+OnAVWY24px7vAz7FpETxIMPPkgoFOKGG24glUqxatUqfvGLX3DJJZdUu7S6ccyB7pzL32jAzB4AnlKYi8hk3Xjjjdx4440ABINBnn/++SpXVH8mDHQz+z7QDUw3s17gbiAM4Jy7r6LViYhIyUo5y+UTpe7MOffpY6pGRESmTFeKioh4QoEuIuIJBbqIiCcU6CIinlCgi4h4QoEuIjXJOUc6na52GXVFgS4iNWPnzp2cddZZfPazn+W8885j165d1S6prpTj0n8R8c1Pboe3f1vefc5YDFf+3YTNtm/fzr/+67/yrW99q7zvfwLQCF1Easppp53GBRdcUO0y6pJG6CJypBJG0pVSeMtcmRyN0EVEPKFAFxHxhAJdRGrG3Llz9cXQx0CBLiLiCQW6iIgnFOgiIp5QoIuIeEKBLiLiCQW6iIgnFOgiIpPQ09PD1VdfDcATTzzB3/3dsV9V293dzcaNG495PxMGupmtNbN3zKzoyaFm9kkz25x9/MrMzj3mqkREKiCVSpV1f9dccw233357Wfd5LEoZoT8AXHGU9W8Af+CcWwJ8BVhThrpE5ASzc+dOFi1alF/+h3/4B770pS8d0e7Tn/40f/Znf8aqVas4/fTTeeSRR4DM/dM///nPs2jRIhYvXszDDz8MZEbUF198MTfccAOLFy9m586dLFy4kFtuuYVFixbxyU9+kp///OdceOGFzJ8/nw0bNgCwYcMGVq1axdKlS1m1ahXbt28/opYHHniA2267DYAPfOAD+UdTUxO//OUvGRgY4E/+5E9YsWIFS5cu5Uc/+hEAg4ODXH/99SxZsoSPf/zjDA4OluXPcMKbcznn1pnZ3KOs/1XB4nPA7GMvS0Sq6Z4N9/C7fb8r6z4XTlvIF1d+sSz72rNnD+vXr+d3v/sd11xzDR/72Md47LHH2LRpEy+//DLvvfceK1as4KKLLgIy4bxlyxbmzZvHzp072bFjBz/4wQ9Ys2YNK1as4Hvf+x7r16/niSee4G//9m95/PHHWbhwIevWrSMUCvHzn/+cO+64g0cffXTcmjZt2gTAk08+yb333suqVau4++67ueSSS1i7di0HDhxg5cqVXHbZZdx///00NzezefNmNm/ezHnnnVeWP5dy323xZuAn4600s9XAaoCuri56enqm9CbxeHzK29Ya9aU2+dKXyfSjvb2dWCwGwPDwcNmnJ4aHh/P7LyYej5NOp/NthoaGGBoayi+nUilisRjJZJLLL7+cgYEB5syZw969e4nFYvziF7/guuuu49ChQzQ3N7Nq1SrWrVtHNBpl2bJlTJ8+nVgsRjwe57TTTmPu3LkMDAywYMECVq1aRTweZ968ebz++uvEYjHeeustvvCFL/Daa69hZiSTSWKxGIcOHWJkZIRYLEYikRjVrx07dvAXf/EXPPXUUyQSCX7605/y+OOPc++99wKZkfm2bdtYv349n/nMZ4jFYsybN49FixYxMDBwxJ9PIpGY1N/DsgW6mV1MJtA/OF4b59waslMyy5cvd93d3VN6r56eHqa6ba1RX2qTL32ZTD+2bdtGNBoF4M4P3lnBqorr6OgAyNfgnKOxsTG/HIvFiEajhMNhOjo6RrXLvR6JRPKvh8NhmpqaaG5upq2tLf96a2srTU1N+eXGxsb8/tra2kin00SjUe655x4+/OEP8+STT7Jz5066u7uJRqM0NzcTCoWIRqNEIhEaGhqIRqP56ZX777+fBQsWAGBm/PCHP+TMM88c1Vczo6WlJV9DIBAYtZwTiURYunRpyX+GZTnLxcyWAN8GrnXO9ZVjnyJyYunq6uKdd96hr6+PoaEhnnrqqUltf9FFF/Hwww+TSqV49913WbduHStXrpxyPQcPHmTWrFlAZq58IjfddBM33XQTH/rQh/KvXX755Xz961/HOQfASy+9BMCFF17Id7/7XQC2bNnC5s2bp1xnoWMOdDM7FXgM+GPn3KvHXpKInIjC4TB33XUX559/PldffTULFy6c1PbXXXcdS5Ys4dxzz+WSSy7h3nvvZcaMGVOu5wtf+AJ/+Zd/yYUXXjjh9NObb77JI488wtq1a/MfjG7cuJE777yTZDLJkiVLWLRoEXfemfmfz80330w8HmfJkiXce++9x/SLZxTn3FEfwPeBPUAS6CUzrXIrcGt2/beB/cCm7GPjRPt0zrFs2TI3Vc8+++yUt6016ktt8qUvk+nH1q1bK1dIGfT391e7hLIptS/FjsnRMraUs1w+McH6W4Bbpv4rRUREykFXioqIeEKBLiJ5LvvhnVTfVI6FAl1EgMwpcn19fQr1GuCco6+vj0gkMqntyn1hkYjUqdmzZ9Pb28u7775b7VKKSiQSkw64WlVKXyKRCLNnT+7CewW6iACZ0wbnzZtX7TLG1dPTM6mLbGpZpfqiKRcREU8o0EVEPKFAFxHxhAJdRMQTCnQREU8o0EVEPKFAFxHxhAJdRMQTCnQREU/oStEC/Ykkv36tj137DuEcRCMh5k5v4Yz3tfK+aGO1yxMROSoFOpBKO77xix38yy93kEimi7aZ2R7hA3M68o/Fs9tpbtAfn4jUjhM+kZxz/PnDm3jy5d38ryUz+fSquSw4OUowaOwfGGZn3wCv7o3z8q4DvLRrPz/Z8jYAAYMFXVHOnd3BuXM6OHdOOwu6ooSDmsUSkeo44QP9/vVv8OTLu/n85WfyuYvfP2pda2OIOdOa+dD89+Vfey8+xMu7DmQevQd5ZuvbPLxxFwCNoQCLZrWz6JQ2FsyIsqAryoKTo7Q3h49rn0TkxHRCB/q+gWH+8WevcunCk/ls9xklbTO9tZFLz+ri0rO6gMwIf9e+QTb1ZkJ+c+8BHn3xLeJDI/ltZrRFmN/VyvtPbuW0ac2c1tnCqZ3NzD6pqSL9EpET0wkd6Pevf53BZIrbr1yImU1pH2bGqZ3NnNrZzDXnngJkQn73wQSvvh1j+95Y/udDG3YxmEwVbAsnNRoLXv01p3Q0MaMtQlf+0ciM9gjva20kpGkcESnBhIFuZmuBq4F3nHOLiqw34J+Bq4BDwKedcy+Wu9ByS6Ud/7axl0sXdjG/K1rWfZsZszqamNXRxMULT86/7pzj3fgQu/Yd4s2+zOOFbW8wlHI8//o+9vYnGEm7MfuCzpYGTmrOPlrC2Z8NnNSced7R3EBrYyjziIRoaQzS2hiiKRyc8i8qEak/pYzQHwC+ATw4zvorgfnZx/nAv2R/1rQNb+zj3dgQf7j0lOP2nmbGydEIJ0cjLDttGgA94d10d68CIJ129A0Ms7c/wd7+BG/3J9h7MMG78SH2DyTZf2iYne8d4sVDBzhwaJhk6uhfFRYwaMkFfWOIpoYgjaEAjaHMz0g4uxw+/FpmOUhDMEAwYISClvkZMIKBQPanEQ6OXg4FjO37UrTu3Efmd4hhBpbtd+YnWPZ1xiyPep5dR0Hbw9+K5vLLuZdy61zBusNt3Jjtx193eH+O1w6kaPv9/qLvm1s6/D5uzPYF9Ryx7/GO1rEr9rt7a1+K8I73pra/Y6xnvJ1ads/5vwe5VTbe65mfO/aniL65f/ztxrQv/LtGkXWjlsd7fcx2HKX2Yu8/etvD6weSlfmLMGGgO+fWmdncozS5FnjQZf5WP2dmHWY20zm3p0w1TtlHv7OMG/rjfDSROmLd4qERNjam6fxpAzxTheKyVg0PwwsNQOYqr/dlH0f8V6hQA7iGbCg5RzobTrmQc27M8xEyj/jYMHRHBKNj6n/R5gO8POXNa8psgJeqXcWxWwCwudpVlMepAJuqXUV5pKJXwYcvLvt+yzGHPgvYVbDcm33tiEA3s9XAaoCuri56enqm9IbxeLykbV9lmC+1NXBB49lHrHt+zwhNDcaSjuCUaiiXZDJJOFxDZ8E4SEPBL4TsL4XMKnIzQvmfuW0cjIyMEAiFMi8U/KIYs/v8k7HrXUGDo/1asSILpYwm7Ygn42+XGkkRDAXH2W70iHDc2sarowJD3/FG/qnUCMFg7X5UNt5xdmOfORhJpQgGS/v36ooslDpUcUc8KX37cfszZkWodcaU8+/oBTg34QOYC2wZZ92PgQ8WLP8HsGyifS5btsxN1bPPPltSu0UPLHKLHlh0xOvvxRLutC8+5b757H9PuYZyKbUv9UB9qT2+9MM59SUH2OjGydVynD7RC8wpWJ4N7C7Dfitm45v7AVgxd1qVKxERKZ9yBPoTwI2WcQFw0NXA/PnRvPjmfhqCARbPaq92KSIiZVPKaYvfB7qB6WbWC9wNhAGcc/cBT5M5ZXEHmdMWb6pUseWy7e0Y87taiYSrO38uIlJOpZzl8okJ1jvgc2Wr6DjYsTfGynmabhERv5xwlyDGEkl2H0yU/WIiEZFqO+EC/bV3BwCYf3JrlSsRESmvEy7QX90bA9AIXUS8c8IF+s73BggFjFOnNVe7FBGRsjrhAn33gUFmdkQIBnTTKhHxywkY6AlOadd9yEXEP94GuksX/27Qtw4MMqtDgS4i/vE20ItJpR1v9yc4RYEuIh7yNtCdO3KEvrc/QSrtFOgi4iVvA72Y3QcGATilI1LlSkREys/bQC82Qn8rG+iaQxcRH3kb6MW8GxsC4OQ2jdBFxD/eBnqxEfp78WHCQaMtUrvf4CIiMlXeBnox+waGmNbSkP9SWRERn3gb6I7DI/R0drS+b2CYzpbGapUkIlJR3gZ6oZH0CJCZculsbahyNSIileFvoKcPf812Mp0EMiP0aS0KdBHxk7eBXjjlkhuh98WHNOUiIt7yNtALJdNJEskUA8MpTbmIiLe8PX+v8LTFZCrJvqFhADo15SIinipphG5mV5jZdjPbYWa3F1nfbmZPmtnLZvaKmd1U/lKnLplO0hfPBLrm0EXEVxMGupkFgW8CVwJnA58ws7PHNPscsNU5dy7QDfxfM6tqco4aoaeT9A1krhLVlIuI+KqUEfpKYIdz7nXn3DDwEHDtmDYOiFrmip1WYB8wUtZKj0EyneTgYOZMl45mBbqI+KmUOfRZwK6C5V7g/DFtvgE8AewGosDHXZFr781sNbAaoKuri56enimUDPF4fMJtR5Kx/PPnXniO1/bOAuC3L25gV2PtfBZcSl/qhfpSe3zpB6gvpSgl0ItdJ+/GLF8ObAIuAc4AfmZm/+mc6x+1kXNrgDUAy5cvd93d3ZMuGKCnp4eJth08tA9+kHm+5ANLGNjaBlu3c8Ulf0AkHJzS+1ZCKX2pF+pL7fGlH6C+lKKUoWovMKdgeTaZkXihm4DHXMYO4A1gYXlKnJrC89CT6SSxxAjhoNEYqp3RuYhIOZWSbi8A881sXvaDzuvJTK8U+j1wKYCZdQFnAq+Xs9BjkQn0JG2RsG7MJSLemnDKxTk3Yma3Ac8AQWCtc+4VM7s1u/4+4CvAA2b2WzJTNF90zr1Xwbonlh59HnosMUJUt80VEY+VlHDOuaeBp8e8dl/B893A/yxvacdm1KX/boT+RJJoJFzFikREKuuEmFDWCF1ETgTeBrpzo++2GEskFegi4jVvA71Q7iyXNk25iIjHvA30sZf+9w9qDl1E/OZtoBcaGhlmYDilKRcR8Zq3gV44Qo8PJQAU6CLiNW8DvVD/0CEAzaGLiNe8DXRXcLuZ+HBmhN7WpBG6iPjL20AvNJDMBHpro0boIuIvfwO9YA49MZL5coumhtq5y6KISLn5G+gFBkcyI/RmBbqIeMzbQC+8UnQoO0JXoIuIzzwO9MNTLkMpTbmIiP+8DfRCw6lhAJobdJaLiPjL20AvPG1xOJ0J9KYa+uo5EZFy8zbQCyXTQzSGAgQD+rYiEfGXt4HuCr+xKD2s+XMR8Z63gV5oxA3TrOkWEfGct4Fe+BV0KZfUCF1EvOdtoOcEMFJuWGe4iIj3Sgp0M7vCzLab2Q4zu32cNt1mtsnMXjGzX5a3zCnIXljUaEHSaIQuIv6bcNhqZkHgm8CHgV7gBTN7wjm3taBNB/At4Arn3O/N7ORKFTxZjYEQg+khmhq8/8+IiJzgSkm5lcAO59zrzrlh4CHg2jFtbgAec879HsA59055y5y83JWijRYCczTpRosi4rlSJpZnAbsKlnuB88e0WQCEzawHiAL/7Jx7cOyOzGw1sBqgq6uLnp6eKZQM8Xh8wm0HD70JQGAkM/VyYN/bU36/SiqlL/VCfak9vvQD1JdSlBLoxa7GcWOWQ8Ay4FKgCfi1mT3nnHt11EbOrQHWACxfvtx1d3dPumCAnp4eJtr2nb1b4KfQ2tgEQwOcOns63d0XTun9KqmUvtQL9aX2+NIPUF9KUUqg9wJzCpZnA7uLtHnPOTcADJjZOuBc4FWqJHfaYiSQ6WJDOH205iIida+UOfQXgPlmNs/MGoDrgSfGtPkR8CEzC5lZM5kpmW3lLXVqGi0T6OFQqsqViIhU1oQjdOfciJndBjwDBIG1zrlXzOzW7Pr7nHPbzOynwGYgDXzbObelkoVPJPehaDgb6CEFuoh4rqSrbZxzTwNPj3ntvjHLfw/8fflKK48wmfPPw0EFuoj4zd+Ts7MXFuUCPRAaqWY1IiIV52+gZ4Wz/wkJBjRCFxG/eRvo+Tn07AgdS1axGhGRyvM20HNC2UB3CnQR8Zy3gZ77CrrclItjuJrliIhUnLeBntOQDfQUQ1WuRESksrwN9MNz6Jm7co24RDXLERGpOO8DPZAO4Jwx4jRCFxG/eRvoOWlnkG4gqRG6iHjO20B32QuL0mmHcw0MpxXoIuI3bwM9J+VcZoSuQBcRz3kc6Jk59HQaXLqBRGqwyvWIiFSWx4GekXKZQB9SoIuI57wN9MI59IBrZHBEgS4ifvM20HNSaQigQBcR/3kb6LkReso5BbqInBC8DfSctIMgjRxKHqp2KSIiFeVtoOeuFE2lHSGLaIQuIt7zNtBzUmkIWSOJVIJUWl9yISL+8jbQc7fPHUk7woEIAImULi4SEX+VFOhmdoWZbTezHWZ2+1HarTCzlJl9rHwlTk1uyiWddjRkA13z6CLiswkD3cyCwDeBK4GzgU+Y2dnjtLsHeKbcRR6LlCMf6JpHFxGflTJCXwnscM697pwbBh4Cri3S7k+BR4F3yljfMcietpiGxmAToEAXEb+FSmgzC9hVsNwLnF/YwMxmAdcBlwArxtuRma0GVgN0dXXR09MzyXIz4vH4hNseOPhbABLDSQZjQxCF/9rwX+yJ7JnSe1ZKKX2pF+pL7fGlH6C+lKKUQLcir7kxy/8EfNE5lzIr1jy7kXNrgDUAy5cvd93d3SWWOVpPTw8Tbfvaa0lYD4FAiJmdM+kdhjMXn8mFsy6c0ntWSil9qRfqS+3xpR+gvpSilEDvBeYULM8Gdo9psxx4KBvm04GrzGzEOfd4Wao8BinniIZaYRhiyVi1yxERqZhSAv0FYL6ZzQPeAq4Hbihs4Jybl3tuZg8AT1U7zF3BHHpLOApAbFiBLiL+mjDQnXMjZnYbmbNXgsBa59wrZnZrdv19Fa7xmKRSjtZwK6BAFxG/lTJCxzn3NPD0mNeKBrlz7tPHXtaxy1/67xzNoSZCFlKgi4jXvL1SNMc5ozEcJNoQVaCLiNe8DXRXcCJOQyhAa0Mr/cP9VaxIRKSy/A307JSLw2gIBog2RIkPx6tclYhI5Xgb6IXCoYCmXETEe/4Gujs85RIOBmhraFOgi4jX/A30PCMcNI3QRcR73gZ6bg4dMiP0aDiqK0VFxGveBnqOA0KBzBz64MggyVSy2iWJiFSEt4GeO23RgIZQZsoFdD8XEfGXt4Ge47DMlEs20HXqooj4yttAd/mzXIxQIEB7YzsA+4f2V68oEZEKKuleLnXNWWbKJTINgP0JBbqI+MnfETqHz3IJBQJ0RjoB2JfYV62SREQqyttAz3FkTls8KXISoEAXEX/5G+iu8OZcRiQUoSXcQt9gXxWLEhGpHG8D/fCFRZkPRQGmRabRl1Cgi4ifvA30QuHQ4UDXlIuI+MrbQM/NuDiMcMAA6Ix0KtBFxFveBnqhcDA7Qm+axr5BBbqI+MnbQC88bbFwymX/0H5S6VS1yhIRqZiSAt3MrjCz7Wa2w8xuL7L+k2a2Ofv4lZmdW/5Sp8oIZadcpkWmkXZpDgwdqHJNIiLlN2Ggm1kQ+CZwJXA28AkzO3tMszeAP3DOLQG+Aqwpd6GT5cZ8wQXAjOYZALx96O2q1CQiUkmljNBXAjucc68754aBh4BrCxs4537lnMtdU/8cMLu8ZU6dYQSzI/SZrTMB2BPfU82SREQqopR7ucwCdhUs9wLnH6X9zcBPiq0ws9XAaoCuri56enpKq3KMeDw+4bbv9P0u856QbzuQGgBg3cvrCL1RG7exKaUv9UJ9qT2+9APUl1KUkmpW5DVX5DXM7GIygf7BYuudc2vITscsX77cdXd3l1blGD09PUy07aYtu+E3EAwG822dc3z5e1+mZUYL3Sun9t7lVkpf6oX6Unt86QeoL6UoJdB7gTkFy7OB3WMbmdkS4NvAlc656l+OmZ1DD9rh30dmxiktp7BnQFMuIuKfUubQXwDmm9k8M2sArgeeKGxgZqcCjwF/7Jx7tfxlTl0gMPo/GDNbZ7I7fsTvIxGRujfhCN05N2JmtwHPAEFgrXPuFTO7Nbv+PuAuoBP4lmVGxCPOueWVK3tiLj9CH/07a2bLTLa8t6UaJYmIVFRJnww6554Gnh7z2n0Fz28Bbilvaccmd3OusSP02dHZHBg6QP9wP20NbdUoTUSkIry9UjRnbKCf0X4GAK8feL0a5YiIVIy3ge6yJ+IExky5nNGRCfQdB3Yc95pERCrJ20DPCY3p4Smtp9AUauK1A69VpyARkQrxNtBzH4qOHaEHLMDp7adrhC4i3vE20HOCgSOvizqj4wz+e/9/j7rfi4hIvfM20HO3zw0Ejuzi4umL6Uv00RvvPd5liYhUjLeBnjN2ygXgvK7zAHjpnZeOdzkiIhXjb6DnLiwq0sP3d7yfaEOUF/e+eJyLEhGpnNq45WAFBQPBI14LWIClJy9lw9sbcM5hVuz+YyIyGc45HI6US+GcI+3S+UfutZRLZdqkMz9z63CQJp3ZjnRm2aXzbQB2De9ia9/W/Pvk2o5azm6Te63YMmT3XfBe47U9YrnYe49pX7j/8ep0CUc33WU/Bt4Geu4PNjhOWHfP6WZd7zpe3f8qZ04783iWJnUkF0LJdJKR9MiRP1NJRtwII+nMIxdQY5+nXCrzSB/5c8SNkEqnSLt0/vnY9sX2l3bpw/su3KYgPPft28d3fvqdUeGaD9hSwjcbRuOuy22XbVNxT1X+LY6Hy9ouq8h+/Q307F+uYLE5F+DSUy/lq899lX9/898V6FXmnGMkPcJQaoih1BDJdJKh1BDDqeHMIz08ejlVsJxdl0xlt0ln1ifTyUzYFgvhgp/jPR9KDuH+nyOZTlbtzyVgAYIWJBQIjfs8aEECFhj1PGhBAoEAAQKZESjktzviQZHXCh5BC2JmRdvl1xXZZzAQxCiyrmC7oI1uk+tz7jUMAgTy77/llS0sXrQ438bM8m3zy9m2uXW5+oq1L9x/vm1uudi+x1su2D5f+9i+5Jaz7/Gf6/6zIn9nvA30nMA4I/RpkWmcP/N8frTjR9y65FbCwfBxrqw+JNNJDiUPcSh5iMHUIIMjgyRGEvnHYOrw8taDW/ntS7/NvJ5rl0qM3qZguTCQyyEUCNEQaKAh2EBDoIFwMEwoECIcOPJnJBQp+nru55639nD6aacXXx8ME7LQ4f1b5mcwECwpdHPtcs9DFiIQCBCy0Kh15ZgK9Oke4sE3gnSf2l3tMsqi2Mka5eBtoOfOMQ8VOW0x51NnfYrP/sdn+fEbP+YP3/+Hx6u0iku7NPFknNhwjP6hfmLDMQaSAwyMDHAoeSjzPPs4NJJZjifjo9blng+nhyf13oGDASLBCJFQhB23ysIAAAacSURBVKZQ06jnHZGO/GuNoUYag4358M0/zy7nnjcGG/PLo9pkl8OBcP71cv4j6enpoXtZd9n2J3I8eBvoOUfJcz4464OcNe0svv7i17l4zsW0N7Yfv8JKMJQaYt/gPvoSfexL7OPg0EH6hzMBHRuOFX3eP9xPfDie/wxhPIbRHG6mJdRCc7iZ1nArLeEWOlo7aAm30BJuya/PPW8ONRMJZQI6EswGdvZ5JBRhw682cFn3ZfqQWaRKvA30wx+Kjp/oZsbdq+7mkz/+JHesv4N/uvifCAcqN/XinCOWjI0K6V/Hfs3WTVvpG+zLv9Y3mPkZT8bH3VdTqIm2hjaiDVHaGtqY0TyD+R3zM8uNbUTD0VHPWxpa8uHcEm6hKdRU9uANW1hhLlJF3gZ6Op0J9HDwyNMWC53TeQ53nH8HX3nuK9zyzC381QV/xYKTFpT8PiPpEQ4MHSgayPmfib7882Ifstk+o6Oxg2mRaXQ2dXJO5zlMa5pGZ6Qz/9pJkZPoaOygraGN1obWiv7iEZH65G2gJ9MpAEJjb7dYxB+d+Uc0hZr46vNf5aNPfJSzpp3FoumLOLn5ZMKBMA7HQHKAg0MH849ceO9P7C86vREKhEYF8vs73k9nU+eo1zojnWx/aTtXXXwVoYC3h0JEjhNvU2QklQnZhmBpUwAfOeMjXDT7Ih559RHWv7Wen735Mw4MHcivD1mItsY22hvbaW9o59ToqSw9eSmdTdmALgjqaZFptDW0lTT9sCe4R2EuImXhbZIMj2RH6BNMuRRqb2zn5sU3c/PimwFIppKZq9iAxmCj5odFpKZ5G+gj6cwFFQ3jXFhUinAwTBjNVYtIfSgp7czsCjPbbmY7zOz2IuvNzL6WXb/ZzM4rf6mTk5tyOdp56CIiPpkw7cwsCHwTuBI4G/iEmZ09ptmVwPzsYzXwL2Wuc9KSqcxUSUOo9CkXEZF6VsqUy0pgh3PudQAzewi4Ftha0OZa4EGXuTzzOTPrMLOZzrk95S54zY/u5P59j8EbR2+XwiBgNIa8nVUSERmllLSbBewqWO4Fzi+hzSxgVKCb2WoyI3iAuJltn1S1h00H3iul4bXcAtwyxbc5LkruSx1QX2qPL/0A9SXntPFWlBLoxU7tGHvidSltcM6tAdaU8J5HL8hso3Nu+bHupxaoL7XJl7740g9QX0pRyieGvcCcguXZwO4ptBERkQoqJdBfAOab2TwzawCuB54Y0+YJ4Mbs2S4XAAcrMX8uIiLjm3DKxTk3Yma3Ac8AQWCtc+4VM7s1u/4+4GngKmAHcAi4qXIlA2WYtqkh6ktt8qUvvvQD1JcJWe6+4SIiUt901Y2IiCcU6CIinqjpQK/HWw6Mp4S+dJvZQTPblH3cVY06J2Jma83sHTPbMs76ejomE/WlXo7JHDN71sy2mdkrZva/i7Spi+NSYl/q5bhEzGyDmb2c7cuXi7Qp73FxztXkg8wHsK8BpwMNwMvA2WPaXAX8hMx58BcAz1e77mPoSzfwVLVrLaEvFwHnAVvGWV8Xx6TEvtTLMZkJnJd9HgVereN/K6X0pV6OiwGt2edh4Hnggkoel1oeoedvOeCcGwZytxwolL/lgHPuOaDDzGYe70JLUEpf6oJzbh2w7yhN6uWYlNKXuuCc2+OcezH7PAZsI3OldqG6OC4l9qUuZP+sc98jGc4+xp6FUtbjUsuBPt7tBCbbphaUWuf/yP737Cdmds7xKa3s6uWYlKqujomZzQWWkhkNFqq743KUvkCdHBczC5rZJuAd4GfOuYoel1q+c1XZbjlQA0qp80XgNOdc3MyuAh4nc/fKelMvx6QUdXVMzKwVeBT4c+dc/9jVRTap2eMyQV/q5rg451LAB8ysA/ihmS1yzhV+ZlPW41LLI3SfbjkwYZ3Ouf7cf8+cc08DYTObfvxKLJt6OSYTqqdjYmZhMgH4XefcY0Wa1M1xmagv9XRccpxzB4Ae4Ioxq8p6XGo50H265cCEfTGzGWaZ77gzs5Vkjk3fca/02NXLMZlQvRyTbI33A9ucc/84TrO6OC6l9KWOjsv7siNzzKwJuAz43ZhmZT0uNTvl4mrzlgNTUmJfPgZ8xsxGgEHgepf9GLyWmNn3yZxlMN3MeoG7yXzYU1fHBErqS10cE+BC4I+B32bnawHuAE6FujsupfSlXo7LTOA7lvmSoADwb865pyqZYbr0X0TEE7U85SIiIpOgQBcR8YQCXUTEEwp0ERFPKNBFRDyhQBcR8YQCXUTEE/8fKhNdVA8PdMEAAAAASUVORK5CYII=\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "s = control.tf([1, 0], [0, 1])\n", - "# this is a PID controller with an extra pole at the origin\n", - "pitch_rate_control_design(500, -900*((s + 2 + 1j)*(s + 2 - 1j)/s**2), [-8, 2], [-4, 4])" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{'x0': array([200. , 0.273, 0.273, 0. , 0. , 0. ]), 'u0': array([ 0.233, -17.501, 0.25 , 0. ]), 's': array([ 0.233, -17.501, 0.273])}\n", - "1 states have been removed from the model\n", - "u_norm max 990.9811402666699\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "pitch_rate_control_design(200, -1000*((s+0.5)/s)**2, [-3, 1], [-2, 2])" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "def lqr_design(out_num, in_num, tf=3, R=1e-5, y_max=1.5):\n", - " trim_500 = trim(vt=500, h=0, q=0, gamma=0)\n", - " # input: thtl, elev, xcg, land\n", - " # state: vt, alpha, theta, q, h, pos\n", - " sys = control.minreal(linearize(trim_500)[out_num, in_num], 1e-3)\n", - " assert np.linalg.matrix_rank(control.ctrb(sys.A, sys.B)) == sys.A.shape[0]\n", - " assert np.linalg.matrix_rank(control.obsv(sys.A, sys.C)) == sys.A.shape[0]\n", - "\n", - " Q = sys.C.T.dot(sys.C)\n", - " K, S, E = control.lqr(sys, Q, R)\n", - " sys_c = control.ss( sys.A - sys.B*K, sys.B, sys.C, sys.D)\n", - " final_value = float(sys_c.horner(0))\n", - " N = 1.0/final_value\n", - " sys_c = control.ss( sys.A - sys.B*K, sys.B*N, sys.C, sys.D)\n", - "\n", - " t = np.linspace(0, tf, 1000)\n", - " r = np.array(t > 0.1, dtype=float)\n", - " t, y, x = control.forced_response(sys_c, T=np.linspace(0, tf, 1000), U=r)\n", - " u_norm = np.linalg.norm(K.dot(x), axis=0)\n", - " max_u_norm = np.max(u_norm)\n", - " print('u_norm max', max_u_norm)\n", - "\n", - " plt.plot(t, r, 'r--', label='r')\n", - " plt.plot(t, y, 'b-', label='y')\n", - " plt.plot(t, u_norm/max_u_norm, 'g-', label='u normalized')\n", - " plt.gca().set_ylim(-0.1, y_max)\n", - " plt.grid()\n", - " plt.legend()" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 states have been removed from the model\n", - "u_norm max 324.04247010257035\n" - ] - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "lqr_design(2, 1, tf=10, R=1e-5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we see that the LQR is not able to design a reasonable pitch rate controller." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1 states have been removed from the model\n", - "u_norm max 61120.83319605678\n" - ] - }, - { - "data": { - "image/png": "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g1xNygjdzKYCjwBXuHtlMpYpIqnz1Re/yru7knv+3OmjpvODOck569fOnTtZvnw569ev59Of/jTXXHMNzzzzDO+++y7vvfce+/btY8aMGVx88cUAvPXWW6xZs4aioiK2bt1KeXk5Tz31FIsWLWLGjBn86le/Yvny5Sxbtox///d/59lnn2Xy5Mm88sorZGdn88c//pFvfetbLF26tMOa3o2db/h3v/sd999/PxdeeCH33nsvl156KYsXL+bgwYPMnDmTT37ykzz66KMMHDiQ1atXs3r1as4555yk/F6OO9DN7GTgGeDz7r7x+EsSEencZz7zGbKyspgyZQq7d+8GYPny5cybN49QKERhYSGXXHIJK1asYOjQocycOZOioqLm5xcVFXHWWWcBUFJSwmWXXYaZcdZZZ7F161YADh06xI033simTZswM+rr67usa9OmTfzLv/wLf/7zn8nJyeEPf/gDy5Yt4/vf/z4Q3YSybds2XnvtNe68804Apk6dytSpU5Pye+ky0M3s10AZMNLMKoB7gRwAd18IfAcYATxk0evBNbh7aVKqE5GUSNZIujuys7NpbGxsnq6rq+tw3gEDBjTf99jFhZt+tmfQoEEdPj8rK6t5Oisri4aGBiB6BaXZs2fzm9/8hq1bt1JWVtZp/TU1NVx77bU8/PDDjBkzprmmpUuXcvrpp7eZ33rh+pmJ7OUyz91Hu3uOu49z90fdfWEszHH3W9x9uLtPj90U5iLSbYWFhezZs4fKykqOHj3Kc889163nX3zxxTz55JNEIhH27t3LK6+8wsyZM3tcz6FDhxg7diwAjz/+eJfz33TTTdx0001cdNFFzY9dfvnlPPjgg81/bFatWgXArFmzeOKJJwBYs2YNq1ev7nGd8XSkqIj0Czk5OXznO9/hvPPO46qrrmLy5Mndev7cuXOZOnUq06ZN49JLL+X+++9n1KhRPa7nG9/4Bt/85jeZNWsWkUik03k//PBDnn76aRYvXsz06dOZPn06K1eu5J577qG+vp6pU6dy5plncs899wDRy+1VV1czdepU7r///uP6w9NCR9+W9vZNe7l0j/b4yAyZvJdLJkm0z93dy0UjdBGRNBHoQO/kOxARkYwT6EAXkeRyjZL6jZ68F4EP9F7Y80ckI+Xl5VFZWalQ7wfcncrKSvLy8rr1PF2xSEQAGDduHBUVFezd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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "lqr_design(3, 1, tf=10, R=1e-5, y_max=1.5)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we see the LQR is doing a poor job of designing a pitch rate controller. This is likely because none of the\n", - "states provide derivative of the pitch rate signal to prevent overshoot." - ] - } - ], - "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.7.3" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/lectures/4-Rocket.ipynb b/lectures/4-Rocket.ipynb new file mode 100644 index 00000000..d185419c --- /dev/null +++ b/lectures/4-Rocket.ipynb @@ -0,0 +1,74 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import casadi as ca\n", + "import numpy as np" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "CL0 = 0.0\n", + "CLa = 2*np.pi\n", + "rho = 1.225\n", + "kclcd = 0.01\n", + "CD0 = 0.0\n", + "sf = 0.1 # area of fin\n", + "r = 0.1 # radius of body\n", + "sb = np.pi*r**2\n", + "lf = 1.0 # distance from cg to fin\n", + "\n", + "df = ca.SX.sym('df')\n", + "v = ca.SX.sym('v')\n", + "q = 0.5*rho*v**2\n", + "CL = CL0 + CLa*df\n", + "CD = CD0 + kclcd*CL**2\n", + "\n", + "Lf = CD*q*sf\n", + "Df = CD*q*sf\n", + "\n", + "CDb = 0.01\n", + "Db = CDb*q*sb\n", + "\n", + "\n", + "m_aero = lf*Lf" + ] + }, + { + "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.7.3" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/lectures/tilt_rotor.png b/lectures/tilt_rotor.png new file mode 100644 index 00000000..c5b48185 Binary files /dev/null and b/lectures/tilt_rotor.png differ diff --git a/ros/src/f16/models/rocket/rocket.sdf b/ros/src/f16/models/rocket/rocket.sdf index 9c7c443c..5e08be28 100644 --- a/ros/src/f16/models/rocket/rocket.sdf +++ b/ros/src/f16/models/rocket/rocket.sdf @@ -4,7 +4,13 @@ - 0 0 0 0 0 0 + 0 0 1.5 0 0 0 + 0.15 + + 1.0 + 1.0 + 1.0 + @@ -28,7 +34,34 @@ + + 0.0 + 0.0 + 0.6417112299 + 0.0 + 0.3391428111 + -3.85 + -0.9233984055 + 0 + 0 0 1.5 + 0.03 + 1.2041 + 0 0 1 + 0 1 0 + body + + + + 0 0 2.9 0 0 0 + 0.01 + + 0.01 + 0.01 + 0.01 + + + 0 @@ -45,11 +78,21 @@ + 0 0 2.8 0 0 0 nose_cone body + + 0.2 0 0.2 0 0 0 + 0.01 + + 0.01 + 0.01 + 0.01 + + 0 @@ -68,18 +111,46 @@ fin1 body - 0 0 0 0 0 0 + 0 0 0.2 0 0 0 - 0 1 0 + 1 0 0 - -1 - 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + 0 0 0 0 0 1.57 + + 0.2 0 0.2 0 0 0 + 0.01 + + 0.01 + 0.01 + 0.01 + + 0 @@ -98,18 +169,46 @@ fin2 body - 0 0 0 0 0 0 + 0 0 0.2 0 0 0 1 0 0 - -1 - 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + 0 0 0 0 0 3.14 + + 0.2 0 0.2 0 0 0 + 0.01 + + 0.01 + 0.01 + 0.01 + + 0 @@ -128,18 +227,46 @@ fin3 body - 0 0 0 0 0 0 + 0 0 0.2 0 0 0 1 0 0 - -1 - 1 + 0 + 0 + + + + + + + + + + + + + + + + + + + 0 0 0 0 0 -1.57 + + 0.2 0 0.2 0 0 0 + 0.01 + + 0.01 + 0.01 + 0.01 + + 0 @@ -158,23 +285,65 @@ fin4 body - 0 0 0 0 0 0 + 0 0 0.2 0 0 0 1 0 0 - -1 - 1 + 0 + 0 - - body - fin1 - fin2 - fin3 - fin4 - + + + + + + + + + + + + + + + + + + + + + 0 0 0 0 0 0 + + 0.8 + + + 0 + + + 0.05 + 0.3 + + + + + + + + + + 0 0 0 0 0 0 + rocket_motor + body + + + + rocket_motor + diff --git a/ros/src/f16/scripts/rocket_controller.py b/ros/src/f16/scripts/rocket_controller.py new file mode 100755 index 00000000..2a920b35 --- /dev/null +++ b/ros/src/f16/scripts/rocket_controller.py @@ -0,0 +1,112 @@ +#!/usr/bin/env python + +import rospy +from geometry_msgs.msg import Wrench +from nav_msgs.msg import Odometry +from sensor_msgs.msg import LaserScan +import numpy as np +import tf +import nav_msgs.msg + + +class RocketController: + + + def __init__(self): + rospy.init_node('rocket_controller') + self.time_last_plan = rospy.Time.now() + self.pub_rear_left = rospy.Publisher('/rocket/force_rear_left', Wrench, queue_size=10) + self.pub_rear_right = rospy.Publisher('/rocket/force_rear_right', Wrench, queue_size=10) + self.pub_front_left = rospy.Publisher('/rocket/force_front_left', Wrench, queue_size=10) + self.pub_front_right = rospy.Publisher('/rocket/force_front_right', Wrench, queue_size=10) + self.sub_ground_truth = rospy.Subscriber('/rocket/ground_truth', Odometry, + self.control_callback) + + def control_callback(self, odom): + # position + position = odom.pose.pose.position + + # orientation + orientation = odom.pose.pose.orientation + euler = tf.transformations.euler_from_quaternion( + (orientation.x, orientation.y, orientation.z, orientation.w)) + yaw = euler[2] + + # rotation rate + rates = odom.twist.twist.angular + vel = odom.twist.twist.linear + yaw_rate = rates.z + + # publish fram for transform tree + br = tf.TransformBroadcaster() + br.sendTransform( + (position.x, position.y, position.z), + (orientation.x, orientation.y, orientation.z, orientation.w) , + rospy.Time.now(), + "base_link", + "map") + + #rospy.loginfo('position %f %f %f, m', position.x, position.y, position.z) + #rospy.loginfo('yaw %f, deg', np.rad2deg(yaw)) + #rospy.loginfo('yaw rate %f, deg/s', np.rad2deg(yaw_rate)) + + drive_torque = 0.1 + desired_yaw = np.deg2rad(90) + + # steering PD controller + steer_kP = 1 + steer_kD = 1 + yaw_error = desired_yaw - yaw + #rospy.loginfo("yaw error %f deg", np.rad2deg(yaw_error)) + yaw_rate_error = 0 - yaw_rate + steer_torque = steer_kP*yaw_error + steer_kD*yaw_rate_error + + # speed P controller + speed_kP = 1 + speed = np.sqrt(vel.x**2 + vel.y**2) + desired_speed = 0.1 + speed_error = desired_speed - speed + drive_torque = speed_kP*speed_error + #rospy.loginfo("speed error %f m/s", speed_error) + + # saturate torques + if np.abs(steer_torque) > 0.1: + steer_torque /= np.abs(steer_torque) + if np.abs(drive_torque) > 0.1: + drive_torque /= np.abs(drive_torque) + + # rear drive + msg = Wrench() + msg.force.x = 0 + msg.force.y = 0 + msg.force.z = 0 + msg.torque.x = -drive_torque + msg.torque.y = 0 + msg.torque.z = 0 + self.pub_rear_left.publish(msg) + self.pub_rear_right.publish(msg) + + # front left steering + msg = Wrench() + msg.force.x = 0 + msg.force.y = 0 + msg.force.z = 0 + msg.torque.x = 0 + msg.torque.y = 0 + msg.torque.z = steer_torque + self.pub_front_left.publish(msg) + + # front right steering + msg = Wrench() + msg.force.x = 0 + msg.force.y = 0 + msg.force.z = 0 + msg.torque.x = 0 + msg.torque.y = 0 + msg.torque.z = steer_torque + self.pub_front_right.publish(msg) + + +if __name__ == "__main__": + CarController() + rospy.spin() diff --git a/ros/src/f16/src/RocketPlugin/RocketPlugin.cc b/ros/src/f16/src/RocketPlugin/RocketPlugin.cc index 87359d6a..8e7bff9f 100644 --- a/ros/src/f16/src/RocketPlugin/RocketPlugin.cc +++ b/ros/src/f16/src/RocketPlugin/RocketPlugin.cc @@ -33,17 +33,6 @@ GZ_REGISTER_MODEL_PLUGIN(RocketPlugin) //////////////////////////////////////////////////////////////////////////////// RocketPlugin::RocketPlugin() { - this->cmds.fill(0.0f); - - // PID default parameters. - this->propellerPID.Init(50.0, 0.1, 1, 0.0, 0.0, 20000.0, -20000.0); - this->propellerPID.SetCmd(0.0); - - for (auto &pid : this->controlSurfacesPID) - { - pid.Init(50.0, 0.1, 1, 0.0, 0.0, 20.0, -20.0); - pid.SetCmd(0.0); - } } ///////////////////////////////////////////////// @@ -103,77 +92,19 @@ void RocketPlugin::Load(physics::ModelPtr _model, sdf::ElementPtr _sdf) GZ_ASSERT(_sdf, "RocketPlugin _sdf pointer is NULL"); this->model = _model; - // Read the required parameter for the propeller max RPMs. - //if (!_sdf->HasElement("propeller_max_rpm")) - //{ - //gzerr << "Unable to find the parameter." << std::endl; - //return; - //} - //this->propellerMaxRpm = _sdf->Get("propeller_max_rpm"); - //if (this->propellerMaxRpm == 0) - //{ - //gzerr << "Maximum propeller RPMs cannot be 0" << std::endl; - //return; - //} - - // Read the required joint name parameters. - std::vector requiredParams = {"fin1", "fin2", "fin3", "fin4"}; - - for (size_t i = 0; i < requiredParams.size(); ++i) - { - if (!this->FindJoint(requiredParams[i], _sdf, this->joints[i])) - return; - } - - // Find body link to apply propulsion forces - if (!this->FindLink("body", _sdf, this->body)) { - return; - } - - // Overload the PID parameters if they are available. - if (_sdf->HasElement("propeller_p_gain")) - this->propellerPID.SetPGain(_sdf->Get("propeller_p_gain")); - - if (_sdf->HasElement("propeller_i_gain")) - this->propellerPID.SetIGain(_sdf->Get("propeller_i_gain")); - - if (_sdf->HasElement("propeller_d_gain")) - this->propellerPID.SetDGain(_sdf->Get("propeller_d_gain")); - - if (_sdf->HasElement("surfaces_p_gain")) - { - for (auto &pid : this->controlSurfacesPID) - pid.SetPGain(_sdf->Get("surfaces_p_gain")); - } - - if (_sdf->HasElement("surfaces_i_gain")) - { - for (auto &pid : this->controlSurfacesPID) - pid.SetIGain(_sdf->Get("surfaces_i_gain")); - } - - if (_sdf->HasElement("surfaces_d_gain")) - { - for (auto &pid : this->controlSurfacesPID) - pid.SetDGain(_sdf->Get("surfaces_d_gain")); + // Find motor link to apply propulsion forces + if (!this->FindLink("motor", _sdf, this->motor)) { + GZ_ASSERT(false, "RocketPlugin failed to find motor"); } - // Controller time control. - this->lastControllerUpdateTime = this->model->GetWorld()->SimTime(); + // Update time. + this->lastUpdateTime = this->model->GetWorld()->SimTime(); // Listen to the update event. This event is broadcast every simulation // iteration. this->updateConnection = event::Events::ConnectWorldUpdateBegin( std::bind(&RocketPlugin::Update, this, std::placeholders::_1)); - // Initialize transport. - this->node = transport::NodePtr(new transport::Node()); - this->node->Init(); - std::string prefix = "~/" + this->model->GetName() + "/"; - this->statePub = this->node->Advertise(prefix + "state"); - this->controlSub = this->node->Subscribe(prefix + "control", - &RocketPlugin::OnControl, this); - gzlog << "Rocket ready to fly. The force will be with you" << std::endl; } @@ -184,81 +115,28 @@ void RocketPlugin::Update(const common::UpdateInfo &/*_info*/) gazebo::common::Time curTime = this->model->GetWorld()->SimTime(); - if (curTime > this->lastControllerUpdateTime) + if (curTime > this->lastUpdateTime) { - // Update the control surfaces and publish the new state. - double dt = (curTime - this->lastControllerUpdateTime).Double(); - this->UpdatePIDs(dt); + double dt = (curTime - this->lastUpdateTime).Double(); - auto inertial = this->body->GetInertial(); + auto inertial = this->motor->GetInertial(); float m = inertial->Mass(); float m_dot = 0.1; - float m_empty = 0.2; + float m_empty = 0.0; m = m - m_dot*dt; + float P0 = 101325.0; // freestream pressure + float Pe = 1.0*P0; // disable effect for now if (m < m_empty) { m = m_empty; m_dot = 0; + Pe = P0; } - float ve = 2000; - this->body->AddRelativeForce(ignition::math::Vector3d(0, 0, m_dot*ve)); + float r = 0.1; // nozzle radius + float A = M_PI*r*r; // nozzle exit area + float ve = 320; // exit velocity, m/s, guess + this->motor->AddRelativeForce(ignition::math::Vector3d(0, 0, m_dot*ve + A*(Pe - P0))); inertial->SetMass(m); - inertial->SetInertiaMatrix(m, m, m, 0, 0, 0); - this->PublishState(); - this->lastControllerUpdateTime = curTime; + inertial->SetInertiaMatrix(0, 0, 0, 0, 0, 0); // treat as point mass + this->lastUpdateTime = curTime; } - - -} - -///////////////////////////////////////////////// -void RocketPlugin::OnControl(ConstRocketPtr &_msg) -{ - std::lock_guard lock(this->mutex); - - if (_msg->has_cmd_fin1()) - this->cmds[kFin1] = _msg->cmd_fin1(); - if (_msg->has_cmd_fin2()) - this->cmds[kFin2] = _msg->cmd_fin2(); - if (_msg->has_cmd_fin3()) - this->cmds[kFin3] = _msg->cmd_fin3(); - if (_msg->has_cmd_fin4()) - this->cmds[kFin4] = _msg->cmd_fin4(); -} - -///////////////////////////////////////////////// -void RocketPlugin::UpdatePIDs(double _dt) -{ - // Position PID for the control surfaces. - for (size_t i = 0; i < this->controlSurfacesPID.size(); ++i) - { - double pos = this->joints[i]->Position(0); - double error = pos - this->cmds[i]; - double force = this->controlSurfacesPID[i].Update(error, _dt); - this->joints[i]->SetForce(0, force); - } -} - -///////////////////////////////////////////////// -void RocketPlugin::PublishState() -{ - // Read the current state. - float fin1 = this->joints[kFin1]->Position(0); - float fin2 = this->joints[kFin2]->Position(0); - float fin3 = this->joints[kFin3]->Position(0); - float fin4 = this->joints[kFin4]->Position(0); - - msgs::Rocket msg; - // Set the observed state. - msg.set_fin1(fin1); - msg.set_fin2(fin2); - msg.set_fin3(fin3); - msg.set_fin4(fin4); - - // Set the target state. - msg.set_cmd_fin1(this->cmds[kFin1]); - msg.set_cmd_fin2(this->cmds[kFin2]); - msg.set_cmd_fin3(this->cmds[kFin3]); - msg.set_cmd_fin4(this->cmds[kFin4]); - - this->statePub->Publish(msg); } diff --git a/ros/src/f16/src/RocketPlugin/RocketPlugin.hh b/ros/src/f16/src/RocketPlugin/RocketPlugin.hh index 0e63a6ba..2070e5db 100644 --- a/ros/src/f16/src/RocketPlugin/RocketPlugin.hh +++ b/ros/src/f16/src/RocketPlugin/RocketPlugin.hh @@ -99,59 +99,20 @@ namespace gazebo /// \param[in] _info Update information provided by the server. private: void Update(const common::UpdateInfo &_info); - /// \brief Callback executed when a new message containing control commands - /// is received. - /// \param[in] _msg New message containing control commands. - private: void OnControl(ConstRocketPtr &_msg); - - /// \brief Update PID Joint controllers. - /// \param[in] _dt time step size since last update. - private: void UpdatePIDs(double _dt); - - /// \brief Publish Rocket state. - private: void PublishState(); - - /// \brief Joint indexes. - private: static const unsigned int kFin1 = 0; - private: static const unsigned int kFin2 = 1; - private: static const unsigned int kFin3 = 2; - private: static const unsigned int kFin4 = 3; - /// \brief Pointer to the update event connection. private: event::ConnectionPtr updateConnection; /// \brief Node used for using Gazebo communications. private: transport::NodePtr node; - /// \brief Subscriber pointer. - private: transport::SubscriberPtr controlSub; - - /// \brief Publisher pointer. - private: transport::PublisherPtr statePub; - /// \brief Pointer to the model; private: physics::ModelPtr model; - /// \brief Control surfaces joints. - private: std::array joints; - - /// \brief Body Link - private: physics::LinkPtr body; - - /// \brief Max propeller RPM. - private: int32_t propellerMaxRpm = 2500; - - /// \brief Next command to be applied to the propeller and control surfaces. - private: std::array cmds; - - /// \brief Velocity PID for the propeller. - private: common::PID propellerPID; - - /// \brief Position PID for the control surfaces. - private: std::array controlSurfacesPID; + /// \brief Motor Link + private: physics::LinkPtr motor; /// \brief keep track of controller update sim-time. - private: gazebo::common::Time lastControllerUpdateTime; + private: gazebo::common::Time lastUpdateTime; /// \brief Controller update mutex. private: std::mutex mutex; diff --git a/ros/src/f16/worlds/rocket.world b/ros/src/f16/worlds/rocket.world index 69d84bd0..692e5c5f 100644 --- a/ros/src/f16/worlds/rocket.world +++ b/ros/src/f16/worlds/rocket.world @@ -9,39 +9,66 @@ - - 29.4047089 - -82.1745834 - 100 - + + 29.4047089 + -82.1745834 + 100 + model://sun - - 0 0 1 0 1.0 0 - model://rocket - + + 0 0 1 0 0 0 + model://rocket + - - - model://f16_mountains - + + model://radio_tower + 10 10 0 0 0 0 + - - model://powerplant - -110 98 0 0 0 0 - - - model://school - 631 467 0 0 0 0 - - - model://radio_tower - 736 114 0 0 -0 0 - + + true + + + + + 0 0 1 + 10000 10000 + + + + + + 1 + 1 + + + + + + + 0 0 -0.1 0 0 0 + false + + + 0 0 1 + 10000 10000 + + + + + + + + + @@ -62,20 +89,22 @@ 1 250 - - - - 30 10 10 0 0 0 - orbit - perspective - - rocket - 1 - 1 - 100 - - - + + + + 30 10 10 0 0 0 + orbit + perspective + + rocket + 1 + 1 + 100 + + + + +