Kinetic Loop

A kinetic installation for Pixera's Basecamp event: 32 lifts, curved chutes and two robot arms passing printed cubes around a lap. I commissioned it in Isaac Sim before the rig was available, then built the TouchDesigner control that runs it, between the motors, the arms and the Pixera show.

Role
Simulation and control developer
Year
2026 · Pixera Basecamp, built at Volvox Labs
Type
Robotics · Installation · Simulation
Tools
Isaac Sim · OpenUSD · PhysX · cuRobo · TouchDesigner · Python · Pixera

Built at Volvox Labs for Pixera's Basecamp event. Printed cubes travel a lap. 32 linear lifts, fired on a clock and with no sensors, raise each cube to the next chute, and it slides down to the next lift. At each end a UFACTORY 850 arm picks the cube up and places it at the start of the other side.

Would a timed, open-loop rig keep many cubes moving without jamming? The rig was not available yet, so I commissioned it in Isaac Sim first, then built the control that runs it.

One cube's lap in Isaac Sim: 32 lifts and both arms.

The installation

The towers and chutes going in, in the studio.
Commissioning the rig in its enclosure on site.
An arm over the chutes.

The loop in simulation

The Rhino design file became a SimReady USD asset, each lift a prismatic joint. In Isaac Sim the lifts fire on the show's schedule, at the timing read frame by frame from a phone video of a real lift; each cube tips off the head by itself and slides on the real chute meshes. The arms' passes were planned in the shape of a hand-taught program, with NVIDIA cuRobo for any leg that does not clear the rig and Ruckig for the timing, and they carry the cube in the gripper.

Two loops of 10 cubes, all physics, at 2×.
A pass: down to the cube, folded across, straight in.
The fingers close along the chute and square the cube.

Where cubes stop

Every one of the loop's 30 segments was run 256 times, each run with its own friction and its own release off the lift. Then the whole loop: 102 runs of 10 cubes from seeded starts, at the friction measured on the bench (0.276).

  • Above a friction of 0.31, three shallow runs stall slow cubes. Below it, friction hardly matters.
  • Three segments jam at any friction, and each points at a part to change: two pocket entries to chamfer, a low-friction tape run to extend by 25 cm.
  • 45 of the 102 full runs had a cube stop for good within 8 minutes. Two places took over half of those, the cube resting in the same pose every time: a trap in the geometry, and the first thing to check on the rig.
  • One fault came first: 17 of the CAD's 96 acrylic panels cut into a chute. With them colliding, 10 cubes collapsed to 7 % carried.
One segment, 100 runs: stops gather in the grippy columns.
All 45 jams, each re-run from its seed.

Running the rig

The show runs from a Pixera timeline. I built the control between it and the rig in TouchDesigner: it drives the 32 lift motors and both arms, and reports the rig's state back to Pixera.

Pixera
show timeline, one cue per cycle
↓
cue
TouchDesigner
the lift schedule and the arms
↓
motor commands
32 lifts
each on its own second
↓
arm control
Two UF850 arms
pick and place
↓
state
Pixera
what the rig is doing
The show sets the pattern; the actuators stay with the rig.

A cue runs the lift schedule once: over 15 s every lift fires at its own second, so ten cues are one cube's whole lap. The network may say "go now"; it may not say "you may move". The gate that decides whether the rig can move stays on the rig's own machine, and a cue buys exactly one cycle: if the cues stop, the rig finishes the cycle and stops within 15 s, instead of leaving 32 actuators cycling in an empty room. Driving each lift from the timeline would have meant 320 cues a lap, none of which knows where the cube is.

On the real rig

The rig first ran on 10.21, and I compared it with what the sim predicted.

A filmed lift and the sim's, at the same timing.
An arm's pass on the rig, as taught by hand.
  • Right: where cubes collect and queue, the lift's timing, the arms' reach, and the extra 30 mm of travel a stair needs. The lift heights set by hand on site fit the sim's travel on one straight line (r = 0.97).
  • Wrong: the arms' bases stand about 11° off the CAD, one 14 cm nearer. Two taught points per arm solve for the real base to within 6 mm; an arm's base is a measurement, not a drawing.
  • Wrong: the taught passes rise over the towers and take about 26 s, twice the plan, so the loop holds 5 cubes, not 10.
Four black printed cubes with yellow triangles standing nose to tail in a white curved chute before a lift pocket
Four cubes nose to tail in a U-bend.
The arm arrives with the next cube as the lift fires.
Role
Simulation and control developer: the SimReady asset, the Isaac Sim loop and its Monte Carlo studies, the arm passes, and the TouchDesigner control of the 32 lifts and both arms with Pixera
Rig
32 linear lifts, two UFACTORY 850 arms with xArm grippers, 63.5 mm printed PLA cubes
Built with
Isaac Sim 6 · PhysX · OpenUSD · NVIDIA cuRobo · Ruckig · TouchDesigner · Python
Show control
Pixera
Studio
Volvox Labs