Hello everyone,
I'm not sure if anyone is interested but for my master's thesis in Aerospace Engineering I developed 3 new flight modes for ArduPlane that command a fixed wing aircraft to transition from level flight to hover flight and then attempt to hold stable hover (a.k.a prop hanging). Each of the three modes all have the same end goal but each uses a slightly different control strategy. Looking at the strengths and weaknesses of each of those methods was the focus of my thesis, but I was able to get decent results with all three using an E-flite Carbon-Z Yak 54 model. I made an attempt to keep all of the code easy to use in the spirit of the APM project so there are only a few extra parameters than need to be set and tuned for the hover modes to work in addition to the standard set of PID gains. I used an APM 2.5 and no additional hardware is needed for the modes to work (not even an airspeed sensor) but the modes only perform attitude stabilization at this point so there is no waypoint control or even fly-by-wire capabilities while the airplane is hovering. Theoretically, the same code should be able to command any fixed wing airplane to hover as long as the airplane has enough power and large enough control surfaces.
I posted a video of some of my results above and I have a github repository set up already if anyone is interested in the code. A copy of my paper is also in the repository which has more information on how I developed the control schemes. Be warned, this was my first experience with coding in Arduino and C++ so I don't make any claims to using good coding practices or even common sense compared to an experienced programmer. If you find yourself thinking "why in the world did do that?" it's probably because I didn't know there was a better way to do it. I was new to github too so I'm not totally sure if there is a good way to release a final version of the code but the "HOVER_ADAPTIVE" branch is the one with the final version. The other branches were just checkpoints along the way in case I severely messed something up and needed to revert back to a stable point in the code.
Unfortunately, since I started this project over a year ago, the code is based on ArduPlane version 2.68 so it is severely outdated but the concepts I used to implement the hover flight modes are fairly simple and could probably be transferred over to a newer version of APM: Plane fairly easily if someone wanted to.
Update (11/12/2013): It sounds like some of you have had trouble viewing my report via the github repository so to make it a little easier you can also access it HERE through Dropbox. Hope that helps!