FIREFLY & KINECT

Like many people, I've been anxiously awaiting the official release of the Microsoft SDK for the Kinect.  Now, that its officially out, I spent some time over the last two weeks working on a set of Kinect related components that I hope to include in the next release of Firefly (1.007).  The first component I tried to implement was the Skeleton Tracker... and I have to admit that the result are quite promising.  It's surprisingly fast and as long as you stay within the specified range of the sensor, the results are quite good.  Using this component I put together two very quick demo videos.

There has been a big push over the last decade to develop novel 3D technology for multimedia displays (whether its new ways for stereoscopic projection, refractive lens, etc.) One of the most successful implementations and inventive (in my opinion) was Johnny Chung Lee's reverse engineering of the Wii sensor bar.  Another recent example (and equally impressive) is this hack using the Kinect sensor and head tracking

The video above is my first attempt to create a real-time 3D display system within Grasshopper using Firefly's newSkeleton Tracker component and some simple camera manipulation. The Skeleton Tracker component outputs a list of points (click here for further explanation).  From there, I simply use the Horster Camera Control component (another 3rd party plugin for Grasshopper) to position the camera at the viewers head and the camera target at a point in space locating the Kinect sensor.  It really is that easy.  Turn on some real-time shadows and you've got a real-time 3D display.  It still needs some tweaking but it's pretty fun to play with. 

This next demo shows how easy it is to turn gestural movements into physical actuation using an Arduino.  The setup is very simple.  My z-value of my right hand (basically the height of my hand) controls the brightness value (or Pulse Width Modulation - PWM) of the LED.  My left hand controls the servo.  When my hand is by my side, the servo goes to position 0 and if I raise my hand above my head the servo moves to position 180.  So simple.  Of course, this could be expanded to control all sorts of things... perhaps that is next. 

FIREFLY NEW FEATURES

I was extremely excited to announce the official release of Firefly version 1.006 earlier this week.  For those who aren't familiar with Firefly, allow me to provide a short introduction.  Firefly is a set of software tools dedicated to bridging the gap between Grasshopper (a free plug-in for Rhino), the Arduino micro-controller, the internet and beyond. It allows real-time data flow between the digital and physical worlds and will read/write data to/from internet feeds, remote sensors and actuators, mobile phone devices, the Kinect, and more.  There are a lot of new components in this release (including the Arduino Code Generator, Upload to I/O Board, UDP and OSC Listeners and Transmitters, XML Search, and State Detection) that I thought it would be a good idea to put together a few videos showing some of the latest features.  So without further ado...

This first video shows the potential of the new Arduino Code Generator and the Upload to I/O Board components.  In my opinion, one of the greatest limitations of the previous versions of Firefly was that your Arduino board always had to be tethered to your computer via the USB cable.  This was because Firefly communicates back and forth to Grasshopper through serial communication.  However, sometimes you just want to use Grasshopper (and its visual programming interface) to prototype your design and then unplug it from your computer to run off external power.  Now, you can! 

The Arduino Code Generator attempts to convert any Grasshopper definition into Arduino compatible code (C++) on the fly.  It works by detecting components that are 'upstream' from the Uno/Mega Write component.  The Code Generator checks the component ID against a library of custom C++ functions which then get added to the code if there is a match. The code can be simultaneously saved as a .pde (Arduino Sketch) file to be opened in the Arduino IDE.

In addition, there is also a new Upload to I/O Board component which allows you to upload any sketch (could be from the Code Generator or any other sketch) directly to your Arduino board from within the Grasshopper environment. A lot of stuff happens behind the scenes with this component.  Essentially it creates a dynamic MakeFile and calls a shell application to convert the .pde file into a .cpp (C++) file and then into .hex code (machine readable code) to be uploaded to the microcontroller. Note: WinAVR is required to be installed on your machine in order to properly upload sketches to your board.  You can download the latest version here. 

There are also a lot of great network tools included in this release, including the UDP and OSC Listener and Transmittercomponents.  OSC (Open Sound Control) messages are essentially specially formatted UDP messages which can be particularly handy when you want to send some sort of information across a network (either wirelessly or LAN).  OSC messages are particularly useful because each message contains some metadata and a value, giving you more information about what type of data the message contains.  These new components open up a whole new world of possibilities by allowing you to send/receive data from smart phones (iphone or android) or by sharing documents among friends or colleagues over a network.

