With quadcopter kit on loan from the University Electronic Engineering department my friend and I decided we wanted to try our hand at writing our own flight software for an Ardupilot unit.
First we determined the pin mapping and then wrote a small program to ramp the motors up and down, but not fast enough for takeoff. This success got us eager to leave the ground. Because we were working in the dining room of our rental house we tethered the quadcopter with strings to three 10kg plates and slowly increasing the max speed until we got lift off. We knew that it wasn't enough just to spin the props and hope so we started making a control loop to hopefully sustain at least a little hover. Not being control engineers (if engineers at all) we weren't familiar with PID loops yet, let alone more complex schemes. We simply programmed it to adjust rotor speed according to pitch and roll outputs from the accellerometer. Looking back at it real simple stuff. if(not_level){make_level();} type stuff, but we were FLYING!
As you could imagine this did not yeild a particularly stable result. Our main problem was with hunting oscillation. If, as happened a few times, this oscillation went undampened, a fairly scary crash would ensue (thank god for the tethers) but we weren't going to let risk of injury stop us. The next day after doing a bit of googling we managed to get a rather unsophisticated PID loop running. During the hover we even got it to yaw back and forth before landing again. Not all of the stability issues were gone, I suspect tuning was neccessary, but it did reduce the pucker factor significantly. Anyway it was time to return our toy to people doing real work but it was good fun and we learned a lot.