Exercise: Animated Curtain

The main objective of this exercise is to explore the balance between human input and programmed behavior in a visual machine performance. The sample simulation for this exercise is a curtain formed by a variable number of actuators driving suspended chains of bodies. It was chosen to allow for an arbitrary degree of complexity such that direct control is not feasible, but still within the space of machines we could conceivably build.


Screen shot of the Webots world view with the sample project loaded.

Underactuated Systems

The sample machine has many uncontrolled freedoms in the hanging chains which exhibit their own dynamics. Considered as a single robot, this is an underactuated system. A fully actuated system is one in which every degree of freedom is controlled. For example, a typical industrial robot arm has six joints, each with an servomotor actuator with position control. Within the workspace the end effector has six degrees of freedom and the pose is fully controlled. Such system frequently manipulate parts by gripping the part to rigidly connect the object kinematics to the robot.

In contrast, an underactuated system has degrees of freedom which cannot be directly controlled. Our specific interest is in systems with more degrees of freedom than actuators, resulting in one or more passive freedoms. We utilize this kind of dynamics constantly, e.g. when pushing an object across a table using one fingertip, the point contact has only two freedoms but the object has three planar freedoms, and we use our experience of friction and dynamic control to stabilize the action.

In some sense, every robotic system is underactuated. At the core, the very notion of rigid body system is an abstraction which omits freedoms. But also in practice, robots which are mobile or which manipulate objects come into contact with a great many external freedoms which may transiently become part of the robot system. E.g. a mobile robot might need to open a door, or push around objects, or grasp a flexible or articulated object.

As a creative practice, passive freedoms add dynamic kinetic possibilities to a machine in a parsimonious way. Consider the use of clothing and hair in animation: the core expressive movements of the body are amplified through the motion of the attached soft materials.


After this exercise, you should be able to:

  1. Program machine behaviors usable by a human performer.

  2. Develop a simple narrative concept.

  3. Practice, perform, and record a short segment of choreography.


Creative Constraints

The curtain model is provided as a recommended system, although you are free to choose another or design your own underactuated robot. The curtain model may also be configured for a larger number of elements as desired.

Whichever model you use, the essential principle to observe is hybrid autonomy: the system should have its own behaviors which are shaped by human input. These behaviors should include a mix of programmed movements and natural dynamics.

General Recommendations

  1. Try experimenting with the given system. See if you can develop different modes of expression by applying different inputs over time.

  2. Formulate a narrative conceit. This doesn’t need to be manifest in the form, but sometimes is useful as a title.

  3. Identify new activation patterns which could be useful for the narrative and program them into the controller. These could be as simple as the fixed patterns in the demo, but could conceivably involve significant computed animation.

  4. Practice with the augmented system to create a short performance to record.


  1. A paragraph briefly describing your objectives and outcomes in a post on the RCP project site, either public or private.

  2. Short video clip (less than 60 seconds) of human and robot performance, submitted as an embedded video. Small .mp4 files may be directly uploaded, or you may embed a third-party streaming service.

  3. Zip file of your Webots project. Please give distinctive names to your modified worlds, controllers, and protos (or delete the extraneous ones), and please preserve the folder structure (e.g. worlds/, protos/, controllers/) so it could be unpacked and used.