Bill Powers' Home Page

I have developed a program for controlling a "classical" LX200 telescope so it can use visual information from a video camera to refine the tracking of satellites. Download it, with a full writeup, by clicking below. All my programs run on PCs only. NOTE THAT THIS IS A NEW VERSION BUT ITS FILES HAVE THE SAME NAME AS THE PREVIOUS VERSION. IF YOU DOWNLOADED THIS PROGRAM PRIOR TO MARCH 8, 2005, YOU SHOULD DOWNLOAD IT AGAIN AND STORE IT OVER THE OLD VERSION (all files). The new name of the zip file is, but the parameter file is still named Param10f.txt (sorry).

Satellite tracking program

My main work has been on control theory as applied to human behavior. The rest of this page concerns that work.

To find out more about The Control Systems Group and about PCT, 
click here

Papers available here:

What PCT is about

On Computing Output

About SR theory and PCT    [Plain text replaced with .html version]

Evolutionary origins of purpose    [Plain text replaced with formatted and illustrated version]


Demos for downloading

[Note: DOS programs will not run under 64-bit Windows.]

A demo of a visual-kinesthetic control system

A demonstration program for PC compatibles called "armv2.exe" is downloadable from my web site. This program is a simulation of a human arm that reaches out to touch a user-movable target in three dimensions. The arm has three degrees of freedom (two at the shoulder and one at the elbow). Simulations of the tendon and stretch reflexes, employing a reasonably realistic muscle model, generate torques that drive the arm; the response of the arm to the torques is calculated using physical dynamical equations. The angular accelerations of the limb segments are integrated twice to obtain arm position. This produces a position of the "fingertip" which is ray-traced to form two retinal images in which both the target and fingertip positions appear. These images are used to derive x, y, and distance signals, which are controlled by a visual system that varies the reference signals entering the three kinesthetic control systems (i.e., the "reflexes").

This model differs from others in that there are no inverse dynamic or kinematic computations in it. The actual code for the control systems is no more than 50 lines long, By far the largest part of the program is involved in the graphical presentations, in implementing test modes, and in computing the response of the physical arm to torques applied at the joints. All the control system calculations are done in integer arithmetic -- no great precision is required. I have slowed (!) the operation of the program with a delay functon so it runs in real time on a fast computer -- otherwise the graphical plots go by too fast to see easily.

The file "armv2.exe" is a self-extracting zipped file. It expands into the runnable code, the source code, and header and object files needed for compilation, and a help file, The program was written in Turbo C 2.0. The runnable program is arm2.exe. Click here to download the file.

Arm Model     [See also Little Man One — DOS at]

A new muscle model

This is a paper (unpublished, all rights reserved) that proposes a new muscle model to replace the one that has been used in the literature for many years. The old model uses linear spring elements and a signal-driven force generator with the force being independent of muscle length. This model fails to reproduce the basic observations of muscle behavior such as the Hill curve found in quick-release experiments. The new model makes the length of contractile elements depend (negatively) on the driving signal and also uses springs with the exponential force-length characteristic that is observed for passive stretch in most real muscles. All the main observations of muscle characteristics are reproduced by this model with one set of parameters. A C function is provided that can be used in computational models. 

Muscle Model paper     Illustrated at

A demo of an "artificial cerebellum"

Also now available at my ftp site is the Little Man demo described above, with an "artificial cerebellum" added at the second kinesthetic level of control. This addition makes the model adaptive; given a randomly-moving target, it learns how to reach for it. The visual level does not learn; however, the kinesthetic control systems used by the visual level begin with only a rudimentary ability to position the arm, and then gradually gets better at it. The file is a self-extracting zipped file, armac.exe. The executable program is armft1.exe Click below to download.

Arm with Artificial Cerebellum

A simulation of crowd behavior

Next is the "crowd" program. This program simulates up to 255 individuals moving around on a field, moving toward a destination, following another individual at a specific distance and maintaining a specific direction, and avoiding collisions with each other and with stationary obstacles. Each person contains up to six simple control systems. There are preconfigured setups showing, among other things, a "guru" being followed by several "disciples," a "man" and a "dog" at heel, a rabble converging on the same destination and competing to occupy the center, a "mother goose" followed by a train of "goslings", and other examples of people moving in relation to other people and things. The user can create new setups and save them in named files. The file to be downloaded is "", a zipped file which expands into a collection of files. It is recommended that this file be moved to a dedicated directory (suggested name, "crowd") and executed there. Then crowdv2.exe can be deleted. The name of the runnable program is just crowd.exe. Click below to download.

