Free State Labs


Software experiments for solving engineering problems of the future

├─ Introduction
├─ Physics
├─ LQR Controller
├─ Simulation
├─ Results
├─ References & Future Work


« Back: Overview | Next: Physics »


While a graduate student taking controls courses, I was captivated watching SpaceX landing their Falcon 9 first-stage boosters. I wondered what sorts of control algorithms were required to continually perform such an amazing feat. This project is designed to test the performance of different control strategies for solving this problem in 2 dimensions.

Problem Statement

The hypothetical scenario is this: as an up-and-coming space launch vehicle company, you’d like to test scale models of your rocket and controller before committing to building a full-scale vehicle prototype.

A successful test flight involves a takeoff, flying to a specified altitude and ground position, and then landing on the launchpad. The rocket is well-balanced and has a gimballed thruster that can be commanded to increase and decrease its throttle, as well as rotate to provide directional thrust. This problem is functionally similar to the OpenAI Gym LunarLanderContinuous-v2 Environment; however, note that similar solutions to this problem include side thrusters, which I do not - I wanted to see if it was possible to control the rocket via thrust-vectoring alone.

How do you control the rocket? How well do your algorithms perform?

Controller Methods

When I first started this project, I had a basic understanding of full-state feedback/pole placement, PID, LQR, and discrete-time reinforcement learning (RL) techniques. My assumptions were that:

To date, I have only implemented the LQR controllers and have been impressed with their performance. Linearizing the system of equations governing the problem proved to be far more robust than I imagined.