PX4 as Student and Research Platform
PX4 [ http://diydrones.com/profile/PX4 ]
May 27, 2013
The image shows the successful flight of an extremely simple fixed wing controller tutorial [ https://pixhawk.ethz.ch/px4/dev/apps/ex_fixedwing_control ] (flies GPS waypoints or in manual mode, has support for MAVLink parameters, runs automatically synchronized to the attitude filter). Simple can mean many things, in this case we are referring to simple for hobbyists or students interested in estimation and control. Developing on PX4 is simple in the same fashion as writing a "Hello World!" application from scratch is simple on a normal Unix or Windows machine (the equivalent is the PX4 "Hello Sky" tutorial [ https://pixhawk.ethz.ch/px4/dev/apps/px4_simple_app ]). To write flight-control code there is no need to dig through the whole codebase, or to mess with the main loop (and introducing unintended side effects).
Of course it is still flexible enough to run monolithic designs, and APM Plane and Copter are fully operational [ http://copter.ardupilot.com/wiki/px4-firmware-install-mission-planner/ ] (thanks to Andrew Tridgell and Randy Mackay) and are the recommended flight app at this point for average users.
The open source autopilot field has evolved recently quite a bit, and while everybody these days can hack together a flying quadrotor within a few days, taking a "simple" hardware platform like Arduino or Maple means just reinventing the wheel, since people have done it already. Not many of these new projects ever make it even close to what e.g. APM provides. To really improve over the state of the art, its important to focus on the flight code and to make it fly better, instead of creating yet another half-done piece of hardware.
The whole rationale behind PX4 is different: Similar to VxWorks [ http://en.wikipedia.org/wiki/VxWorks ] for the automotive and aerospace industries (guess what the Curiosity rover [ http://en.wikipedia.org/wiki/Curiosity_(rover) ] runs and guess what most likely controls the vehicle you're driving), we're trying to provide a real-time, flexible base platform (based on NuttX, which is POSIX [ http://en.wikipedia.org/wiki/POSIX ] -inspired like VxWorks) and add common library blocks like mixers, estimators, sensor drivers and controllers to it. But if a new developer want to drive a different platform (a rover, boat, blimp) with it, or run his own flight controller, there is no need to rip everything apart - it can just be added and run as application, without affecting other users of the platform.
For the same reason the linked tutorials also look so similar to normal Unix programming examples. And there is a quite successful case study for this platform based approach - if you look at the PX4 interprocess communication [ https://pixhawk.ethz.ch/px4/dev/shared_object_communication ] you will note that working with PX4 is in many ways similar to working with ROS (Robot Operating System) [ http://www.ros.org/ ] in classic robotics.
If you want to get your hands dirty, here the most relevant links from the text again: