[From Bruce Abbott (2014.01.07.1540 EST)]
My post this morning [Bruce Abbott (2014.01.07.1200 EST)] presented the example of a leaky bucket whose water level was being actively controlled against disturbances by varying the rate of water inflow. That example got me to thinking about the standard control task used by Bill and others to illustrate the operation of a control system. A reference position is marked on the computer screen and the user must move the computer’s mouse left or right to keep a cursor aligned with the target. Meanwhile, the cursor’s horizontal position on the screen is being affected not only by the user’s mouse movements but also by an invisible and smoothly varying disturbance. Thus the cursor is being erratically driven away from the reference position while the user attempts to compensate for this disturbance by moving the mouse in the opposite direction. After an experimental run, a control-system model is fit to the data, generating a set of points as a function of time that depict how the user would move the mouse to compensate for the time-varying disturbance if the user were behaving like the control system implemented in the model. The fit of model to the actual data is usually excellent.
Despite the excellent fit of model to data, I wonder whether the simple control-system model used generate the predicted data adequately captures what I perceive myself to be actually doing during a run. Supposedly, I am perceiving any error between the reference and cursor positions and moving the cursor so as to reduce this positional error. However, what I perceive myself to be doing is varying the rate of mouse movement in order to zero out the rate at which the cursor is moving. This apparent strategy is most noticeable when there is an extended period during which maintaining a zero cursor velocity requires me to maintain a steady rate of mouse movement.
Often a quick change in cursor velocity causes the cursor to move to the left or right of the reference mark before I am able to change the mouse velocity to compensate. In order to get the cursor back to reference, I have to overcompensate the cursor velocity change to “catch up.”
Now here’s the problem. The standard control model used in these demonstrations is a proportional controller with a “leaky integrator” in the output function. The leaky integrator is there primarily to eliminate an artifact produced by the fact that the computer simulation changes all values within the control loop in discrete time-steps. The sudden introduction of a large disturbance (e.g., a step function) cannot be countered instantaneously by any real control system, but the computer will happily compute instantaneous changes all around the loop. The leaky integrator on the output assures that it takes a finite amount of simulated time to develop an output that begins to oppose the effect of the disturbance. The leakage rate of the integrator is the primary parameter that is varied during the fitting of the control model to the data in order to maximize the goodness of fit (as measured by least squares).
The simple control system modeled in these demonstrations skips over the details of how the output of the system affects the controlled variable, which in this case is the horizontal position of the cursor. Somehow, the output affects the position of the cursor (in combination with the effect of the disturbance). A more detailed model would have to include some real physics: forces generated that accelerate the mouse, altering its velocity, which in turn changes its position. (Another part of what that leaky integrator output does is loosely mimic the effect of inertia that would be present in a physical system owing to its mass – or so it seems to me.)
So here’s what I’m wondering about. Given my perception of what I’m trying to do in order to keep the cursor at the reference location or return it there when I fail, is this single-level model an adequate representation of how I am actually controlling the cursor position? It seems to me that a hierarchical model (perhaps like the one implemented in the inverted pendulum demo) might come closer to modeling how I am actually trying to control the cursor. I seem to be varying mouse velocity (not mouse position per se) as the means of controlling cursor position.
This sort of organization solves another problem that’s been bothering me. In the automobile-driving example, a side-wind acts as a disturbance, tending to push the car to, say, the left of the driver’s reference position within the lane. That error produces as output a change of steering-wheel angle, which changes the angle of the front wheels of the car, generating a small sideways force that resists the disturbance. However, if the driver were to move the car back to the reference position within the lane, the error would disappear and the driver would re-center the steering wheel. To keep the wheel turned to resist the disturbance, there must be a residual position error (how large or small depends on the system’s loop gain). But I don’t perceive myself as having to remain slightly off my desired position in order to keep the steering wheel turned and thus resist the effect of the wind on the car’s position.
I am aware that including an integral function in the output could be used to zero out the positional error (small errors continue to summate in an integral output, leading to changes in output that stop the error from accumulating, which occurs when position = reference). But hierarchical control can accomplish the same result.
Bruce
