Tuning a Custom (non-ardupilot) Nano-Quadcopter Controller

What is the best way to tune a quadcopter PID controller?

I designed a custom quadcopter. I cannot get it to hover. The firmware is on GitHub.

Photos and videos of the quadcopter are available on Drive. Its dry weight is 175g and runs off a 75g 2S battery. 1303 5000kV motor. 3" Two-Blade.

I am looking through the ArduPilot repo for inspiration, but I hope someone might be able to point out an obvious flaw in the mean time.

I have spent many hours trying to tune the controller by eye. I would like to think that one of the parts needs to be changed in order to make this work.