An Autonomous Aircraft Flies

A few weeks back, a few friends and I went out to a field and watched a home project of mine -- a small autonomous aircraft built from regular radio-controlled plane parts -- fly itself around the field several times in a box pattern and then approach for landing.  This was particularly exciting for me, because in my line of work, I seldom get to witness in-person the product of my labor, and I've never worked on such a shoe-string project before. It was pretty fascinating to switch the plane to autonomous mode and sit back and watch a little math and programming keep a bunch of cheap microcontrollers, amateur soldering, noisy sensors, foam, and glue on a target trajectory and come home to land.

Testing aircraft's moment of inertia
Testing aircraft's moment of inertia

While the video of the flight didn't work out, here is a reconstruction of the flight created using the on-board sensors and a variety of post-processing techniques.

 

The airframe is a Bixler 1.1, a suggestion from the good folks at DIY Drones. (In retrospect, I would look for a larger airframe with higher quality; the Bixler 1.1 is poorly manufactured.)

The underlying flight computer is the Arduino Mega 2560 with a custom shield that contained accelerometers, rotation rate sensors, magnetometers, a barometric pressure sensor, a GPS module, and a data logger. The custom shield is from NKC, and all of the sensors and the logger are from SparkFun. There's also a "safety" computer that will switch to manual control when necessasry.

Custom shield for Arduino Mega 2560
Custom shield for Arduino Mega 2560

Building the plane has allowed me to try out several ideas for navigation and control. It's currently running an 10-state extended Kalman filter and unconventional, nonlinear controller for autonomous take-off, follow-the-ball type tracking in a box pattern, and autonomous landing. The autonomous take off needs a little work, but the rest is working. It's also served as an excellent prompt for developing and testing several tools that I'm working on. One of those tools is a general-purpose simulation engine that has become very useful for me. This engine can propagate a continuous-time system (such as most physical systems) along with a discrete-time system (such as a controller or other period event) in an accurate, fast, and easy-to-use manner. This will be coming soon!

Leave a Reply

Your email address will not be published. Required fields are marked *