{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linearisation Theory\n", "\n", "Linearisation or *small disturbance* theory is the process via which the equations of motion shall be _simplified_ and how the aircraft dynamic behaviour may be analysed. \n", "\n", "The basic assumptions are that aircraft motion comprises *small disturbances* from a *trim/equilibrium* state. This is a valid assumption for most flight conditions, but care must be taken when exploring high manoeuvre flight as such analyses require solution of the full nonlinear equations of motion (via numerical solution).\n", "\n", "It is assumed that at any given time, the instantaneous value of the aircraft state and control variables[^2] may be represented by the trim value (denoted by a subscript $_0$) and this small disturbance (either lowercase, or with $^\\prime$ in some cases, or a $\\Delta$ in other cases):\n", "\n", "[^2]: Control variables $\\delta_e,\\delta_a, \\delta_r$\n", "\n", "{admonition} Nomenclature, again\n", ":class: dropdown\n", "As in Flight Mechanics, Flight Dynamics is a bit of a mish-mash of nomenclature depending whose book you happen to be reading. Some texts use a subscript 'e' for _equilibrium_, but this is ambiguous as it also could be quantities in earth axes. Some texts us a subscript '1', which is a bit strange since it just skips over '0' (_i.e.,_ trim is time zero, surely?).\n", "\n", "The lesson here is to be careful and to ensure you understand what you're reading.\n", "\n", "\n", "**Rates:**\n", "\n", "\\begin{aligned}\n", " U &= U_0 + u\\\\\n", " V &= V_0 + v\\\\\n", " W &= W_0 + w\\\\\n", " P &= P_0 + p\\\\\n", " Q &= Q_0 + q\\\\\n", " R &= R_0 + r\n", "\\end{aligned}\n", "\n", "**Attitudes**\n", "\n", "\\begin{aligned}\n", " \\phi &= \\phi_0 + \\phi^\\prime\\\\\n", " \\theta &= \\theta_0 + \\theta^\\prime\\\\\n", " \\psi &= \\psi_0 + \\psi^\\prime\n", "\\end{aligned}\n", "\n", "**Forces and Moments**\n", "\n", "\\begin{aligned}\n", " X &= X_0 + \\Delta X\\\\\n", " Y &= Y_0 + \\Delta Y\\\\\n", " Z &= Z_0 + \\Delta Z\\\\\n", " L &= L_0 + \\Delta L\\\\\n", " M &= M_0 + \\Delta M\\\\\n", " N &= N_0 + \\Delta M\n", "\\end{aligned}\n", "\n", "**Control Settings:**\n", "\n", "\\begin{aligned}\n", " \\delta_a &= \\delta_{a_0} + \\delta_a^\\prime\\\\\n", " \\delta_e &= \\delta_{e_0} + \\delta_e^\\prime\\\\\n", " \\delta_r &= \\delta_{e_0} + \\delta_r^\\prime\\label{eq:smallP2} \\end{aligned}\n", " \n", "Note that the nomenclature between each is inconsistent, annoyingly. Furthermore, the Roman and Greek letters are difficult to write freehand as uppercase and lowercase letters - hence the subscript $_0$ is integral to distinguishing the trim and perturbation.\n", "\n", "We make some inferences and assumptions about our reference trim state\n", "\n", "## Trim State Assumptions\n", "\n", "- There are no resultant accelerations on the aircraft (equilibrium state): \n", "\n", "$$\\dot{U}_0 = \\dot{V}_0 = \\dot{W}_0 = \\dot{P}_0 = \\dot{Q}_0 = \\dot{R}_0 = 0$$\n", "\n", "- There is no angular velocity \n", "\n", "$${P}_0 = {Q}_0 = {R}_0 = 0$$\n", "\n", "- Wings level flight \n", "\n", "$$\\phi_0=0$$\n", "\n", "- Symmetric/co-ordinated flight, forces represented in *stability axes* \n", "\n", "$$V_0 = W_0 = 0$$\n", "\n", " \n", "## Linearisation Procedure\n", "\n", "The following steps will be taken to linearise the equations of motion:\n", "\n", "1. Replace each state variable with the sum of the equilibrium and small perturbation term\n", "2. Apply the trim state assumptions from above\n", "3. Assume all perturbations are small and apply small angle assumptions\n", "4. Eliminate all products and powers of perturbations _i.e.,_ if $a,b<1$, then $ab\\ll 1\\implies ab\\simeq0$\n", "5. Evaluate the equation at the trim state, and create an expression to substitute into the linearised expression\n", "\n", "This is best highlighted with an example. Taking the first of the translational equations of motion:\n", "\n", "$$m\\left(\\dot{U} + Q\\,W - W\\,R\\right)=-mg\\sin\\theta - D\\cos\\alpha + L\\sin\\alpha + T\\cos\\theta_T$$\n", "\n", "since for stability and control purposes, _stability axes_ are used, the trim angle of attack is zero and the nonservative forces on the RHS can be lumped into a single $X$ (which will later be separated into aero and propulsive terms):\n", "\n", "$$m\\left(\\dot{U} + Q\\,W - W\\,R\\right)=X-mg\\sin\\theta$$(eq:nonlin1trim)\n", "\n", "which immediately makes the equation less brutal looking. \n", "\n", "**Step 1:** Replace each of the state variables with the equilibrium and small perturbation:\n", "\n", "$$m\\left[\\left(\\dot{U}_0+\\dot{u}\\right) +\\left(Q_0+q\\right)\\left(W_0+w\\right)-\\left(R_0+r\\right)\\left(V_0+v\\right)\\right] = \\left(X_0+\\Delta X\\right) -mg\\sin\\left(\\theta_0+\\theta^\\prime\\right)$$\n", "\n", "**Step 2:** Apply the zero trim values from our assumptions above, and expand the trig term:\n", "\n", " $$m\\left[\\dot{u}+qw-rv\\right] =\\left(X_0+\\Delta X\\right) - mg\\left(\\sin\\theta_0\\cos\\theta^\\prime + \\cos\\theta_0\\sin\\theta^\\prime\\right)$$\n", " \n", "**Step 3:** Assume the perturbations are _small_, which for this equation allows simplification of the terms containing attitude perturbations ($\\theta$)\n", "\n", "$$m\\left[\\dot{u}+qw-rv\\right]=\\left(X_0+\\Delta X\\right) - mg\\left(\\sin\\theta_0 + \\theta^\\prime\\cos\\theta_0\\right)$$\n", "\n", "**Step 4:** Eliminate products of perturbation - so if $a,b<1$, $ab\\ll 1$, and $\\dot{u}\\gg\\left(qw-vr\\right)$:\n", "\n", "$$m\\dot{u} = \\left(X_0+\\Delta X\\right) - mg\\left(\\sin\\theta_0 + \\theta^\\prime\\cos\\theta_0\\right)$$(eq:step4)\n", "\n", "**Step 5:** Evaluate the nonlinear equation of motion (Eq. {eq}eq:nonlin1trim) at the trim state, subject to assumptions:\n", "\n", "$$0 = X_0 - mg\\sin\\theta_0$$(eq:trimstate1)\n", "\n", "Hence substitution of Eq. {eq}eq:trimstate1 into Eq. {eq}eq:step4 yields\n", "\n", "$$m\\dot{u} = \\Delta X - mg\\theta^\\prime\\cos\\theta_0$$(eq:lineq1)\n", "\n", "Expression {eq}eq:lineq1 is the nonlinear equation for fore/aft motion. The other expressions may be manipulated similarly to give:\n", "\n", "$$m\\dot{v} = \\Delta Y - mU_0r + mg\\phi^\\prime\\cos\\theta_0$$(eq:lineq2)\n", "$$m\\dot{w} = \\Delta Z + mU_0q - mg\\theta^\\prime\\sin\\theta_0$$(eq:lineq3)\n", "$$I_{xx}\\dot{p} - I_{xz}\\dot{r} = \\Delta L$$(eq:lineq4)\n", "$$I_{qq}\\dot{q}= \\Delta M$$(eq:lineq5)\n", "$$I_{zz}\\dot{r} - I_{xz}\\dot{p} = \\Delta N$$(eq:lineq6)\n", "\n", "You should be able to derive expressions {eq}eq:lineq1 through {eq}eq:lineq6, starting from the equations of motion (which, of course, you should also be able to derive).\n", "\n", "Recall the relationship between Euler rates and body rates: \n", "\n", "\\begin{aligned}\n", " \\begin{bmatrix} P\\\\Q\\\\R\\end{bmatrix} &= \\begin{bmatrix}\n", " 1 & 0 & -\\sin\\theta\\\\\n", " 0 & \\cos\\phi & \\sin\\phi\\cos\\theta\\\\\n", " 0 & -\\sin\\phi & \\cos\\phi\\cos\\theta\n", " \\end{bmatrix}\\begin{bmatrix} \\dot{\\phi}\\\\\\dot{\\theta}\\\\\\dot{\\psi}\\end{bmatrix}\\end{aligned}\n", "\n", "Taking the first expression: \n", "\n", "\\begin{aligned}\n", " P &= \\dot{\\phi} - \\dot{\\Psi}\\sin\\theta\n", "\\end{aligned}(eq:nonlinearP)\n", "\n", "Replacing all terms with trim + perturbation\n", "\n", "\\begin{aligned}\n", " \\left(P_e + p\\right) &= \\left(\\dot{\\phi}_0 + \\dot{\\phi}^\\prime\\right) - \\left(\\dot{\\psi}_0 + \\dot\\psi^\\prime\\right)\\sin\\left(\\theta_0 + \\theta^\\prime\\right)\\end{aligned}\n", " \n", "No angular velocity in trim, and expansion of trig term:\n", "\n", "\\begin{aligned}\n", " p &= \\dot{\\phi}^\\prime - \\dot{\\psi}^\\prime\\left(\\sin\\theta_0\\cos\\theta^\\prime+\\cos\\theta_0\\sin\\theta^\\prime\\right)\n", "\\end{aligned}\n", "\n", "Apply small angle assumption:\n", "\n", "\\begin{aligned}\n", " p &= \\dot{\\phi}^\\prime - \\dot{\\psi}^\\prime\\left(\\sin\\theta_0+\\theta^\\prime\\cos\\theta_0\\right)\\end{aligned}\n", " \n", "finally, applying products and power of small terms, the linearised version of equation {eq}eq:nonlinearP is produced, and the remaining terms for $q$ and $r$ are also included below (which you should be able to derive):\n", "\n", "$$p = \\dot{\\phi}^\\prime-\\dot{\\psi}^\\prime\\sin\\theta_0$$\n", "$$q = \\dot{\\theta}^\\prime$$(eq:pitchratekinematic)\n", "$$r = \\dot{\\psi}^\\prime\\cos\\theta_0$$\n", "\n", "The remaining task is to obtain linearised expressions for the external forces and moments, $X,Y,Z,L,M,N$, which will be dealt with the following section. \n", "\n", "First we will go over a brief example:\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Linearisation Example\n", "\n", " {admonition} Linearisation Example:\n", "\n", "A fighter aircraft has an ECM pod attached to each wing tip. It is proposed to examine the effect of a rapid yawing motion, due to a sudden rudder input, on a particular sensor in the pod. The pod is located at position $S$, at a distance $l$ behind the centre of gravity, $G$, and a distance $B$ from the aircraft's centreline. Firstly, using the theory from the preceding section, show that the absolute acceleration at the sensor during pure yaw motion is given by:\n", "\n", "$$\\def\\ii{\\hat{\\imath}}\\def\\jj{\\hat{\\jmath}}\\def\\kk{\\hat{k}}$$\n", "\\begin{align}\n", "\t\tA_S &= A_{S_x}\\ii_b + A_{S_y}\\jj_b + A_{S_z}\\kk_b\n", "\\end{align}\n", "\n", "where\n", "\n", "\\begin{align}\n", "\t\tA_{S_x} &= \\dot{U} - VR - b\\dot{R} + l R^2\\\\\n", "\t\tA_{S_y} &= \\dot{V} + UR - l\\dot{R} - b R^2\\\\\n", "\t\tA_{S_z} &= \\dot{W}\n", "\t\\end{align}\n", "\t\n", "**Using the small perturbation theory described in the preceding section, and stating all assumptions made, develop linearised expressions for the three component accelerations.**\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "tags": [ "remove-input", "remove-output" ] }, "source": [ "\n", " {admonition} Linearisation Solution:\n", ":class: dropdown\n", "\n", "Taking the expression for the $X$ component acceleration:\n", "\n", "\n", "\\begin{align}\n", "\tA_{S_x} &= \\dot{U} - VR - b\\dot{R} + l R^2 \n", "\\end{align}\n", "\n", "\n", "we replace each variable with the trim + perturbation value\n", "\n", "\n", "\\begin{align}\n", "\tA_{S_{x_e}} &= \t\\dot{U}_e + \\dot{u} - \\left(V_e + v\\right)\\left(R_e+r\\right)-b\\left(\\dot{R}_e+\\dot{r}\\right)+l\\left(R_e+r\\right)^2\n", " \\end{align}\n", "\n", "\n", "In trim, accelerations, angular velocities, and sideslip is zero:\n", "\n", "\n", "\\begin{align}\n", "\tA_{S_{x_e}} + a_{s_x} &= \\dot{U}_e = R_e = \\dot{R}_e = 0 \\\\\n", "\t\\implies a_{s_x} &= \\dot{u}-vr-b\\dot{r}+lr^2\n", " \\end{align}\n", "\n", "\n", "we ignore products and power of perturbations\n", "\n", "\n", "\\begin{align}\n", "\ta_{s_x} &= \\dot{u}-b\\dot{r}\n", " \\end{align}\n", "\n", "\n", "Similarly in the y-direction:\n", "\n", "\n", "\\begin{align}\n", "\tA_{s_{y_e}} + a_{s_y} &= \\left(\\dot{V}_e+\\dot{v}\\right) + \\left(U_e + u\\right)\\left(R_e+r\\right) - l\\left(\\dot{R}_e+\\dot{r}\\right) - b\\left(R_e + r\\right)^2\n", " \\end{align}\n", "\n", "\n", "again, we may neglect terms that we know are zero\n", "\n", "\n", "\\begin{align}\n", "\ta_{s_y} &= \\left(\\dot{v}\\right) + \\left(U_e + u\\right)\\left(+r\\right) - l\\left(\\dot{r}\\right) - b\\left(r\\right)^2\\\\\t\n", "\ta_{s_y} &= \\dot{v} + r\\left(U_e + u\\right) - l\\dot{r} - br^2\n", " \\end{align}\n", "\n", "\n", "ignoring products and power of small perturbations\n", "\n", "\n", "\\begin{align}\n", "\ta_{s_y} &= \\dot{v}+r U_e - l\\dot{r}\n", "\\end{align}\n", "\n", "\n", "the z direction is simple\n", "\n", "\n", "\\begin{align}\n", "\tA_{s_z} &= \\dot{W}\\\\\n", "\ta_{s_z} &= \\dot{w}\\\\\n", "\ta_{s_z} &= \\dot{w}\t\n", "\\end{align}\n", "\n", "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "celltoolbar": "Tags", "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }