Quadcopter Landing
Neural Network Controller

Jonathan Merritt
Sydney Functional Programming Group
September 2024

\[ \begin{array}{c} f_{\textrm{expensive}} : \mathbb{R}^n \rightarrow \mathbb{R}^m \\ \hspace{5em} \Bigg\downarrow \scriptsize\textrm{ neural network} \\ f_{\textrm{cheap}} : \mathbb{R}^n \rightarrow \mathbb{R}^m \end{array} \]

Problem

\[ [ x, z, \theta, v_x, v_z ]_{\textrm{initial}} \rightarrow [ x, z, \theta, v_x, v_z ]_{\textrm{final}} \]

Using the least energy

\[ \begin{eqnarray} \dot{x} &=& v_x \\ \dot{z} &=& v_z \\ \dot{\theta} &=& \omega \\ \dot{v_x} &=& T \sin(\theta) \\ \dot{v_z} &=& T \cos(\theta) \end{eqnarray} \]

Produce optimal control signals: \(T\) and \(\omega\)

Training Data

Trajectory Optimization

  • Shooting Method
  • Collocation Method
  • dymos package in Python

Training

  • Rust burn crate
  • 5-layer feed-forward network
  • Fixed target state
  • Input: state vector: \( [x, z, \theta, v_x, v_z] \)
  • Output: instantaneous controls: \( [T, \omega] \)

Results

Credits

This is a re-implementation of:

Sánchez-Sánchez et al. (2016) Optimal Real-Time Landing Using Deep Networks. Proceedings of the 6th International Conference on Astrodynamics Tools and Techniques.

Project GitHub Repo