We use the Odroid U3 to control a quad-rotor (no microcontroller-based flight control, just plain Linux control code). As a Linux distribution on the ODROID we use Gentoo, and of course our quadrotor natively compiles all of its software (kernel, userspace) :D
Please have a look at our first operating prototype:

A more detailed picture with annotations is provided here:

As you can see, on top of the U3 we use the IO shield from ODROID. The U3 io shield is programmed with a simple firmware similar to FirmataC, which:
- parses PPM RC receiver signals and sends them to ttySAC0
- reads pwm outputs from the autopilot via ttySAC0 and generates the PWM signals.

Some additional electronics, including power supply, logic level converters and a I2C IMU (MPU9150 + MS5611) sensor are placed on top of the IO shield. The GPS receiver is connected via USB and we have WiFi and a Webcam connected to USB as well.

The software for controlling the UAV is called PenguPilot. It is freely available via Github here, but the documentation is in an early stage: https://github.com/PenguPilot/PenguPilot

Stay tuned for the next update (in-flight video) and do not hesitate to contact me.

Views: 11811

Comment by robert bouwens on June 24, 2014 at 11:43am

Very nice project!


using the PREEMPT define for the kernel is nice.

You can achieve nice task switch times - but you need to look at the priorities.

Comment by Tobias Simon on June 24, 2014 at 11:58am

BTW robert: I saw on your blog that you've been using the Madgwick filter. This robot here also uses madgwick for orientation estimation :-)

Comment by robert bouwens on June 24, 2014 at 12:12pm

Yes, I looked at the sources.

Your approach on the pid calculations looks very interesting - I will probably try to fly this :-)

I still like Seb's code - flies very well.

In the mean time my variant flies much better. This was just very early coding.


set the main loop to real time priority and the rest below this prio level.

for us at work this works!

you can use any kernel which allows you to set the PREEMPT option.

Comment by Tobias Simon on June 24, 2014 at 12:29pm

do you mean piid.c? This one is a bit special, as it combines feed-back and feed-forward control. Thus, some high- and low-pass filters are required there.

Comment by robert bouwens on June 24, 2014 at 12:37pm

Yes, looks like it should try that real soon :-)

Comment by Tobias Simon on June 24, 2014 at 12:49pm

be careful with that :)

Comment by robert bouwens on June 24, 2014 at 1:40pm

you broke a few things ;-)

the normal way of doing things...

Comment by Gary McCray on June 24, 2014 at 3:38pm

Really great accomplishment,

How about a couple pictures and a schematic of the IO shield - IMU, baro, LLCs, I2C, power supply.

I'm really happy to see you used the shield, I got one when I got my U3 because I liked the built in controller setup, a bit of a pain to program but very handy.

I really think this is going to be the best basis for systems that integrate 3D vision and SLAM in the future.

Best Regards,


Comment by Noli Sicad on June 24, 2014 at 8:16pm

Is this GNU/Linux based Multi-Rotor UAV works with Mission Planner?

Comment by Tobias Simon on June 25, 2014 at 12:07am

Gary, I will provide them as soon as I can.

One problem with the U3 is that the I2C bus is pure bit-bang... thus, also the IMU Sensors are read using bit-banging, leading to quite some CPU load (as you can see in the htop view after starting the autopilot).

Noli, there is no support for it right now, but I am working on a MAVLink integration.


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

Join DIY Drones

© 2019   Created by Chris Anderson.   Powered by

Badges  |  Report an Issue  |  Terms of Service