A pavilion / lighting installation in Melbourne, Australia. I was the lead developer while employed at Asif Khan’s studio. The piece was commissioned by Federation Square in Melbourne, as part of their “Light in Winter” festival.
The 40 rings of extruded raw aluminium, lined with white LEDs, were split into an inner and outer set creating a moiré effect.
Visitors were detected and tracked using a 360° lidar scanner (with an incredible 250m range), their presence translated into pulses of light that darted around the lines of the pavilion. We had over 120,000 light pulses spawned by visitors over the 22 days of the festival.
I developed an openFrameworks app to do the people tracking, graphics generation, video playback (for standby mode), and scheduling (the system ran autonomously for the duration of the festival). For the tracking I wrote a new library based on ofxSick (by Jamie Zigelbaum, Marcelo Coelho and Kyle McDonald) that wrapped the SICK LD classes of the SICK Toolbox, using ofxCv/openCV (also by Kyle).
We worked with iart in Basel, Switzerland, who developed the electrical/hardware system, as well as providing a custom software driver for the LEDs. The driver also provided a webGL simulator that was massively useful during development. A big thanks goes to Lotz at iart for this, a true C++ guru who really went above and beyond to help the project.
Pixel data was passed from a frame buffer to the driver via POSIX shared memory, the driver then did some data re-organisation (the rings were different lengths, so had different numbers of LEDs; we wanted it so that if you drew a vertical line in the buffer, it wouldn’t be misaligned on the rings) converted it to sACN DMX packets and sent it out to the LED controllers. Even though the LEDs were white, we used the 8 bit RGB channels to achieve 24 bit intensity resolution. To keep it simple on the graphics side everything was drawn as grayscale, and then remapped to RGB.
Finally, the system was kept running with a custom scheduler that allowed the client to change the daily schedule of interactive / non-interactive / off, and Monit to watch the system and processes, solve issues, and send notifications of stats.