Quote:
Originally Posted by EricH
Perhaps I should take a stab at explaining exactly what it means as we're referring to it...
...And reducing the variables (very few of the ones mentioned actually apply in closed-loop control).
Actually, I'll start out with: The only variables listed that would have ANY effect at ALL on, say, a shooter, would be the battery voltage (which really only affects open-loop controls--unless it's totally dead) and the load on the motors (they do have to take a bit of load when the disc goes through--but that's why you have closed-loop control). All of the others have no effect on the control system, or should have been dealt with in the design of the robot (like bearing stress--just get a bearing rated for the load, don't worry about the bearing stress).
Closed-loop control goes something like this: The cRIO sends a command to the speed controller to have the motor go speed X. The controller boosts the motor to speed X (as the controller sees it) by boosting power. A sensor on the shooter wheel indicates speed and sends a signal to the cRIO indicating the actual speed. The cRIO then compares the actual speed to the set speed and then tells the controller to increase power, decrease power, or keep the same power.
cRIO->Controller->Motor->Sensor->cRIO->Controller...
The program could look something like:
speed = 100
if (sensor < 95)
//speed increase
else if (sensor > 105)
//speed decrease
An open-loop control, by contrast, goes:
cRIO->Controller->Motor
and looks like:
speed = 100
in code.
|
This is a textbook bang-bang velocity controller with deadzone - definitely a closed loop system. What I came here to say is that while any control system has to control a setup that does indeed have hundreds, nay, thousands of variables, the magic of a closed-loop controller is that it will compensate for either not knowing them or knowing them badly - your classic open-loop controller assumes it has perfect information about its system, and that the system itself is perfectly modeled by your controller; it has to, since it has no feedback from the system it is controlling. The trick is, in order to actually get a perfectly modeled system, you DO have to consider all those pesky variables, or just tune it for a particular circumstance and pray it never leaves that island of stability. A closed loop controller can have a much rougher model of the system its controlling, and will magically find parameters that optimize its model (some of the really neat ones can even change their models to better adjust for different control regimes). Of course, you do have to worry about things like lag and complexity in your controllers, as well as having to sense things about the system you're controlling to provide feedback, but thanks to the better modeling abilities of a closed-loop controller, it can be operated much closer to instability, which increases the rate at which it converges to the desired output. In short - if you need speed and precision, go closed-loop.