Link Search Menu Expand Document


« Back: LQR Controller | Next:Results »


The simulation was developed using Julia and is dependent on the following packages:

All may be imported via the using Pkg; Pkg.add(PACKAGE_NAME) command in the REPL.

The source code is not yet publicly available.

Program Structure

The program is organized into three modules:

  • Physics: contains data structures and functions to compute the motion of the rocket
  • LQR: contains data structures and functions to compute the control strategy of the rocket
  • Vis: contains data structures and functions for plotting and visualization of the flight

Program Execution

The program is designed to be run via test scripts. Each test script:

  • Defines the parameters of the rocket, including mass, maximum thrust, etc.
  • Defines the controller: cost function weights, setpoints, control limits
  • Defines the parameters of the simulation, such as time stepping and initial conditions
  • Executes a function called run_3dof() that executes the simulation and produces results data
  • Plots the state and control variables via plot_3dof_sol() and creates an animation via animate_scene()

Notes on the Source Code

  • The test script defines a discrete time step, but the equations of motion are integrated between time steps using numerical methods found in DifferentialEquations.jl - therefore, the control strategy is discrete, but the simulation itself is “piecewise-continuous”
  • User-defined composite types (structs) are used throughout to package data in meaningful ways for compatibility between functions in different modules
  • Physics of the landing legs are not modelled directly, but still used to determine if a landing was successful
  • The animations are created by manipulated Shape objects in Plots.jl; this is a similar approach to creating animations in MATLAB in that the library was not necessarily designed for this
  • The simulation does not execute in real-time with the animation - this was chosen specifically to separate the two functional portions of the program
  • Solving the simulation takes significantly less computational time than plotting the results, even with small time steps and long simulation run times

Copyright © 2022 ryan@freestatelabs