Here's a fun little project I've been working on for ~6 months now. It started when I looked at my phone and thought this has everything needed for an autopilot - 3-axis gyros, accelerometers, magnetometers, GPS, fast CPU, plus a nice big touch screen and more wireless modems than you can point a stick at. The only problems are (1) it's a multitasking operating system, not real-time; and (2) needs extra hardware to drive servos and switch between manual and auto control.
I solved the first problem by buying a used Samsung Nexus S with a faulty screen (discolouration) on ebay for $80, installing a stable, bare-bones version of android 2.3, rooting it, and disabling CPU throttling. 50Hz servo update loops and 110Hz sampling loops are no problem - timing is reliable and it only uses ~5% CPU (using floating point everywhere and some bloaty object-oriented code).
Second problem was solved like this:
The Ardupilot legacy board doesn't actually run any ardupilot code - it's just a convenient and cheap way to get an Arduino and a multiplexer. It just takes servo commands from the phone and uses the Arduino servo library code to drive the servos. Most of its time is spent sampling the baro sensor. It samples at around 20kHz, and using 4096x oversampling I get 4 16-bit samples per second with an altitude resolution of around 15cm and noise of about +/- 30cm. The bluetooth link looks scary but works fine. It's done about 10 hours of autonomous flight with no issues, and only drops out if I take the phone at least 10 meters away from the plane.
Waypoints are selected on a google map interface:
Gains etc can be easily adjusted:
And, of course, a flight video:
Behind the scenes it runs the DCM + complimentary filter code. I've added some extra features over the last few months:
Autonomous thermaling (works well in warmer weather)
Hardware in loop simulation with X-Plane and MS FSX over WiFi
Wind and airspeed estimation
Dead reckoning (using gyros/magnetometer and estimated speed - can work through short GPS dropouts)
Android-to-Android Telemetry over WiFi or mobile internet (later requires sim with public IP - hard to find)
Features I plan to add:
Waypoint addition/modification from Android groundstation (if/when I can convince a telco to give me public IPs)
Fly-by-wire(less) over mobile internet (ditto)
Photo/video taking at specified locations with onboard camera (will require mounting under wing)
I'll post about some of these over the next few weeks.
Comments
Wow! Finally an android autopilot! Great work!