diff --git a/docs/examples/3_DOF_TRIAL.ipynb b/docs/examples/3_DOF_TRIAL.ipynb new file mode 100644 index 000000000..39636df56 --- /dev/null +++ b/docs/examples/3_DOF_TRIAL.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# 3 DOF Rocket Flight Simulation using RocketPy\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from scipy.signal import savgol_filter\n", + "from rocketpy.rocket.rocket import BaseRocket\n", + "from rocketpy.rocket.rocket import PointMassRocket\n", + "from rocketpy.motors.PointMassMotor import PointMassMotor\n", + "from rocketpy import Flight, Environment, Function\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Gravity Details\n", + "\n", + "Acceleration of gravity at surface level: 9.8100 m/s²\n", + "Acceleration of gravity at 1.000 km (ASL): 9.8100 m/s²\n", + "\n", + "\n", + "Launch Site Details\n", + "\n", + "Launch Date: 2020-02-22 13:00:00 UTC\n", + "Launch Site Latitude: 47.21348°\n", + "Launch Site Longitude: 9.00334°\n", + "Reference Datum: SIRGAS2000\n", + "Launch Site UTM coordinates: 500252.61 E 5228887.37 N\n", + "Launch Site UTM zone: 32T\n", + "Launch Site Surface Elevation: 407.0 m\n", + "\n", + "\n", + "Atmospheric Model Details\n", + "\n", + "Atmospheric Model Type: Reanalysis\n", + "Reanalysis Maximum Height: 1.000 km\n", + "Reanalysis Time Period: from 2020-02-22 00:00:00 to 2020-02-22 18:00:00 utc\n", + "Reanalysis Hour Interval: 4 hrs\n", + "Reanalysis Latitude Range: From 48.0° to 46.0°\n", + "Reanalysis Longitude Range: From 8.0° to 10.0°\n", + "\n", + "Surface Atmospheric Conditions\n", + "\n", + "Surface Wind Speed: 1.26 m/s\n", + "Surface Wind Direction: 213.21°\n", + "Surface Wind Heading: 33.21°\n", + "Surface Pressure: 980.43 hPa\n", + "Surface Temperature: 286.63 K\n", + "Surface Air Density: 1.192 kg/m³\n", + "Surface Speed of Sound: 339.39 m/s\n", + "\n", + "\n", + "Earth Model Details\n", + "\n", + "Earth Radius at Launch site: 6366.66 km\n", + "Semi-major Axis: 6378.14 km\n", + "Semi-minor Axis: 6356.75 km\n", + "Flattening: 0.0034\n", + "\n", + "\n", + "Atmospheric Model Plots\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define Environment\n", + "# Environment conditions\n", + "env = Environment(\n", + " gravity=9.81,\n", + " latitude=47.213476,\n", + " longitude=9.003336,\n", + " date=(2020, 2, 22, 13),\n", + " elevation=407,\n", + ")\n", + "\n", + "env.set_atmospheric_model(\n", + " type=\"Reanalysis\",\n", + " file=\"../../data/weather/bella_lui_weather_data_ERA5.nc\",\n", + " dictionary=\"ECMWF\",\n", + ")\n", + "env.max_expected_height = 1000\n", + "env.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "# Define Motor\n", + "# Thrust profile: constant for 3 seconds\n", + "def thrust_profile(t):\n", + " return 250 if 0 <= t <= 3 else 0\n", + "\n", + "motor = PointMassMotor(\n", + " thrust_source=thrust_profile,\n", + " dry_mass=1.0,\n", + " thrust_curve=thrust_profile,\n", + " propellant_initial_mass=0.5,\n", + " propellant_final_mass=0.0,\n", + " burn_time=3.0\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Define Rocket\n", + "rocket = PointMassRocket(mass=2.0, drag_coefficient=0.75)\n", + "rocket.add_motor(motor)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "# Simulate Flight (3 DOF)\n", + "flight = Flight(\n", + " rocket=rocket,\n", + " environment=env,\n", + " rail_length=5.0,\n", + " inclination=85, # degrees from horizontal\n", + " heading=90, # east\n", + " simulation_mode=\"3 DOF\",\n", + " terminate_on_apogee=False,\n", + " max_time=20,\n", + " name=\"Test3DOF\"\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHHCAYAAABeLEexAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAA9hAAAPYQGoP6dpAABsfklEQVR4nO3dd3gU9drG8e9uek9oCaELSG+CIIqFDiKCooiiVAGRIgKCKB0E6V0QFRFFQCzoQURCUQTpRao06RBAICQhbZOd9w9kX2MIJJBkNsn9ua5ch535zcz9ZJKTx6kWwzAMRERERHIxq9kBRERERMymhkhERERyPTVEIiIikuupIRIREZFcTw2RiIiI5HpqiERERCTXU0MkIiIiuZ4aIhEREcn11BCJiIhIrqeGSESyTPHixXnqqafMjnFHv/zyCxaLhV9++eWOY0+cOIHFYmH+/PmZngugQ4cOFC9ePEu2lZWKFy9Ohw4dzI4huZgaIpH/2L9/P88//zz33Xcf3t7e5MuXj8cee4z//e9/aVp++PDhWCwWx5e3tzdFixalefPmfPrpp8THx6e67PLly2nSpAl58+bF09OT+++/n/79+3P58uUUYzt06JBsO//+Wrly5W0zFi9ePNl4Hx8fatasyYIFC9JUozP4/fffGT58OBEREeletnXr1lgsFgYOHJjmZb788kumTp2aprErVqxg+PDh6c6Vk9xsKtPyJeIMXM0OIOJsTp48SVRUFO3btyc0NJSYmBi++eYbnn76aT788EO6du2apvXMnj0bX19f4uPjOXv2LD///DOdOnVi6tSpLF++nCJFiiQb379/fyZNmkSVKlUYOHAgefLkYefOncycOZPFixezZs0aypQpk2wZDw8PPv744xTbrlKlyh3zVa1alX79+gFw/vx5Pv74Y9q3b098fDxdunRJU41m+v333xkxYgQdOnQgMDAwzctFRkbyv//9j+LFi7No0SLef//9NP1R/vLLL9m3bx99+vRJNr1YsWLExsbi5ubmmLZixQpmzZqVq5uicuXK8fnnnyebNmjQIHx9fXn33XdTjD906BBWq/4bXUxkiMgdJSYmGlWqVDHKlClzx7HDhg0zAOPSpUsp5n3xxReG1Wo1atWqlWz6l19+aQDGCy+8YCQmJiabt2XLFsPb29uoVKmSYbPZHNPbt29v+Pj43FU9xYoV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FpGRkamessxqN7+vpUuXTjGvTJky7Ny50/H5yJEjXLt2LcXPxk0XL1687baef/55+vbty5IlS3jnnXcwDIOlS5fStGlTx/ejRIkS9O3bl8mTJ7Nw4UIeffRRnn76aV5++eVkDVtmKFq0aLLPN7f337s0AwICkl0bdK/fF8l91BCJpNFzzz1Ht27dOHz4cIrb39Nj3759AJQqVQr4/+Ziz549qS5z8uRJIiMj09RwpFW+fPkczVTjxo0pW7YsTz31FNOmTUtxfVBGqlChAhEREXz++ed069aNEiVKOObdPPozYcIEqlatesvlbx5hS68vvvgCgDfffJM333wzxfxvvvmGjh073tW60yq1RjopKemu12m32ylQoECqR7nudF1VaGgojz76KF999RXvvPMOmzdv5tSpU4wbNy7ZuEmTJtGhQwe+//57Vq1aRe/evRk7diybN2+mcOHCd53/Tv57k8Htphv/uqj6Xr8vkvuoIRJJo9jYWIB7vqvm5oWfjRs3BuD+++/n/vvvZ9myZUybNu2Wp85uPjAxM5/y3KxZMx5//HHGjBlDt27d8PHxoVixYqxevZqoqKhkuf7880/gxjN4AEqWLIndbufAgQOpNjI35cuXj6+//po6depQv359NmzYQGhoqGM9AP7+/nc88pWeo3SGYfDll19St25dXn/99RTzR40axcKFC2/bEKVne6mNvXlk678XIv/3Lq+b39ebR8z+7dChQ8k+lyxZktWrV/PII4/g5eWV5oz/9sILL/D6669z6NAhlixZgre3N82bN08xrlKlSlSqVInBgwfz+++/88gjjzBnzhxGjx59V9vNTBnxfZHcRdcQifzHrQ6l22w2FixYgJeX1z0dpfnyyy/5+OOPqV27drI71oYOHcrVq1d57bXXUhwt2LFjB+PGjaNixYq0atXqrredFgMHDuTy5ct89NFHADz55JMkJSUxc+bMZOOmTJmCxWKhadOmALRs2RKr1crIkSNTXONj3OL2/MKFC7N69WpiY2Np2LCh40nc1atXp2TJkkycONFxavHfLl265Pi3j48PkLK5uJWNGzdy4sQJOnbsyHPPPZfi64UXXmDdunWcO3cu1XX4+PikuRlOLVuxYsVwcXFh/fr1yaZ/8MEHyT4XLFiQqlWr8tlnnyXbZlhYGAcOHEg2tnXr1iQlJTFq1KgUORITE9P0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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot Altitude\n", + "times = np.linspace(0, flight.time, 10000)\n", + "altitudes = [flight.z(t) for t in times]\n", + "\n", + "plt.plot(times, altitudes)\n", + "plt.xlabel(\"Time (s)\")\n", + "plt.ylabel(\"Altitude (m)\")\n", + "plt.title(\"3 DOF Rocket Altitude vs Time\")\n", + "plt.grid(True)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Simulation Mode: 3 DOF\n", + "Equations of Motion: standard\n" + ] + } + ], + "source": [ + "print(f\"Simulation Mode: {flight.simulation_mode}\")\n", + "\n", + "# Display additional details about the equations if available in the simulation object\n", + "if hasattr(flight, 'equations_of_motion'):\n", + " print(f\"Equations of Motion: {flight.equations_of_motion}\")\n", + "else:\n", + " print(\"No explicit equations of motion found in flight class\")" + ] + } + ], + "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.9.13" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/rocketpy/__init__.py b/rocketpy/__init__.py index f99a70f28..3f5b6a99b 100644 --- a/rocketpy/__init__.py +++ b/rocketpy/__init__.py @@ -37,6 +37,8 @@ Parachute, RailButtons, Rocket, + BaseRocket, + PointMassRocket, Tail, TrapezoidalFins, ) diff --git a/rocketpy/motors/PointMassMotor.py b/rocketpy/motors/PointMassMotor.py new file mode 100644 index 000000000..a9cc3548e --- /dev/null +++ b/rocketpy/motors/PointMassMotor.py @@ -0,0 +1,121 @@ +from functools import cached_property +import numpy as np +from ..mathutils.function import Function, funcify_method +from .motor import Motor + +class PointMassMotor(Motor): + """Class representing a motor modeled as a point mass. + Inherits from the Motor class and simplifies the model to a thrust-producing + object without detailed structural components.""" + + def __init__( + self, + thrust_source, + dry_mass, + thrust_curve=None, + propellant_initial_mass=None, + propellant_final_mass=None, + burn_time=None, + center_of_dry_mass_position=0, + reshape_thrust_curve=False, + interpolation_method="linear", + coordinate_system_orientation="nozzle_to_combustion_chamber", + ): + """Initialize the PointMassMotor class. + + Parameters + ---------- + thrust_source : int, float, callable, string, array, Function + Thrust source similar to the Motor class. + dry_mass : float + Total dry mass of the motor in kg. + thrust_curve : Function, np.array, or str (csv file), optional + Required if thrust_source is a csv file, Function, or np.array. + propellant_initial_mass : float, optional + Required if thrust_source is a csv file, Function, or np.array. + propellant_final_mass : float, optional + Required if thrust_source is callable. + burn_time : float or tuple of float, optional + Required if thrust_source is callable or if a thrust value is given. + center_of_dry_mass_position : float, optional + Initial position of the motor, default is 0. + interpolation_method : string, optional + Interpolation method for thrust curve, default is 'linear'. + """ + if isinstance(thrust_source, (Function, np.ndarray, str)): + if thrust_curve is None or propellant_initial_mass is None: + raise ValueError("thrust_curve and propellant_initial_mass are required for csv, Function, or np.array inputs.") + elif callable(thrust_source): + if any(param is None for param in [thrust_curve, propellant_initial_mass, burn_time, propellant_final_mass]): + raise ValueError("thrust_curve, propellant_initial_mass, burn_time, and propellant_final_mass are required for callable inputs.") + elif isinstance(thrust_source, (int, float)): + if any(param is None for param in [thrust_curve, propellant_initial_mass, burn_time]): + raise ValueError("thrust_curve, propellant_initial_mass, and burn_time are required when a thrust value is given.") + + self._propellant_initial_mass = propellant_initial_mass + super().__init__( + thrust_source=thrust_source, + dry_inertia=(0, 0, 0), + nozzle_radius=0, + center_of_dry_mass_position=center_of_dry_mass_position, + dry_mass=dry_mass, + nozzle_position=0, + burn_time=burn_time, + reshape_thrust_curve=reshape_thrust_curve, + interpolation_method=interpolation_method, + coordinate_system_orientation=coordinate_system_orientation, + ) + @funcify_method("Time (s)", "Thrust (N)") + def thrust(self): + """Returns the thrust of the motor as a function of time.""" + return self.thrust_source + + @funcify_method("Time (s)", "Acceleration (m/s^2)") + def total_mass(self): + """Returns the constant total mass of the point mass motor.""" + return self.dry_mass + + @funcify_method("Time (s)", "Acceleration (m/s^2)") + def acceleration(self): + """Computes the acceleration of the motor as thrust divided by mass.""" + return self.thrust() / self.total_mass + + @funcify_method("Time (s)", "Propellant Mass (kg)") + def center_of_propellant_mass(self): + return 0 + + @funcify_method("Time (s)", "Exhaust Velocity (m/s)") + def exhaust_velocity(self): + return 2000 # m/s, estimated value + + @funcify_method("Time (s)", "Propellant Mass (kg)") + def propellant_initial_mass(self): + return self._propellant_initial_mass + + @property + def is_point_mass(self): + return True + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_11(self): + return 0 + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_12(self): + return 0 + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_13(self): + return 0 + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_22(self): + return 0 + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_23(self): + return 0 + + @funcify_method("Time (s)", "Inertia (kg·m²)") + def propellant_I_33(self): + return 0 diff --git a/rocketpy/rocket/__init__.py b/rocketpy/rocket/__init__.py index 0687b5ee5..1ae442f4d 100644 --- a/rocketpy/rocket/__init__.py +++ b/rocketpy/rocket/__init__.py @@ -15,3 +15,5 @@ from rocketpy.rocket.components import Components from rocketpy.rocket.parachute import Parachute from rocketpy.rocket.rocket import Rocket +from rocketpy.rocket.rocket import BaseRocket +from rocketpy.rocket.rocket import PointMassRocket \ No newline at end of file diff --git a/rocketpy/rocket/rocket.py b/rocketpy/rocket/rocket.py index bf938d4be..72fcc20be 100644 --- a/rocketpy/rocket/rocket.py +++ b/rocketpy/rocket/rocket.py @@ -24,7 +24,88 @@ from rocketpy.rocket.parachute import Parachute from rocketpy.tools import parallel_axis_theorem_from_com +class BaseRocket: + """Base class for a rocket model with minimal attributes and methods.""" + def __init__(self, mass): + self.mass = mass + self.motor = None + def add_motor(self, motor): + self.motor = motor + self.evaluate_total_mass() + def evaluate_total_mass(self): + if self.motor: + return self.mass + self.motor.total_mass + return self.mass + + +class PointMassRocket(BaseRocket): + """Rocket modeled as a point mass for 3-DOF simulations.""" + + def __init__(self, mass, drag_coefficient=0.4, radius=0.05): + super().__init__(mass) + + # Basic configuration + self.drag_coefficient = drag_coefficient + self.radius = radius # in meters + self.area = math.pi * self.radius**2 + + # Coordinate system configuration + self.coordinate_system_orientation = "tail_to_nose" + self.center_of_dry_mass_position = 0 # arbitrary for point mass + self.dry_mass = mass # dry_mass = structure + dry motor, here it's same as base mass + self.nozzle_position = 0 # or another reference point like -1 * length/2 + + # Components + self.parachutes = [] + self._controllers = [] + self.air_brakes = [] + self.sensors = Components() + self.aerodynamic_surfaces = Components() + self.rail_buttons = Components() + self.surfaces_cp_to_cdm = {} + + # Drag models + self.power_on_drag = Function( + drag_coefficient, + "Mach Number", + "Power-On Drag Coefficient", + interpolation="constant" + ) + self.power_off_drag = Function( + drag_coefficient * 1.2, + "Mach Number", + "Power-Off Drag Coefficient", + interpolation="constant" + ) + def add_parachute( + self, name, cd_s, trigger, sampling_rate=100, lag=0, noise=(0, 0, 0) + ): + parachute = Parachute(name, cd_s, trigger, sampling_rate, lag, noise) + self.parachutes.append(parachute) + self.total_mass = None + self.evaluate_total_mass() + return self.parachutes[-1] + + def evaluate_total_mass(self): + """Returns Function of total mass (dry + motor).""" + if self.motor is None: + print("Please associate this rocket with a motor!") + return False + + motor_mass_func = ( + self.motor.total_mass if hasattr(self.motor.total_mass, "get_value_opt") + else Function(lambda t: self.motor.total_mass) + ) + + self.total_mass = Function( + lambda t: self.mass + motor_mass_func(t), + inputs="Time (s)", + outputs="Total Mass (Rocket + Motor + Propellant) (kg)", + title="Total Mass (Rocket + Motor + Propellant)" + ) + return self.total_mass + # pylint: disable=too-many-instance-attributes, too-many-public-methods, too-many-instance-attributes class Rocket: """Keeps rocket information. diff --git a/rocketpy/simulation/flight.py b/rocketpy/simulation/flight.py index ce728dafe..339ab16ad 100644 --- a/rocketpy/simulation/flight.py +++ b/rocketpy/simulation/flight.py @@ -491,6 +491,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-statements verbose=False, name="Flight", equations_of_motion="standard", + simulation_mode="6 DOF", ode_solver="LSODA", ): """Run a trajectory simulation. @@ -604,6 +605,7 @@ def __init__( # pylint: disable=too-many-arguments,too-many-statements self.terminate_on_apogee = terminate_on_apogee self.name = name self.equations_of_motion = equations_of_motion + self.simulation_mode = simulation_mode self.ode_solver = ode_solver # Controller initialization @@ -1194,9 +1196,15 @@ def __init_solver_monitors(self): def __init_equations_of_motion(self): """Initialize equations of motion.""" - if self.equations_of_motion == "solid_propulsion": + if self.equations_of_motion == "solid_propulsion" and self.simulation_mode == '6 DOF': # NOTE: The u_dot is faster, but only works for solid propulsion self.u_dot_generalized = self.u_dot + elif self.equations_of_motion == "solid_propulsion" and self.simulation_mode == '3 DOF': + # NOTE: The u_dot is faster, but only works for solid propulsion + self.u_dot_generalized = self.u_dot_3dof + elif self.simulation_mode == '3 DOF': + # NOTE: The u_dot is faster, but only works for solid propulsion + self.u_dot_generalized = self.u_dot_generalized_3dof def __init_controllers(self): """Initialize controllers and sensors""" @@ -1430,26 +1438,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals # Retrieve integration data _, _, z, vx, vy, vz, e0, e1, e2, e3, omega1, omega2, omega3 = u # Determine lift force and moment + omega1, omega2, omega3 = 0, 0, 0 R1, R2, M1, M2, M3 = 0, 0, 0, 0, 0 # Thrust correction parameters pressure = self.env.pressure.get_value_opt(z) # Determine current behavior - if self.rocket.motor.burn_start_time < t < self.rocket.motor.burn_out_time: + if t < self.rocket.motor.burn_out_time: # Motor burning # Retrieve important motor quantities - # Inertias - motor_I_33_at_t = self.rocket.motor.I_33.get_value_opt(t) - motor_I_11_at_t = self.rocket.motor.I_11.get_value_opt(t) - motor_I_33_derivative_at_t = self.rocket.motor.I_33.differentiate( - t, dx=1e-6 - ) - motor_I_11_derivative_at_t = self.rocket.motor.I_11.differentiate( - t, dx=1e-6 - ) # Mass - mass_flow_rate_at_t = self.rocket.motor.mass_flow_rate.get_value_opt(t) propellant_mass_at_t = self.rocket.motor.propellant_mass.get_value_opt(t) # Thrust + net_thrust = max( self.rocket.motor.thrust.get_value_opt(t) + self.rocket.motor.pressure_thrust(pressure), @@ -1460,39 +1460,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals M2 -= self.rocket.thrust_eccentricity_x * net_thrust else: # Motor stopped - # Inertias - ( - motor_I_33_at_t, - motor_I_11_at_t, - motor_I_33_derivative_at_t, - motor_I_11_derivative_at_t, - ) = (0, 0, 0, 0) # Mass - mass_flow_rate_at_t, propellant_mass_at_t = 0, 0 + propellant_mass_at_t = 0 # thrust net_thrust = 0 # Retrieve important quantities - # Inertias - rocket_dry_I_33 = self.rocket.dry_I_33 - rocket_dry_I_11 = self.rocket.dry_I_11 # Mass rocket_dry_mass = self.rocket.dry_mass # already with motor's dry mass total_mass_at_t = propellant_mass_at_t + rocket_dry_mass mu = (propellant_mass_at_t * rocket_dry_mass) / ( propellant_mass_at_t + rocket_dry_mass ) - # Geometry - # b = -self.rocket.distance_rocket_propellant - b = ( - -( - self.rocket.center_of_propellant_position.get_value_opt(0) - - self.rocket.center_of_dry_mass_position - ) - * self.rocket._csys - ) - c = self.rocket.nozzle_to_cdm - nozzle_radius = self.rocket.motor.nozzle_radius # Prepare transformation matrix a11 = 1 - 2 * (e2**2 + e3**2) a12 = 2 * (e1 * e2 - e0 * e3) @@ -1541,9 +1520,6 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals R3 = air_brakes_force # Substitutes rocket drag coefficient else: R3 += air_brakes_force - # Off center moment - M1 += self.rocket.cp_eccentricity_y * R3 - M2 -= self.rocket.cp_eccentricity_x * R3 # Get rocket velocity in body frame vx_b = a11 * vx + a21 * vy + a31 * vz vy_b = a12 * vx + a22 * vy + a32 * vz @@ -1587,92 +1563,19 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals R1 += X R2 += Y R3 += Z - M1 += M - M2 += N - M3 += L - # Off center moment - M3 += self.rocket.cp_eccentricity_x * R2 - self.rocket.cp_eccentricity_y * R1 - - # Calculate derivatives - # Angular acceleration - alpha1 = ( - M1 - - ( - omega2 - * omega3 - * ( - rocket_dry_I_33 - + motor_I_33_at_t - - rocket_dry_I_11 - - motor_I_11_at_t - - mu * b**2 - ) - + omega1 - * ( - ( - motor_I_11_derivative_at_t - + mass_flow_rate_at_t - * (rocket_dry_mass - 1) - * (b / total_mass_at_t) ** 2 - ) - - mass_flow_rate_at_t - * ((nozzle_radius / 2) ** 2 + (c - b * mu / rocket_dry_mass) ** 2) - ) - ) - ) / (rocket_dry_I_11 + motor_I_11_at_t + mu * b**2) - alpha2 = ( - M2 - - ( - omega1 - * omega3 - * ( - rocket_dry_I_11 - + motor_I_11_at_t - + mu * b**2 - - rocket_dry_I_33 - - motor_I_33_at_t - ) - + omega2 - * ( - ( - motor_I_11_derivative_at_t - + mass_flow_rate_at_t - * (rocket_dry_mass - 1) - * (b / total_mass_at_t) ** 2 - ) - - mass_flow_rate_at_t - * ((nozzle_radius / 2) ** 2 + (c - b * mu / rocket_dry_mass) ** 2) - ) - ) - ) / (rocket_dry_I_11 + motor_I_11_at_t + mu * b**2) - alpha3 = ( - M3 - - omega3 - * ( - motor_I_33_derivative_at_t - - mass_flow_rate_at_t * (nozzle_radius**2) / 2 - ) - ) / (rocket_dry_I_33 + motor_I_33_at_t) - # Euler parameters derivative - e0dot = 0.5 * (-omega1 * e1 - omega2 * e2 - omega3 * e3) - e1dot = 0.5 * (omega1 * e0 + omega3 * e2 - omega2 * e3) - e2dot = 0.5 * (omega2 * e0 - omega3 * e1 + omega1 * e3) - e3dot = 0.5 * (omega3 * e0 + omega2 * e1 - omega1 * e2) - # Linear acceleration L = [ ( R1 - - b * propellant_mass_at_t * (omega2**2 + omega3**2) - - 2 * c * mass_flow_rate_at_t * omega2 + ) / total_mass_at_t, ( R2 - + b * propellant_mass_at_t * (alpha3 + omega1 * omega2) - + 2 * c * mass_flow_rate_at_t * omega1 + ) / total_mass_at_t, + (R3 - b * propellant_mass_at_t * (alpha2 - omega1 * omega3) + net_thrust) / total_mass_at_t, ] @@ -1687,17 +1590,18 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals ax, ay, az, - e0dot, - e1dot, - e2dot, - e3dot, - alpha1, - alpha2, - alpha3, + 0, + 0, + 0, + 0, + 0, + 0, + 0, ] if post_processing: self.__post_processed_variables.append( + [ t, ax, @@ -1715,6 +1619,127 @@ def u_dot(self, t, u, post_processing=False): # pylint: disable=too-many-locals net_thrust, ] ) + return u_dot + + def u_dot_generalized_3dof(self, t, u, post_processing=False): + """Calculates derivative of u state vector with respect to time when the + rocket is flying in 3 DOF motion in space and significant mass variation + effects exist. + + Parameters + ---------- + t : float + Time in seconds. + u : list + State vector: [x, y, z, vx, vy, vz, q0, q1, q2, q3, omega1, omega2, omega3]. + post_processing : bool, optional + If True, adds flight data to self variables like self.angle_of_attack. + + Returns + ------- + list + Derivative state vector: [vx, vy, vz, ax, ay, az, + e0_dot, e1_dot, e2_dot, e3_dot, alpha1, alpha2, alpha3]. + """ + # Unpack state + _, _, z, vx, vy, vz, e0, e1, e2, e3, omega1, omega2, omega3 = u + + # Define vectors + v = Vector([vx, vy, vz]) + e = [e0, e1, e2, e3] + w = Vector([omega1, omega2, omega3]) + + # Mass and transformation + total_mass = self.rocket.total_mass.get_value_opt(t) + K = Matrix.transformation(e) + Kt = K.transpose + + # Atmospheric and wind data + rho = self.env.density.get_value_opt(z) + wind_vx = self.env.wind_velocity_x.get_value_opt(z) + wind_vy = self.env.wind_velocity_y.get_value_opt(z) + wind_velocity = Vector([wind_vx, wind_vy, 0]) + + free_stream_velocity = wind_velocity - v + free_stream_speed = abs(free_stream_velocity) + speed_of_sound = self.env.speed_of_sound.get_value_opt(z) + mach = free_stream_speed / speed_of_sound + + # Drag computation + if t < self.rocket.motor.burn_out_time: + cd = self.rocket.power_on_drag.get_value_opt(mach) + else: + cd = self.rocket.power_off_drag.get_value_opt(mach) + + R1, R2, R3 = 0, 0, -0.5 * rho * free_stream_speed**2 * self.rocket.area * cd + + for air_brake in self.rocket.air_brakes: + if air_brake.deployment_level > 0: + ab_cd = air_brake.drag_coefficient.get_value_opt( + air_brake.deployment_level, mach + ) + ab_force = ( + -0.5 + * rho + * free_stream_speed**2 + * air_brake.reference_area + * ab_cd + ) + if air_brake.override_rocket_drag: + R3 = ab_force + else: + R3 += ab_force + + # Velocity in body frame + vb_body = Kt @ v + + for surface, _ in self.rocket.aerodynamic_surfaces: + cp = self.rocket.surfaces_cp_to_cdm[surface] + vb_component = vb_body + (w ^ cp) + + comp_z = z + (K @ cp).z + wind_cx = self.env.wind_velocity_x.get_value_opt(comp_z) + wind_cy = self.env.wind_velocity_y.get_value_opt(comp_z) + wind_body = Kt @ Vector([wind_cx, wind_cy, 0]) + + rel_velocity = wind_body - vb_component + rel_speed = abs(rel_velocity) + rel_mach = rel_speed / speed_of_sound + + reynolds = ( + self.env.density.get_value_opt(comp_z) + * rel_speed + * surface.reference_length + / self.env.dynamic_viscosity.get_value_opt(comp_z) + ) + + fx, fy, fz, *_ = surface.compute_forces_and_moments( + rel_velocity, rel_speed, rel_mach, rho, cp, w, reynolds + ) + R1 += fx + R2 += fy + R3 += fz + + # Thrust and weight + thrust = self.rocket.motor.thrust.get_value_opt(t) + gravity = self.env.gravity.get_value_opt(z) + weight_body = Kt @ Vector([0, 0, -total_mass * gravity]) + + total_force = Vector([0, 0, thrust]) + weight_body + Vector([R1, R2, R3]) + + # Dynamics + v_dot = K @ (total_force / total_mass) + e_dot = [0, 0, 0, 0] # Euler derivatives unused in 3DOF + w_dot = [0, 0, 0] # No angular dynamics in 3DOF + r_dot = [vx, vy, vz] + + u_dot = [*r_dot, *v_dot, *e_dot, *w_dot] + + if post_processing: + self.__post_processed_variables.append( + [t, *v_dot, *w_dot, R1, R2, R3, 0, 0, 0] + + ) return u_dot @@ -1723,7 +1748,7 @@ def u_dot_generalized(self, t, u, post_processing=False): # pylint: disable=too rocket is flying in 6 DOF motion in space and significant mass variation effects exist. Typical flight phases include powered ascent after launch rail. - + Parameters ---------- t : float