It's been a while since I've posted an update on the progress of the AutoQuad flight controller.  The event that we've all been waiting for has arrived with ST Micro's announcement and subsequent release of their STM32F4 product line.  As expected, the micro-controller is pin for pin compatible with their STM32F2 series which the AQ v6.1 hardware was designed for.  This meant it was a drop-in replacement.  The most important new feature of the chip is the implementation of ARM's Cortex M4 core with a hardware FPU!  This means that we can now do floating point operations in a single clock cycle.  All forms of add / subtract / multiply / integer conversion, etc are single clock cycle instructions with the divide and square root instructions taking 14 cycles.  This is a significant step forward for math hungry applications like AutoQuad.

As soon as I could get my hands on one (around November I think) I had it on a board working to port my ground Unscented Kalman Filter code to fit into the 168MHz MCU.  With some optimizations, it ended up fitting with processing room to spare.  The current version leaves ~40% idle time during flight.  The filter is interesting because it brings all of the important estimated states and observations under a single mathematical model.  This means that each observation can influence any number of state estimates if there is determined to be co-variance between them.  The theoretical performance improvements over my old fixed gain techniques is high.  17 states and 16 process noise terms are estimated at 200Hz observed by 13 sensor measurements.

A benefit to using such a filter onboard is that it can adapt to changing variance of sensors and measurements on the fly.  This removes the need to do ground based flight calibration simulations which was a drawback to the original fixed gain methods.  Once you have a calibrated IMU, it can provide accurate state estimates "out of the box."  While this is nice, the biggest improvement is the accuracy of the state estimates it can produce.  States like 3D accelerometer bias and 3D rate gyro bias are critical to accurate attitude estimates which is the only way that you can propagate acceleration measurements through velocity and position estimates with any kind of accuracy.

Other than the upgrade of the MCU, the hardware is mostly unchanged from the original v6.1 layout.  However, there have been a lot of new features added to the firmware since last year.  What I call DVH (dynamic velocity hold) allows the pilot to control the craft's velocity in 3 dimensions while AQ handles everything else.  Let go of the sticks and the machine holds position.  AQ now speaks mavlink so it can be configured and controlled from any ground station that supports the protocol.  A comprehensive parameter set has been established that allows configuration of almost all aspects of operation.  Gimbal support and expanded mission capabilities have been added.  1-wire support for pre and post flight communications with ESC32.  Too many more to list here.

With the help of Max Levine I created this video to demonstrate the autonomous mission capabilities of the current firmware (version 6.6):

If you use the uBlox LEA-6T as the onboard GPS module, AQ can record raw satellite observations to its uSD card along with the normal flight log.  With this data and data from a local base station, you can use post RTK to get extremely accurate position and velocity estimates (~ centimeter accuracy.)  In fact, I use the RTK velocity estimates as an absolute data point in scoring the filter's performance in the ground simulations used to tune the variance and noise parameters used by the UKF.  Future work might include onboard RTK calculations using a linux based application processor mounted on a daughter board.  This would bring the system's performance to an entirely new level.

Here is what the actual flight path looked like of the flight shown in the above video using post processed RTK:

I need to thank the small group of people who have worked very hard to test, write utility software and interfaces, create documentation and generally improve the AQ  platform.  It is still very far from a finished, polished flight controller, but it has come a long way because of their help.

As with ESC32, I have decided to release the AutoQuad FC firmware under an open source license.  It can be found at:

I would also like to invite anyone interested to participate in a public beta test of the system.   Sensor calibration, setup and configuration is still a lengthy and sometimes tedious process so I would discourage anyone who thinks they can bolt the board to a frame and start flying as that is not at all what you should expect.  I have authorized manufacture and sale by ViaCopter and Flyduino who are taking orders in a few days.

Views: 23323

Comment by Patrick L on July 3, 2012 at 7:25am

The current reliance on PID controllers without considering kinematics such as linear+angular momentum and acceleration,  gyroscopic effects, motor thrust in a theoretical manner has it's limits. Multipilot32F4 / AutoQuad FC and ESC32 may finally have the required computing power for more accurate state estimation, optimal response calculation and precise application of motor control resulting in unprecedented stability and tracking.

GPS will remain a weak link until live RTK becomes practical.

@Aerhead: you beat me to it. I've been working out the math and the frame design for an octo design using 4 flat and 4 lightly angled motors to accomplish horizontal sliding movement without requiring any frame tilt. As it is, real work has been draining too much of my energy to make quick progress.

Comment by Norbert Machinek on July 3, 2012 at 7:27am

We stocked up enough of the analog Invensense for the next bigger batch - so no worries: we'll survive the EOL. ;)

Comment by Jeroen van de Mortel on July 3, 2012 at 7:30am

I thought so but in the future it can be a problem (unless you stock 5000 units) because Invense isn't planning any analog sensors sadly.

Comment by Aerhead on July 3, 2012 at 8:13am


Has the team look into using the MPU 6000?  AMP2 and Openpilots CC3D are using them with good results.

Comment by Norbert Machinek on July 3, 2012 at 8:30am

@ Jeroen: Heck! Are you planning a worldwide invasion? ;)
Or are you already speculating on AutoQuad 7?

@ Aerhead: Sure, we don't just sit there until our vehicle hits the dead end. 
We also have the daughter board option to upgrade AQ6s later. But this is Bill's decision when the time has come...

Comment by Aerhead on July 3, 2012 at 8:42am

Let me assure you I do not think anyone on this team is just sitting on there hands.   Most of the commercial Autopilot people write-off the MPU 6000 as a toy sensor.  So I thought I ask. 

Comment by Bill Nesbitt on July 3, 2012 at 9:11am

Patrick: You are right about the limitations of using PID for attitude control.  I hope to announce some progress on this front in the near future.

Comment by Bill Nesbitt on July 3, 2012 at 9:15am

Aerhead: I've suspected that the MPU 6XXX sensors are high end toys.  I've now got some here and and I will be trying to get to the bottom of their capabilities.  I will report my findings as I go along.

Comment by Roberto Navoni on July 3, 2012 at 9:22am

Hi Bill,

great work , I choose to use same platform on my VBRAIN STM32F407 . I see your code and i see that is developed in plain 'C' is your intention extend the develop of your platform also to other developer  ? Do you think that could be possible to port your code to C++ . That could be better for a big developer team. We doing this experiment with Arducopter and we can work very well .

Could be nice to share the experience doing on   ArduCopter 32. What do you think about ?



Comment by Aerhead on July 3, 2012 at 9:28am


Now I think you've answered all my questions, what is until I get a Autoquad board!



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

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service