I built my own quad from scratch using an alu frame and decided to control it using the ardupilot mega that I have lying around. I loaded the arducopter NG2 code on this and took it for a couple of flights, noting its behavior and how it felt like controlling it. My intentions are to make this a platform that is really easy to control from first person video too, as well as 3rd person "in the field" of course.
Although the AC code is already more than suitable for video flying, I conspired with my colleagues. They gave me some tips and the result is the most boring quadcopter ever :)
The video above shows some progress in that direction.
To describe the changes: I prepended a 'velocity' controller before the orientation controller that was already there. The arducopter measures the angles of orientation and continuously updates motor speeds to ensure it maintains some desired angle, set by the sticks. So in this case, I don't control the angles directly, but I control the velocity projected onto the xy plane that I want this quad to have. Altitude is still managed manually.
The GPS controller in turn is now attached to the velocity controller. So any offset in the position results in some desired velocity towards the waypoint. The quad starts to accelerate by outputting some angle, maintains the velocity towards the waypoint and as it approaches, starts slowing down such that when position == waypoint, speed == 0 too. Using angular control only this is much more difficult, because you have to play around with aggressive D-gain settings to get the quad to stop closer to the waypoint.
The quality of your experience using the velocity controller is dependent on the quality of the GPS (doppler effect speed readings?), the quality of the GPS signal that you are receiving, the quality of a magnetic compass, the frequency of the GPS output (5Hz is a bit low) and of course as usual the PID settings. So quite a number of factors there.
I use a switch on the tx to control the mode I want to fly in, or switch back when it behaves erratically, indicating some possible problem with GPS reception or compass readings.