I am designing a helium balloon which implements a control system that can expand and contract the balloon using a motor, thereby increasing or decreasing buoyancy and, subsequently, acceleration. I want to be able to send the balloon to a target altitude without overshooting. I initially thought of using two PID controllers:

  • First PID compares actual and target altitude and outputs a target velocity
  • Second PID compares actual and target velocity and drives the motor

This approach has been problematic, because the rate at which acceleration changes as the motor expands or contracts is about $\frac{1}{6} \frac{m}{s^2 \cdot s}$ at most. Tuning the system typically results in wild overshooting and oscillation, even when using Zeiger-Nichols tuning heuristics.

My question, then, is what control system would be best to ensure I don't overshoot my target altitude? I still want to approach my target quickly, but need to make sure I can reduce speed before oveshooting. I have researched LQRs and Full-State Feedback controllers, but I don't have a mechatronics background and found the material to be quite confusing. Before researching further, I want to make sure I spend my time researching the best-fit solution for this problem.

Thank you very much in advance!


1 Answer 1


Two thoughts occurred to me when reading your question:

  1. Although I haven't analyzed your specific problem, I wonder if it is beneficial to have two full PID loops. In motion control applications, it is common to have a position controller whose output feeds into a velocity controller, but typically one of these controllers will be PI (or PID) and the other will only have a proportional term.

  2. Because you have a physical system (and not just a model on paper), you have physical limits. Classical control theory assumes linear systems, but as you've noted, you can only change your system at a certain rate - this is called saturation, and it is a non-linear effect. To know if your system is in saturation, you can check your acceleration rate (or rate of change of acceleration, in your case?) and see if it's at its limit. When you're asking your system to change faster than its capable of changing, you will almost certainly introduce overshoot.

    One way to avoid this is to limit your reference to values and rates which you know your system can achieve. For example, don't ask your balloon to climb to 1000 ft instantaneously. Instead, ask your balloon to climb to 1000 ft over a period of many minutes. Depending on your system dynamics, you many need to apply acceleration and jerk limits as well.

  • $\begingroup$ I altered the Altitude controller to include only a P-term and that works a treat! Thanks for help! $\endgroup$
    – Instakat
    Commented Jun 23, 2019 at 0:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.