DIY Flight Controller with Arduino + Linux

clolsonus

Well-known member
After collecting dust on my desk for literally a year, I finally got the barometric pressure sensor drivers worked out on my DIY flight controller project. It should be all set to integrate into an airplane.

IMG_20191118_064616925.jpg


I designed the base board and get it fab'd at oshpark:

front-render.png


The teensy (3.2) handles all the real-time sensor I/O and PWM servo outputs.
I use an inexpensive MPU9250 breakout (+ pressure/temp sensor) from bang good.
It has onboard power regulation and main battery voltage sensing.
It supports SBUS receiver input, and 8 pwm output channels.
The heart of the system is the beagleboard "pocket beagle". This is a tiny (in size) linux computer that runs the flight controller app. The flight controller code can do things like autolaunch, autoland, fly circle holds, compute and fly survey routes, hold altitude, and hold speed. The flight code is a hybrid of C++ and python (running on board the pocketbeagle), so the code can be extended in either language. It has a mission/task system that is python based, so you can actually write core python code for this system without needing to recompile the app.
It is not a pixhawk or ardupilot, it's a completely independent ecosystem.
All the code and board designs are available under the MIT open-source license.

https://github.com/AuraUAS

The entire AuraUAS software system also runs on the bolder flight systems flight controller hardware (which is a spin-off from the U of MN UAV lab.) The hardware above is sort of a DIY version of the flight controller our UAV lab runs.

I know that not too many people are interested in diving this deep into flight controller hardware and software ... especially when there are so many super cheap simpler options available (and px4 is there for anyone that wants to do full blown uav stuff.) But I like my system because I made it myself and I understand it from end-to-end. Also it's *way* simpler than px4 which is intentional. Px4 supports every board, every sensor, every type of aircraft/multi-rotor/ground/surface/heli/space vehicle, every use case, every person's idea ... this is great, but their code complexity has grown to insane levels! (My personal characterization ...) ;-) In my recent years I have come to value simplicity in code and simplicity in design ... especially for flight critical components.

I think my AuraUAS system could be interesting to people who know python, people who want to build something up from scratch, people that like linux, and people that want to start learning with something that is fully functional, but slightly simpler.

Thanks for reading all the way down to here! :)

Curt (University of Minnesota UAV Lab staff engineer.)
 

clolsonus

Well-known member
Looks way more complicated than anything I could do. Keep it up

Thanks for the kind words. We are all starting from the same place and doing our best to learn as we go. I started working on the first parts of this project way back around 2005! Back then I couldn't solder two wires together. :)
 

Matthewdupreez

Legendary member
Thanks for the kind words. We are all starting from the same place and doing our best to learn as we go. I started working on the first parts of this project way back around 2005! Back then I couldn't solder two wires together. :)
hey has this worked well. I am really into arduino etc... how is it performing? @clolsonus
 

clolsonus

Well-known member
hey has this worked well. I am really into arduino etc... how is it performing? @clolsonus

I have to admit that with the covid isolation and some different work priorities, I haven't had nearly as much time to fly and work on this as I'd wish, but it's all working pretty well. Some of the last things I did was to add our premium EKF (attitude/position estimator) to the arduino code so it's running right on the teensy 3.6/4.0. I also added some calibration logic and onboard mixing (the mixing stuff is similar in spirit to the FT aura board where all the smarts are onboard the airplane and you just need a simple transmitter on the ground...I've been advocating that for years, so I'm glad to see others picking up on it!) We don't need to spend extra $100's of dollars on more channels and more gizmos on our transmitter when we do the same things with a few lines of code onboard the airplane ... and automate much of that so what we want is just happening automatically or after a few simple setup steps.

This past spring I adapted the code to run a model boat around the lake. Except for fouling the props with weeds, I thought it worked pretty well and tracked a lot better than most of the ardu-rover projects I've seen posted online.

Happy to keep answering questions if anyone wants to venture down this path, or share code/ideas if anyone wants to make their own path. I find it immensely rewarding to see my airplane do the stuff I programmed it to do, but I know this is not for most people. I have a special kind of sickness. :)