Odroid U3 based Quad-Rotor


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.

E-mail me when people leave their comments –

You need to be a member of diydrones to add comments!

Join diydrones


  • Hello,I am a college student. I am intresting in this programm. When I download the code form the Github,compiling in the Ubuntu is right,but when i was command with "./autopilot/services/autopilot.py" ,it turn out a series of error message. Can you help me? Thinks!
  • Hi Mohamed, I am right now working on code reorganization.

    This step should allow to implement any part of the system (data acquisition, data fusion, filtering, control, flight logic) as a separate process in your favorite programming language.

    Currently, only the basic data path from sensor reading to basic rate control is implemented in C.,

    Anything else like angular position control, North-East speed/position control and the flight logic is Python ;)

    I also tried some Python/numpy kalman filter code, but that ate too much CPU.. had to go back to a C implementation there.

  • Hi,

    Nice work, Tobias. What's the progress so far? and how much is the average flight time?


  • @tobias.. the adapteva/parallela shop reopened again today and has stock again in case you were NOT in time last friday... to snatch a couple


  • This board looks interesting! Thanks for sharing

  • Hi Tobias.

         have you looked at the parallela OpenCL 16 core boards yet?



    ps just got 2 of these in...

  • BTW:


    This is our Gumstix Overo based "PenguCopter" :-)

  • Yes we did these kinds of measurements. We basically logged every control step into a file and after the run, looked at the time deltas.

    If you set the correct scheduling policy and priority via sched_setscheduler, then there is (nearly) no influence of additional load running at a lower priority. Thus, you can see 100% CPU utilization but the time deltas are not influenced due to correct scheduler behavior (you need at least CONFIG_PREEMPT in your kernel config).

  • Ok understand, so the shield is basicaly PWM interface for Odroid and kind of I2C bus for sensors, but the values are calculated directly on board.

    Have you tried already what I described above? To put some CPU load, if you see some time leaks? We were able to see it from the logs, where we measured time between two cycles of calculation values for PWM. If there were no additional load the values were stable within 100microseconds around 5 ms.  Once the load was increased the time was jumping around about 3ms. And sometimes it was increased up to 20ms.

  • In the lower picture it should be "LLC 1.8V/3.3V", not 5V...

This reply was deleted.