Crowd simulation     See also Crowd — DOS at

Demo1: an interactive introduction to control

Demo1 is intended as a self-paced introduction to the phenomenon of control. In a series of instructional screens the user is guided through the basics and is called upon to exert increasingly informative types of control. First there are simple compensatory and pursuit tracking, followed by extension of the same principles to controlling orientation, size, shape, the pitch of sound, and other kinds of variables. Some basic principles are illustrated, among them being the principle that living control systems, like all others, control their own perceptions by varying their actions in answer to environmental disturbances. They do not control their actions.

The file to retrieve is 1stdemo.exe, a self-extracting zipped filed which should be put in its own directory and then run to expand into the working files. The runnable file is called demo1.exe. Click below to download.

Demo1     See also DEMO1 and DEMO2 tutorial programs — DOS at

Demo2: Modeling control

In Demo2, a block diagram of a control system is built up step by step. At each step, the user can manipulate the mouse to explore the properties of the model, and change parameters from the keyboard. After the complete model has been constructed, the program finishes by showing how the behavior of the model can be matched to that of a real person.

The file to be retrieved is 2nddemo.exe, a self-extracting zipped file. It should be put in its own directory, then run to expand into the working files. The runnable file is called demo2.exe. Click below to download.

Demo2     See also DEMO1 and DEMO2 tutorial programs — DOS at

Inverted Pendulum

This program, pendulum.exe, is a demonstration of hierarchical control, an application to a classical control problem. A pendulum is mounted on a cart so it can swing through 360 degrees. A motor on the cart can accelerate it left and right, and sensors are provided for linear acceleration, velocity, and position of the cart, as well as angular acceleration, velocity, and position of the pendulum. A six-level hierarchical control system controls bob position relative to a reference position the user can set with the mouse, as follows:

1. The bob's angular position error is corrected by varying the angular velocity reference signal;
2. The bob's angular velocity error is corrected by varying the angular acceleration reference signal;
3. The bob's angular acceleration error is corrected by varying the cart's position reference signal (with gravity providing the acceleration);
4. The cart's position error is corrected by varying the cart's linear velocity reference signal;
5. The cart's velocity error is corrected by varying the cart's linear acceleration reference signal;
6. The cart's linear acceleration is varied by varying the motor torque.

Click below to download the self-extracting zipped file.

Inverted Pendulum     See also Inverted Pendulum — DOS and Windows at


Controlling perceptions in arithmetic learning

The message of this program is that when we solve arithmetic problems, we do not learn to emit motor responses, but to produce controlled perceptions. In this program the user moves a mouse to make a cursor point to the right answers to 20 simple arithmetic problems. The first time through, the mouse moves the cursor directly and the result seems to support the idea that we learn to emit reponses to questions. The second time through, there is a disturbance that "helps" the mouse move the cursor. The result shows that you can indicate the right answer even though the correlation between your "response" and the indicated answer is zero (!).

