> The danger of the right-half-plane zero is that it lures you into reacting to it, but that is precisely the wrong thing to do. Attempting to apply a new control input to cancel the inverse response only sets off an even worse chain of events, where the resulting secondary inverse reaction becomes even more severe, requiring even more corrective action, until finally you’ve slammed into the ground.
> In this situation, the flight controller’s only option is to ignore the initial misdirection and wait patiently until the airplane eventually begins to climb as intended.
Of course that is easier said than done; adding a sleep() to your control loop to ignore the initial misdirection is also very bad. The right way to solve this is to not just tell the control loop to "go up", but to plan a realistic trajectory that the control loop can execute. That way, the error between the desired trajectory and the actual trajectory will be much smaller, and the closer the error is to zero, the less chance of a control loop to go wild.
Of course that is easier said than done; adding a sleep() to your control loop to ignore the initial misdirection is also very bad. The right way to solve this is to not just tell the control loop to "go up", but to plan a realistic trajectory that the control loop can execute. That way, the error between the desired trajectory and the actual trajectory will be much smaller, and the closer the error is to zero, the less chance of a control loop to go wild.