# What is the correct architecture of quadcopter control?

I want to make a quadcopter flight controller for my University project. Lately I was searching for systematic architecture of control system used by quadrotors. I have implemented one of the architectures which is shown below.

The block diagram:

The algorithm:

Here is what i understood and implemented:

main loop:
for loop(5 times):
sample_current_Angle()
sample_RC_input()
required_Rate = Angle_controller() ---- (P controller)

Rate_controller()     ---- (PID controller)
write_motor_pwm()
sample_body_rates()


According to this when i keep my quadcopter on strings (opposite arms on strings - testing of single axis at a time), the quad behaves perfectly fine, what i mean is : if you give 30° input through RC, the quad goes at setpoint and holds the angle perfectly and as soon as i leave the RC stick (setpoint 0°) the quad levels up at 0, my PID tuning is perfect (i feel so) as there are no overshoots and the response is quite fast. BUT, when i left it for independent flight, it seems to be nowhere perfect, it does lift but very difficult to control. I need a stable takeoff just like ArduCopter. I think that I am lacking something but can figure it out. Any thorough guidance will be very helpful. If someone wants to look at my code, just mention it i'll add it (its about 450 lines of arduino code).Thanks !

• maybe the strings are providing mechanical damping .... maybe I'm misunderstanding how the strings are attached ... are you using only one string for testing, with each end tied to an arm and the middle of the string fixed to the ceiling? – jsotola Sep 7 at 18:10
• Is it only during lift off? Because then it might be due to ground effect, which changes the thrust characteristics close to the ground. – fibonatic Sep 7 at 18:21
• @jsotola The strings are on diagonal arms only so that other diagonal can be tested and then i swap both of them. And the strings are actually the fishing line, its light and strong so i thought to use it, I wonder how such string can provide damping... – Sajil Sep 8 at 2:24
• @fibonatic Actually its nowhere that stable that i can give it more throttle, if I do its surely going to break apart. As per ground effect is concerned, I am aware of it so i put a 2 feet high box under it to keep it off-ground during takeoff. But still, no good results for independent flight. (Can you tell me how managing ground-effect has to be done in the code ?) – Sajil Sep 8 at 2:29
• I believe often people just hardcode the take off, i.e. full/high thrust on all rotors for a short time. So for now I wouldn't worry about it. For now you even hold it when "launching". This might also give more feel of how stable the controllers are with less change of breaking the quadcopter. – fibonatic Sep 8 at 4:59