The zipped self-extracting file is "lrn.exe". The runnable program file is "plenum.exe" (named after the publisher of the article, which was in Levine, R. L. and Fitzgerald, H. E., Editors (1992) Analysis of dynamic psychological systems, Vol. 2; Chapter 13: A cognitive control system. p. 327-340.(New York: Plenum Press)

Click below to download the program.

Learn Arithmetic

An Illusion of Adaptation

Adaptation in a control system is most often modeled as a method for changing system parameters when the environment changes its properties. However,an extremely important property of classical negative feedback control systems seems to have been forgotten by modern control theorists: the ability of such systems to work very well over a range of environmental properties, without any change in their internal organization. In the 1960s, McReuer and Jex concluded that human controllers necessarily change their internal frequency-response characteristics when the transfer function of the task changes from a proportional to an integral to a double-integral response. This has been taken more or less as Gospel ever since then. The present demonstration shows this to have been a mistake.

In this demonstration, written in Delphi 6.0, a two-level hierarchical control system is set up to apply forces to control the position of a mass suspended on a spring, with damping. The gain of the two levels (position and velocity control) is adjustable while the simulation runs over and over, as are the mass, spring constant, and damping coefficient of the load.

The program sets the initial position and velocity, then suddenly changes the reference position from 0 to a constant value (also adjustable). The first few seconds of system behavior is plotted, showing position and velocity of the mass, and the force applied by the hierarchical control system. After the plot is generated, the initial conditions are reset and another run commences. On a high-speed computer there are several runs per second.

If you set the two gain controls to maximum, you can examine the behavior of the system with each of the load parameters set (for example) to maximum while the other two are set to minimum. You will see that the applied force changes radically in dynamic character, while the position of the mass approaches its final value near the position reference level in almost the same manner every time.The control system appears to be adapting to the changing load characteristics, yet in this case we know it is not doing so: the only two parameters that can be varied are the position and velocity gains, and they remain the same unless you change them.In all other respects the two levels of control are incapable of altering their characteristics.

McReuer and Jex used Bode plots, plots of amplitude and phase response, to demonstrate the apparent adaptation of human subjects to changing load characteristics.The present simulation provides for automatic generation of Bode plots with the load characteristics cycled through the basic choices:maximum of mass, spring constant, and damping with the othner two parameters set to minimum, which creates a close approximation to double integral, proportional, and single integral response, respectively. The user can adjust the two gain parameters before running the Bode plots, to see their effects. Settings of the load parameters are overridden while making Bode plots. the Bode plots can be computed on command between input and output as follows:

Input: --- track error
Output:-- force output

Input: ---track error
Output:--mass position

Input: ---target position
Output:--mass position

This demonstration does not rule out human adaptation to changing environmental properties, but it does show that a wide range of properties can be handled by a hierarchical control system without the need for any adaptive changes in controller parameters at all. Experimental measurements would show apparent changes in this hierarchical control system, but they are apparent only, not real.

Click below to download this file in zipped form. The essential Delphi source code files and the executable file are included.

Adaptive Illusion

Squaring the circle

This demonstration illustrates what is meant by saying that behavior is the control of perception (meaning, behavior is the visible part of the process by which we control our perceptions). A mouse is used to draw a square on the screen. But between the mouse and the screen there is a transformation which requires that the mouse move in a circle or a triangle -- no matter what figure is being drawn! A writeup and the executable code are contained in the zip file which you can download by clicking below.

Squaring the circle     See also Square Circle — DOS at

Stopping a car

This is another illustration of hierarchical control, albeit with only one system per level.A car travelling at an adjustable speed is stopped by a driver sensing distance to the stopping point, velocity, and deceleration, The three-level control system apparently adapts to a wide variety of conditions, but without any internal change in its parameters. It does not compute the brake pressure required to stop in a given place; instead it employs the principles of negative feedback control to achieve this end without any inverse dynamic or kinematic calculations.

Stopping a car

Multidimensional control

This file contains a paper comparing some features of engineering psychology with PCT. The included paper was presented at the 19th annual meeting of The Control Systems Group at Marymount College in Los Angeles, July 23-27, 2003.

Also included is a simulation of multiple control systems sharing a common environment.Each control system computes a perceptual variable which is a weighted sum of all of the environmental variables involved, The weights are selected at random. The output of each control system affects all of the same environmental variables through a matrix that is the transpose of the input weight matrix. The result is that each control system can keep its own perceptual signal close to the value of whatever reference signal it is given, independently of all the other systems. This is a "worst case" scenario; an observer seeing only the environmental variables could not tell what variable any of the control systems was controlling. Source code (Delphi) is included. The paper contains a writeup, near the end,

Click below to download the file.

Multidimensional control     See also Multiple Control Systems / PCT and Engineering Control Theory at

E-coli reorganization principle

Part of PCT is a proposal that certain basic error signals drive a process of reorganization. The process itself is modeled after the way the bacterium E. coli finds its way up gradients of chemical attractants. E. Coli cannot steer, but it can periodically tumble, changing its swimming direction at random. By tumbling sooner when the chemical concentration decreases and postponing tumbles when it increases, E. coli can make its way toward the source of the chemical very successfully. This demo allows the user to play the part of E. coli, tapping the space bar to change the direction of movement of a spot on the screen to "steer" it to a target circle.

The changes of direction are completely random, yet the moving spot can be directed toward a goal-position quite reliably.There are implications of this principle for concepts of self-directed evolution, where the timing of mutations rather than the specific mutation is the important aspect of reponses to selection pressures.

E. coli reorganization     See also E-COLI — DOS at

Pursuit Tracking and Analysis

This program conducts a pursuit-tracking experiment and then semi-automatically adjusts the parameters of a control-system model for best fit. A writeup is included, along with the Delphi source code and the executable program file. The package is zipped. Click below to download the file

Pursuit Tracking & Analysis     See also Multiple Control Systems / PCT and Engineering Control Theory at