How it works

The arms share the same kind of body, but not the same way of deciding what to do. We gave each one the control its part of the installation needed, then connected their movements into a loop.

A shared setup

Three SO-101 arms sit around a set of printed tracks, a cup, and a salt tray. Bandit picks the ball up from the tray and loads the upper track. Iris catches it in a cup and tips it onto a rocking section. Echo moves that section to return it to the tray.

The ball connects their separate tasks. One arm changes the next arm’s surroundings, and that change becomes a reason to move. You can inspect the whole arrangement in the interactive installation model.

Overhead view of the three arms, tracks, cup, and tray in the physical installation
The shared habitat, seen from above in the film.

Echo: a fixed gesture

Echo receives the ball in a predictable place. It has no camera and does not choose a new path. A recorded gesture moves the rocking track; a cue from Iris tells it when to start. Repetition is enough because the installation keeps this task consistent. Control is a sequence of joint targets rather than a new reach planned for each arrival. A change to the arrival position would require a change to the gesture or the setup.

Loading visualization…

Echo and its rocking track, replayed from the source installation simulation. Drag to rotate; scroll, pinch, or use + and − to zoom. Scrub to inspect the movement.

Iris: a visual rule

Iris knows where the ball will arrive, but not when. A camera and a rule for an orange, round shape provide the missing cue. Once the ball appears, Iris catches and tips it with a familiar movement. The turn of its wrist then signals Echo. The visual rule provides the start condition; the catch-and-tip gesture remains scripted. This separates two parts of the task: detecting when the catch arrives and executing the familiar movement. Iris can respond to an arrival delay, but the setup still fixes the pickup location.

Loading visualization…

Iris and its mounted cup, replayed from the source installation simulation. The wrist movement and cup share the same simulated time samples. Drag to rotate; scroll, pinch, or use + and − to zoom.

Bandit: a learned response

The salt tray presents a different problem: the ball can land in different places. A fixed reach could close on empty salt. We taught the pickup through demonstrations, connecting wrist and overhead images with the robot’s measured state and action commands.

A person guides a leader arm while the follower performs the movement. Each episode pairs the camera observations with six recorded motor-state channels and action commands. Those examples give a learned policy a way to predict how the reach should change with what the cameras see. The public demonstration dataset contains 115 episodes; a recording is a demonstration of the task, not a guarantee of autonomous success.

Loading visualization…

Bandit’s measured demonstration 042. Translucent poses reveal the recorded reach through time; this is a demonstration, not autonomous policy output. Drag to rotate; scroll, pinch, or use + and − to zoom.

Recorded trajectories

Each demonstration records the six motor states over time. Using the robot’s joint geometry, we can reconstruct the tool position at every measured frame. The traces below compare twelve recorded reaches. The highlighted trace is episode 042, the same demonstration shown above.

Loading trajectories…

Tool positions reconstructed from measured joints. Each line is a separate demonstration; it is not a model prediction.
See a recorded demonstration

Recording the gesture

The public dataset contains 115 episodes and 35,313 measured frames at 15 frames per second. Episode 042 appears below as six motor-state traces and two synchronized camera views.

Six measured motor-state traces from demonstration 042, plotted against source time
Measured observation.state values at the original timestamps, without smoothing.
Overhead camera
Wrist camera

Play, pause, or seek either recording to move both views together.

From examples to actions

We trained ACT and diffusion policies with LeRobot. Both take camera images and robot state as inputs and predict a sequence of commands. ACT predicts an action chunk directly. Diffusion starts with a noisy candidate sequence and refines it over repeated steps. The components below use saved computations on demonstration observations, so we can inspect their predictions without presenting them as live inference.

ACT: predict a sequence

ACT uses a shared visual encoder for the two cameras. Image features and robot state enter a transformer that predicts a chunk of 100 actions. The model learns the relationship between an observation and the demonstrated commands. The released ACT checkpoint is the source for this recorded network view.

Loading ACT network…

Two image streams become features, then action predictions. Colour shows recorded internal values on a local scale. Connections show structure; their playback does not measure execution time.

Diffusion: refine a sequence

The diffusion model encodes the cameras separately and combines those features with robot state. It starts with a noisy 64-step action plan and repeatedly refines it. The saved controller returns 32 actions at a time. This view uses computations from the released diffusion checkpoint.

Loading diffusion network…

Camera features condition a denoising network. These are recorded computations on a demonstration observation, rather than a live control run.

Built with SO-101 arms, LeRobot, and track CAD by Tabu Design.