The video above uses the BreathOSC application (free from the iphone app store) developed by Thomas Edwards to simulate wind effects in Grasshopper.  Simply breathe into the microphone and an OSC message is sent to a specified IP address on a UDP port.  I then simply use the OSC Listener to decode the message and uses its value to create a wind vector to drive the Kangaroo (another 3rd party plugin for Grasshopper) wind simulation.  Daniel Piker, the developer of Kangaroo, helped setup this demo... and I have to say... it's quite fun. 

Another useful networking application for smart phones is TouchOSC (available for both iphone and android).  It supports sending and receiving Open Sound Control messages over a Wi-Fi network using the UDP protocol.  You can also create your own interfaces using the TouchOSC Editor and sync them directly to your phone. In this example, I've created a simple layout to control a few LED's, a tri-color LED, and a standard servo using the new OSC Listener in Firefly.  This is just a simple test, but the sky is the limit with this type of control over mobile phone interface design.

If you are interested in learning more about Firefly, check out our website at: http://www.fireflyexperiments.com/

The website has a lot of good tutorials and examples to get you up and running in no time.  As always, if you have a suggestion or want to send us a comment, you can reach us at info@fireflyexperiments.com

Acknowledgements:

It is without a doubt that this release would not have been possible without the tremendous support from Prof. Panagiotis Michalatos at Harvard's GSD.  His guidance over the last 6 months strongly influenced the development of the Firefly_X toolset and I owe him a great debt of gratitude for his assistance.  Firefly is built upon the Grasshopper plug-in for Rhino, both developed by Robert McNeel and Associates.  The Arduino language syntax is based on Wiring by Hernando Barragan. The Arduino environment is based on Processing byBen Fry and Casey Reas, and is now supported by an amazing team of software and hardware developers that continue to refine and expand its capabilities.

COLAB WORKSHOP

I am very excited to announce that I will be working with Studio Mode in their next coLab workshop series: Hybrid PrototypesHybrid Prototypes is a two-day intensive design and prototyping workshop (with an optional third day) to be held in New York City during the weekend of January 08.

20110108_coLab_hybridProto_600px.jpg

Description:
As architects and designers, we make things and build objects that interact with other objects, people, and networks. We strive for faster and simpler methods to build prototypes in the cheapest possible way, yet we are frequently hindered by temporal and practical factors that arise in the process of bringing our ideas to life. Firefly is the new paradigm for hybrid prototyping, offering a comprehensive set of software tools dedicated to bridging the gap between Grasshopper (a free plug-in for Rhino) and the Arduino micro-controller. It allows near real-time data flow between the digital and physical worlds – enabling the possibility to explore virtual and physical prototypes with unprecedented fluidity.

This fast-paced workshop will focus on hardware and software prototyping techniques. Using remote sensors, microcontrollers (Arduino), and actuators, we will build virtual and physical prototypes that can communicate with humans and the world around them. Through a series of focused exercises and design tasks, each attendee will make prototypes that are configurable, sensate, and active. An optional third workshop day is offered to those participants desiring further time to develop individual projects or lines of research. As part of a larger online infrastructure, modeLab, this workshop provides participants with continued support and knowledge to draw upon for future learning.

Attendance will be limited to provide each participant maximum dedicated time with instructors. Participants are encouraged to be familiar with the basic concepts of parametric design and interfaces of Grasshopper and Arduino.

Hybrid Prototypes was conceived through a collaboration between Studio Mode/modeLab and Andrew Payne/LIFT Architects/Grasshopper PrimerFirefly.

 Instructors: 
Andrew Payne | Principal, LIFT Architects | Co-Author, Grasshopper Primer | Co-Author, Firefly.
Ronnie Parsons + Gil Akos | Partners, Studio Mode.

Details:
All experience levels are welcome. Participants are encouraged to be familiar with the basic concepts of parametric design and interfaces of Grasshopper and Arduino.
Registration Pricing (limited enrollment) : $550/$650.
Workshop Location : modeLab | NYC.
Workshop Hours : 10AM-6PM.
Examples of Previous Workshops.

Infrastructure:
coLab Workbook | Printed + PDF Documentation
coLab Primers | Annotated Primer GHX Files
coLab Exercises | Annotated Exercise GHX Files
modeLab Fabrication Equipment | CNC High Force Cutter

Topics: 
Arduino Micro-controller Hardware
Arduino Control Logic
Firefly Components
Parametric Design Logics
Basic Circuitry
Sensors + Actuators

Dates:
2010.December.03 | Workshop Announced + Registration Opens.
2011.January.08 | Workshop Begins.
2011.January.10 | Optional Workshop Session.

To register for the workshop, please follow this link.