Fundamentals of Small Unmanned Aircraft Flight

 Being involved in UAV research, I've been a member and a great admirer of this community for a number of years.  An article I wrote (Fundamentals of Small Unmanned Aircraft Flight) has recently been published in my organization's Technical Digest and is freely available.  I am hoping that members of the DIY UAV community might benefit from this effort.


The article covers flight control methods as well as UAV state estimation methods (i.e. fusing sensors to estimate position and attitude).  Flight control algorithms are treated very generally, basically just describing simple PID control for different flight modes and channels.  For state estimation, the article covers Kalman Filter-based approaches as well as the Mahoney/Premerlani/Bizard "DCM" method that many in this community are familiar with.  (In the article, I refer to the "DCM" method as the AHRS Feedback Controller method, as it can also be described using quaternions or euler angles.)


Although the focus of the article is small fixed-wing UAVs, many of the methodologies described can be (and are) applied to other types and sizes of UAVs.  The flight control and state estimation methods described are not specific to any particular UAV, but I will admit that I leveraged resources from the open-source UAV community.  The article is freely available at the following link:

As a companion to the article, I also put together some heavily-commented MATLAB routines (called SUAS Code) implementing both the Kalman Filter and the "DCM" Feedback Controller state estimation methods.  (For the really interested user, the code shows how to implement the "DCM" Feedback Controller method using either Euler angles, quaternions, or Direction Cosine Matrices.)  A link to the code can be accessed through the MATLAB Central Link Exchange:

(The Link Exchange provides a link to the actual SUAS Code website.  Please forgive me that this a "link to a link", but the MATLAB Link Exchange counts "clicks", giving me feedback as to whether anyone is finding it useful.  Also, please be forewarned that you will have to OK an End-User-License-Agreement before downloading the code.  It is intended that the code be freely available for academic, personal education, and research purposes.  The EULA really just restricts commercial efforts, so hopefully no one in this community will find it too distasteful.)


Again, I am hoping that the paper and code are of benefit to this community.


Views: 5645

Comment by Gary Mortimer on November 12, 2012 at 11:19pm

Wow well above my pay grade excellent stuff thanks so much for sharing.

Comment by robert bouwens on November 13, 2012 at 12:30pm


thanks so much for sharing and huts of!

i would like to run parts through a simulation.
what package would you suggest:

 - scilab

 - gnu octave

i am not having the budget for matlab.



Comment by Craig Elder on November 13, 2012 at 3:52pm

Thanks Jeff!

That is a fabulous article.

Comment by Dave G on November 14, 2012 at 12:26am

I read every word.  As a developer looking to get into contributing to OpenPilot, this was a fantastic overview, from strategies right down to the matrix math.  Nice work!

Comment by Jeff Barton on November 14, 2012 at 8:24am

Many thanks for the nice words. I couldn't even begin to count the hours that went into the paper and the code, so I very much hope that someone has found it useful. Robert: I have not tried porting the Matlab code to an open source alternative, but I made every effort to keep the code as "vanilla" Matlab as possible. So, I'm hoping that you won't have too much difficulty porting it. (Looking briefly at SciLab and Octave, I'd guess that Octave might be the easier conversion, but I have no experience with either one.) Please tell me how it goes!

Comment by W. Joe Taylor on November 14, 2012 at 8:31am
Many thanks for the article & code links.

How's the revolution code for gps way point nav going? I am hoping to get into some of the cc3d code soon and rev code too if I have time. (Have 6 more weeks to wait until cc3d arrives)

Also, does anyone know what status is for Px4fmu - gps waypoint nav development. Can it be used with Apm (arducopter)? If so, what is link to instructions for this?

Comment by robert bouwens on November 14, 2012 at 9:13am


my 'control law' person in the office is quite busy. today i found out that i might be able to create 'c' code from

the matlab code - we have a matlab realtime studio license.

for myself i can say that i will try gnu octave to create the plots.

for shure i will report. but time is an issue .. as usual.

best robert

Comment by Rob_Lefebvre on November 14, 2012 at 9:35am

I have only skimmed this, but I liked the section on Longitudinal Flight Control starting on page 145. I've been trying to solve this control problem for helicopters.  In hovering, or slow, climbing flight, Fig 16 applies.  In high speed forward flight, Fig 15 applies.  But obviously there's some cross-over points.

Ultimately, I think a Fuzzy Logic controller would handle the change between the two well.

Comment by Harry on November 14, 2012 at 10:31am

I got a kick out of the "about the author" - crashed UAV's in 8 states and walked away from each incident.  Dont try that in a C-150.  Thanks for the ariticle, the pictures help somebody like me with only a very fuzzy grasp of math

Comment by Massimo V. on November 14, 2012 at 1:56pm

I read every word too! Thanks so much for sharing. I hoped to find a paper like this from long time, and now... I found this gift! Thank you very very much, it's clear, exhaustive and even simpler than expected!


You need to be a member of DIY Drones to add comments!

Join DIY Drones


Season Two of the Trust Time Trial (T3) Contest 
A list of all T3 contests is here. The current round, the Vertical Horizontal one, is here

© 2018   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service